一、基本特点
flume是一个分布式、高可用的海量日志收集、聚合、传输系统。
二、可靠性:
当节点出现故障时,日志能够被传送到其他节点上而不会丢失。
三种级别的可靠性保障,从强到弱依次分别为:
end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。
Store on failure(当数据接收方crash时,将数据写到本地,待恢复后,继续发送)
Besteffort(数据发送到接收方后,不会进行确认)。
三、可恢复性:通过Channel比如FileChannel,将事件持久化在本地文件系统里(性能较差)。
四、核心概念:
1、Client:Client生产数据,运行在一个独立的线程
2、Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
3、Agent: 一个独立的Flume进程,包含组件Source、Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
4、Source: 数据收集组件。(source从Client收集数据,传递给Channel)
5、Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event,像队列。
6、Sink: 从Channel中读取并移除Event,运行在一个独立线程。
五、Agent
flume的核心,Flume以agent为最小的独立运行单位;
包括source、 channel、 sink
六、source
Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。
七、Channel
Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。
八、Sink
Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、 hadoop存数据, 也可以是其他agent的Source。在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。
九、Flume拦截器
主要用于数据过滤
拦截器的位置在Source和Channel之间,当我们为Source指定拦截器后,我们在拦截器中会得到event,根据需求我们可以对event进行保留还是抛弃,抛弃的数据不会进入Channel中。
十、Flume可靠性
Flume 使用事务性的方式保证传送Event整个过程的可靠性。
Sink 必须在Event 被存入 Channel 后,已经被传达到下一站agent里,或者已经被存入外部数据目的地之后,才能把 Event 从 Channel 中 删除。
这样数据流里的 event 无论是在一个 agent 里还是多个 agent 之间流转,都能保证可靠,因为以上的事务保证了 event 会被成功存储起来。Flume支持在本地保存一份文件 channel 作为备份,而memory channel 将event存在内存 queue 里,速度快,但丢失的话无法恢复。
十一、Flume使用场景
1、多个agent顺序连接
2、多个Agent的数据汇聚到同一个Agent
这种情况应用的场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为每个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。
3、多级流
4、更复杂的