Flume Agent 内部原理

Flume Agent 内部原理

在这里插入图片描述

从Soure 到 Channel过程

首先,source将接收的数据,封装成一个个的事件(event), 在事件进入Channel之间,首先要先进去Channel Processor 来处理事件,(事件就是一个个的对象) 所以我们可以在它进去channel之间进行很多操作去处理event。

例如我们可以写一个事件拦截器链设置一定条件,如果传输来的事件,不符合我们的要求,可以直接pass掉,对当前事件的处理,到此结束。设置的拦截器都需要一个个走。

走完拦截器以后,要走Channel Selector (Channel选择器)因为我们可能有多个Channel,通过它就可以判断当前事件应该走向哪个Channel,或者所有Channel。默认Replicating Channel Selector(default)-- (replicating hdfs中代表副本),在这里表示,将相同事件发送给每一个Channel。Multiplexing Channel Selector 多路复用,需要配置event,header中的k-v,根据 header决定将event 发送到哪一个Channel中。

当source把数据封装成event以后,header中kv是空的,所以先经过拦截器,在拦截器中就可以给event加上header信息。之后再经过 Multiplexing channel selecot,就可以明白当前event应该进入哪个channel中去。

总结: 再event进入channel之前,可以先进入拦截器(可有可无,根据需求,自行设置)

再进入Channel选择器(必须,一定进入) 默认Replicating Channel Selector(default)

从Channel到Sink的过程

在这里插入图片描述

当event从Channel中出来以后,再进去sink之前,需要现有sink Processor处理,SinkProcessor 有三种。DeafultSinkProcessor 只支持一个sink,有多个sink的时候不可能用它。

如果有多个sink的时候,LoadBalancingSinkProcessor 负载均衡sink组,每一个sink处理的数据差不多,那么如何保证每个sink处理的event大致相同呢? 1.轮巡(一个一个的一次给) 2. random随机,event到每个sink的概率是相同的。

FailoverSinkProcessor故障转移sink组,当前事件只能给到一个sink,该sink变成active sink处于激活状态的sink(正在处理event),其他sink则处于standby状态。如过active sink发生故障,数据就会转移别的sink(通过设置优先级,不是zookeeper中投票机制)

Source >>> 拦截器(可选的) >>> Channel Selector >>> Channel >>> Sink Processor >>> Sink

Channel Selector,再多个Channel的情况下,选择将event给到哪一个Channel

hannel的情况下,选择将event给到哪一个Channel

Sink Processor,选者将channel中出来的event给到哪一个sink

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值