关于故障转移:Sink groups允许组织多个sink到一个实体上。 Sink processors能够提供在组内所有Sink之间实现负载均衡的能力,而且在失败的情况下能够进行故障转移从一个Sink到另一个Sink。
我们去官网看一下Failover Sink Processor(故障转移),FailoverSink Processor会通过配置维护了一个优先级列表。保证每一个有效的事件都会被处理。在这配置中,要设置sinkgroups processor为failover,需要为所有的sink分配优先级,所有的优先级数字必须是唯一的,这个得格外注意。此外,failover time的上限可以通过maxpenalty 属性来进行设置。
故障转移的工作原理是将连续失败的sink分配到一个失败的消息队列中这个sink不会做任何事。假如在一个Agent中,一个Channen对应三个Sink,Sink1和Sink2,Sink3,优先级顺序为Sink1>Sink2>Sink3,所以Channel过来的数据总是先给Sink3,如果Sink3挂掉以后的话在的最大回退周期(也即是Failover Sink Processor中的processor.maxpenalty属性值)内自动起来的话Channel传来的数据是不会再考虑Sink1的,他会传给下一个优先级比较高的Sink2,如果Sink1恢复的时间大于processor.maxpenalty这个值的话那么在下一次传输数据给Sink的时候还是会优先的考虑给Sink1.
故障转移的案例需求:
使用Flume1监控一个端口,其sink组中的sink分别对接Flume2和Flume3,采用FailoverSinkProcessor,实现故障转移的功能。
在主节点的hadoop102上的在/opt/module/flume/job目录下创建group2目录
1.在group2目录中创建flume-netcat-flume.conf文件
配置1个netcat source和1个channel、1个sink group(2个sink),分别输送给flume-flume-console1和flume-flume-console2
在新创建的flume-netcat-flume.conf文件中添加如下内容
# Name the components on this agent
a1.sources = r1
a1.channels = c1
a1.sinkgroups = g1
a1.sinks = k1 k2
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind