Flume Sink、Sink运行器、Sink组和Sink处理器

Sink运行器(Sink Runner)运行一个Sink组(Sink Group),Sink组可以含有一个或多个Sink。如果组中只存在一个Sink,那么没有组将会更有效率。Sink运行器仅仅是一个询问Sink组(或Sink)来处理下一批事件的线程。每个Sink组有一个Sink处理器(Sink Processor),处理器选择组中的Sink之一去处理下一个事件集合每个Sink只能从一个Channel获取数据(一个Sink只能有一个Channel),尽管多个Sink可以从同一个Channel获取数据。选定的Sink(或如果没有组,唯一的Sink)从Channel中接受事件,并将事件写入到下一阶段或最终目的地。

1.  Sink组

Flume配置框架为每个Sink组实例化一个Sink运行器,来运行Sink组。每个Sink组可以包含任意数量的Sink。Sink运行器持续请求Sink组,要求其中的一个Sink从自己的Channel中读取事件Sink组通常用于RPC Sink,在层之间以负载均衡或故障转移方式发送数据

Sink组中的每个Sink必须单独进行配置。这包括:Sink从哪个Channel读取,写数据到哪些主机或者集群。在理想情况下,如果Sink组中建立了几个Sink,所有的Sink将从相同的Channel读取,这将有利于在当前层以合理的速度清除数据,确保将要被发送到多台集群的数据,以一种支持负载均衡和故障转移的方式进行发送。

2.  Load-Balancing Sink处理器

Load-Balancing Sink 处理器从所有的Sink中选择一个Sink,处理来自Channel的事件。

Sink选择的顺序可以为random或者round-robin。如果顺序被设置为random,那么将随机从Sink组的Sink中选择一个,用来从自己的Channel中移除事件并将它们写出。round-robin选项使Sink以循环的方式被选择:每个选择循环调用定义Sink组中指定顺序Sink的process方法。如果Sink写入到一个失败的Agent或者速度太慢的Agent,会导致超时,Sink处理器会选择另一个Sink写数据。

Sink处理器可以配置将失败的Sink加入黑名单,回退时间以指数方式增长直到达到上限值。这能确保相同的Sink不会循环重复尝试且不浪费资源,直到回退时间过期。

猜你喜欢

转载自blog.csdn.net/qq_43193797/article/details/88664216