Flume进阶
Flume 事务

消息的可靠性保证,在 source 和 slink 中,事件的存储以及恢复作为事务进行封装,存放事件到 channel 中以及从 channel 中拉取事件均是事务性的。这保证了流中的事件在节点之间传输是可靠的。

示例
Flume Agent 内部原理

ChannelSelector
Channel Selector 可以让日志发送到不同的 Channel 中,官方提供了两种 Channel Selector,Replicating Channel Selector 和 Multiplexing Channel Selector,默认是前者。两者的区别是 Replicating Channel Selector 会让 Event 发送到所有的 Channel 中,而 Multiplexing Channel Selector 可以选择将 Event 发送到哪些 Channel。
SinkProcessor
SinkProcessor 共有三种类型,分别是 DefaultSinkProcessor、LoadBalancingSinkProcessor 和 FailoverSinkProcessor。 DefaultSinkProcessor 对应的是单个 Sink;LoadBalancingSinkProcessor 和 FailoverSinkProcessor 对应的是 SInk Group。LoadBalancingSinkProcessor 可以实现负载均衡的功能,FailoverSinkProcessor 可以实现故障转移的功能。
Flume 拓扑结构
简单串联

这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量,flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。
聚合

这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。
用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的 flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。
多路复用

Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个 channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地。
负载均衡和故障转移

Flume 支持使用将多个 sink 逻辑上分到一个 sink 组,sink 组配合不同的 Sink Processor 可以实现负载均衡和错误恢复的功能。
Flume 企业开发案例
复制和多路复用
使用 Flume-1 监控文件变动,Flume-1 将文件变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS。同时 Flume-1 将变动内容传递给 Flume-3,Flume-3 负责输出到 Local FileSystem。

在job目录创建group1文件夹。创建flume1.conf
1个taildir source接收,2个memory channel,2个avro sink发送。
创建flume2.conf
1个avro source,1个输出到hdfs的sink。
创建flume3.conf
1个avro的source,1个输出到文件的sink。
启动监控
负载均衡和故障转移
使用 Flume1 监控一个端口,其中 Sink 组中 Sink 分别对接 Flume2 和 Flume3,采用 FailoverSinkProcessor 时实现故障转移,使用 LoadBalancingSinkProcessor 时实现负载均衡。

故障转移
在job目录创建group2文件夹。创建flume1.conf
配置 1 个 netcat Source 和 1 个 channel 、1 个 Sink Group(2 个 Sink),分别输送给 flume2 和 flume3。
创建flume2.conf
创建flume3.conf
开启监控
负载均衡
和上面故障转移实现流程一样,只需更改 flume1.conf 中 Sink Group 配置,其余一模一样。
聚合
slave1 上的 Flume-1 监控文件 /opt/module/datas/group.log,slave2 上的 Flume-2 监控某一端口数据流,Flume-1 与 Flume-2 将数据发送给 master 上的 Flume3,Flume3 将最终数据打印到控制台。

创建group4文件夹。创建flume1.conf
配置 Source 用于监控 group.log 文件,配置 Sink 输出数据到下一级 Flume。
创建flume2.conf
配置 Source 监控端口 44444 数据流,配置 Sink 输出数据到下一级 Flume。
创建flume3.conf
配置 Source 用于接收 flume1 与 flume2 发送过来的数据,最终合并后 Sink 输出数据到控制台。
执行监控
Last updated