Flume Agent内部原理

Flume代理(Agent)是一个(JVM)进程,它承载事件从外部源传递到下一个目标(跳)的组件。
Agent 就是一个java进程,Agent主要有3个部分组成,Source、Channel、Sink。
如果对这三个组件不太清楚的可以看一下我上一篇的博客https://blog.****.net/weixin_44080445/article/details/107065108

1.最开始是由Source来从外部收集数据,收集完的数据会被封装在一个Event对象中,然后由Source调用一个Channel Processor,这样就相当于获取一个channel了,Channel Processor将Event事件传递给拦截器链(Intercepter,进行简单的数据清洗和过滤),清洗完以后再将数据返回到Channel Processor中。

2.Channel Processor接受到数据以后就传给了Channel Selector,这里需要说明一下Channel Selector [分为两种,Replicating Channel Selector(默认的) 和 Multiplexing Channel Selector。
Replicating Channel Selector : 将source过来的events发往所有的channel(相当于复制多份)
Multiplexing Channel Selector:多路Channel 选择器,可以配置source发过来的events具体发往哪些Channel ]

3.Channel Processor根据Channel选择器的选择结果,将Event事件写入相应的Channel中。

4.如果只有一个Sink和一个Channel的话那就直接传过来了,但是如果有多个Sink的话想要接受Channel的的数据必须要经过Sink组(也即是SinkProcessor),然后SinkProcessor启动sink,sink不断到channel中去轮询,将channel中的event事件拿过来。
SinkProcessor有如下三种类型
分别是DefaultSinkProcessor、LoadBalancingSinkProcessor和FailoverSinkProcessor
DefaultSinkProcessor对应的是单个的Sink,LoadBalancingSinkProcessor和FailoverSinkProcessor对应的是Sink Group,LoadBalancingSinkProcessor可以实现负载均衡的功能,FailoverSinkProcessor可以实现故障转移的功能。

最后用一张图来阐述整个流程

Flume Agent内部原理