Flume是Cloudera提供的日志收集系统,具有分布式、高可靠、高可用性等特点,对海量日志采集、聚合和传输,Flume支持在日志系统中定制各类数据发送方,同时,Flume提供对数据进行简单处理,并写到各种数据接受方的能力。
Flume传输的数据的基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event从Source,流向Channel,再到Sink,本身是一个byte数组,并可携带headers信息。Evnet代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。
Flume运行的核心是Agent,它是一个完整的数据收集工具,含有三个核心组件、分别是Source、Channel、Sink。通过这些组件,Event可以从一个地方流向另一个地方。
可靠性
Flume的核心是把数据从数据源手机过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓冲数据,待数据真正到达目的地后,删除自己缓存的数据。
Flume使用事务性的方式保证传送Event整个过程的可靠性。Sink必须在Event被存入Channel后,或者,已经被传送到下一站Agent里,又或者,已经被存入外部数据目的地之后,才能把Event从Channel中remove掉。这样数据流里的event无论是在一个agent里还是多个agent之间流传,都能保证可靠,因为以上的事务保证了event会被成功存储起来。而Channel的多种实现在可恢复性又不同的保证。也保证了Event不同程度的可靠性。比如支持本地保存一份文件channel作为备份,而memorychannel将event存在内存queue里,速度快,但丢失的话无法恢复。
可恢复性