一:Failover?sink?的原理
? failover sink处理器从配置的sink组中按优先级高低选择sink,拥有优先级最高的sink先写数据直到该sink失败,然后选择组里面剩下的优先级最高的sink继续处理数据,因此,这能够确保每台机器上只有一个sink写入到第二层的所有agent,因为在同一时刻,有且仅有一个sink被激活。
? 需要注意的是,如果一个最高优先级的sink失败后,flume会选择组里面剩下的优先级最高的sink来处理数据,但是当失败的sink重新恢复后,flume是不会立即允许重新恢复后的sink拥有写数据的资格的,除非当前活跃的sink失败后,等待下次选择时,再选择出重新恢复的优先级最高的sink。
二:详细配置说明
??Type:必须设置为failover
??Processor.priority:sink组中每个sink的优先级
??Maxpenalty:失败sink的最大回退时间
?
? 在截图的配置中,组g1里面有4个sink,其中数字越大,优先级越高,如果我们没有显示的为sink设置优先级,那么该sink的优先级取决与该sink在sink组配置中被指定的顺序,默认从0开始,所以k3的优先级是0,因此,上面4个sink的优先级分别是k2,k1,k3,k4,当sink出现写数据失败时,也会被加入黑名单,黑名单中时间间隔一直增加到指定的maxpenalty值不在增加,如果失败的sink恢复后,sink写数据成功,那么回退时间将被清零。
? 先启动4个sink,在启动agent,当我们往监听目录写入写文件时,会发现只有优先级最高的k2,会收到数据:
生产数据:
K2收到数据
当我们断掉k2,然后往监控目录再写一个不一样内容的文件,
然后会发现k1收到了数据,且接受到了前一个文件的数据,因此可以看到数据是放到内存中的。
原文:http://090508tanjie.iteye.com/blog/2288860