一、Flume拓扑结构
1.1、串行模式
该模式是将多个 Flumev串联起来,为了跨越多个代理或跃点传输数据,前一个代理的 Sink 和当前跃点的 Source 需要为avro类型,且 Sink 指向 Source 的主机名(或IP地址)和端口。
Flume 的数量会影响传输速率,如果其中某个节点宕机,会影响整个传输系统。
1.2、复制和多路复用模式
Flume支持将事件流向一个或多个目的地,这种模式可以将相同数据源复制到多个channel中,或将不同数据分发到不同的channel中,sink可以选择传送到不同的目的地。
1.3、负载均衡模式(单Source、Channel,多Sink)
将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。
1.4、聚合模式
这种模式最常见的,也非常实用,日常web应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用这种组合方式能很好的解决这一问题,每台服务器部署一个flume采集日志,传送到一个集中收集日志的flume,再由此flume上传到hdfs、hive、hbase、消息队列中。
二、Flume内部原理
具体过程
1、Source接收事件,交给其Channel处理器处理事件
2、处理器通过拦截器Interceptor,对事件一些处理,比如压缩解码,正则拦截,时间戳拦截,分类等
3、经过拦截器处理过的事件再传给Channel选择器,将事件写入相应的Channel。
Channel Selector有两种:
Replicating Channel Selector(默认):会将source过来的Event发往所有Channel(比较常用的场景是,用多个Channel实现冗余副本,保证可用性)
Multiplexing Channel Selector:根据配置分发Event。此selector会根据Event中某个header对应的value来将Event发往不同的Channel
4、最后由Sink处理器处理各个Channel的事件 。