程序员

Flume介绍

2016-10-06  本文已影响0人  AlbertCheng

声明

我对Flume的研究并不深,这一篇文章来源于2016年3月的某一个下午对Flume的调研,仅有一个下午,所以可能有一些观点是不对的。另外,文章很多内容来源于一些大神的博文,当时匆匆没有记录引用来源。所以,如果有人可以发现本文的错误,以及引用的文章,还请在留言中指出。万分感谢。

Flume OG

Flume OG:Flume Original Generation,初代Flume。
由三种角色构成:代理点(agent)、收集节点(collector)、主节点(master)

Flume NG

Flume NG:Flume New Generation

Flume NG分析

基本概念

数据流:

Flume 的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据:当sink写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。
Flume 传输的数据的基本单位是 Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event 从 Source,流向 Channel,再到 Sink,本身为一个 byte 数组,并可携带 headers 信息。Event 代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。

核心组件:

Source

Channel

Memory Channel, JDBC Channel , File Channel,Psuedo Transaction Channel。比较常见的是前三种 channel。

Sink

flume-sink.png

可靠性

在Flume NG中,可靠性指的是在数据流的传输过程中,保证events的可靠传递。
在Flume NG中,所有的events都保存在Agent的Channel中,然后被发送到数据流下一个Agent或者最终的存储服务中。当且仅当它们被保存到下一个Agent的Channel中,或者被保存到最终的存储服务中。这就是Flume 提供数据流中点到点的可靠性保证的最基本的单跳消息语义传递。
首先,Agent间的事务交换。Flume使用事务的办法来保证events的可靠传递。Source和Sink分别被封装在事务中,这些事务由保存event的存储提供或者由Channel提供。这就保证了event在数据流的点对点传输中是可靠的。在多级数据流中,如下图,上一级的Sink和下一级的Source都被包含在事务中,保证数据可靠地从一个Channel到另一个Channel转移。


flume-transaction.png

下图A:正常情况下的 events流程。
下图B:Agent2 跟central event store失联,Agent2提交的事务失败,将events缓存起来。
下图C:重新恢复时,再恢复失联之前的任务以及后续的events发送。


flume-trans-example.png

高可用

如下图所示,Agent1中,只有要有一个Sink组件可用,events就被传递到下一个组件,如果一个Sink能成功处理Event(事务完成),则会加入到一个Pool中, 否则,则会从Pool中移除,并计算失败次数,设置惩罚因子。所以,如果某一个Flow中某一层的Agent只有一个,或者全部宕机,可能导致这些Events被存储在流水线上最后一个存活节点。


flume-available.png
上一篇下一篇

猜你喜欢

热点阅读