Flume(三十二)Flume的执行流程

 

1. 首先Source会采集数据,将数据发送给ChannelProcessor进行处理。

2. ChannelProcessor处理之后,将数据交给Interceptor来处理,注意在Flume允许存在多个Interceptor来构成拦截器链。

3. Interceptor处理完成之后,交给Selector处理,Selector存在两种模式replicating和multiplexing。Selector收到数据之后会根据对应的模式将数据交给相应的Channel来处理。

4. Channel处理之后交给SinkProcessor。SinkProcessor本质上是Sinkgroup,包含三种方式Default,Failover和Load Balance。SinkProcessor收到数据之后会根据对应的方式将数据交给Sink来处理。

5. Sink收到数据之后,会将数据写到指定的目的地。

  1. Source->Channel
    数据由 Source 写入 Channel,主动模式,主要步骤如下:
    1)SourceRunner 启动 Source,Source 接收 Event;
    2)Source 调用 ChannelProcessor;
    3)ChannelProcessor 调用 Interceptor 进行过滤 Event 操作;
    4)ChannelProcessor 调用 ChannelSelector 对象根据配置的策略选择 Event对应的 Channel(replication 和 multiplexing 两种);
    5)Source 将 Event 发送到对应的 Channel 中。

  2. Channel->Sink
    数据由 Sink 主动从 Channel 中拉取
    1)SinkRunner 启动 SinkProcessor(DefaultSinkProcessor,FailoverSinkProcessor,LoadBalancingSinkProcessor 3 种);
    2)如果是 DefaultSinkProcessor 的话,直接启动单个 Sink;
    3)FailoverSinkProcessor,LoadBalancingSinkProcessor 对应的是 SinkGroup;
    4)FailoverSinkProcessor 从 SinkGroup 中选择出 Sink 并启动;
    5)LoadBalancingSinkProcessor 包含 SinkSelector,会根据 SinkSelector 在SinkGroup 中选择 Sink 并启动;
    6)Sink 从 Channel 中消费 Event 信息。

  3. 基本概念

  4.       Source 是负责接收数据到Flume Agent的组件,采集数据并包装成Event。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy

  5. Sink
            Sink 不断地轮询Channel 中的事件且批量地移除他们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

            **Sink是完全事务性的。**在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量时间一旦成功写出到存储系统或下一个 Flume Agent,Sink 就利用Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓存区删除事件。

            Sink 组件目的地包括hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义

    Channel
            Channnel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许Source 和 Sink 运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作

            Flume 自带两种Channel:

            Memory Channel是内存中的队列。Memory Channel在不需要关系数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器当即或者重启都会导致数据丢失

            File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据

    Event
            数据在channel中的封装形式。

            传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event 由 Header 和Body 两部分组成,Header用来存放该event的一些属性,为K-V结构,Body 用来存放该条数据,形式为字节数组

     interceptor 拦截器
            拦截器工作在source 组件之后,source 产生的 event 会被出入拦截器根据需要进行拦截处理,而且,拦截器可以组成拦截器链!

            拦截器在flume中有一些内置的功能;

            用户也可以根据自己的数据处理需求,自己开发自定义拦截器,这也是Flume的一个可以用来自定义扩展的接口。

    channel selector
            一个source可以对接多个channel ,则 event 在这 n 个channel 之间传递的策略,由配置的channel selector 决定;

            channel selector 有两种实现:replicating(复制),multiplexing(多路复用)

     sink processor
            如果sink 和 channel 是一对一关系,则不需要专门的sink processor;

    如果要配置一个channel 对多个sink ,则需要将这多个sink配置成一个sink group (sink组);

            event 在一个组中的多个sink 间如何传递,则由所配置的sink processor l来决定;

            根据 Flume 的架构原理,Flume 是不可能丢失数据的,其内部有完善的事务机制, Source 到 Channel 是事务性的,Channel 到 Sink 是事务性的,因此这两个环节不会出现数 据的丢失,唯一可能丢失数据的情况是 Channel 采用 memoryChannel,agent 宕机导致数据 丢失,或者 Channel 存储数据已满,导致 Source 不再写入,未写入的数据丢失。

    Flume 不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由 Sink 发出, 但是没有接收到响应,Sink 会再次发送数据,此时可能会导致数据的重复。
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值