Flume概述
Flume是一个可靠的、高可用的海量日志收集、聚合、传输系统,支持在日志系统中定制各种数据发送方,用于数据采集,同时,Flume还可以对数据进行简单处理,并且写入各种数据接收方,例如Hadoop、HBase、JDBC等等。
Flume的组成
Flume中的数据流是由Event组成的,Event是 Flume中数据流的基本单位,它携带日志数据和头信息,事件是由数据发送方生成的,Source接收到事件后,会把他推送Chanel中,Channel可以理解为一个缓冲区,它会一直持有事件直到事件被Sink处理完,Sink负责持久化日志数据或将事件推送到另一个Source中。
Flume的可靠性
当Flume节点出现故障时,会将数据发送到其他的节点上而不会造成数据丢失。Flume提供了三种级别的可靠性保障,从强到弱依次为:
- end-to-end:接收到数据的agent首先会将Event写入磁盘,只有当
数据传送成功之后才删除。
2.store on failure:当数据接收方crash时,会将事件写入本地,待恢
复后重新发送。
3.best effort:数据发送的接收方后,不会进行确认。
Flume的可恢复性
Flume的可靠性是由Channel来实现的,可以使用FileChannel,将事件持久化到本地文件系统。
Flume中的核心概念
Agent:是由JVM运行的Flume节点,每台机器运行一个Agent,在一个Agent中可以包含多个Source、Channel和Sink
Client:一个用于收集数据,生成Event的线程
Source:从Client收集数据,发送给Channel
Channel:连接source和sink
Sink:从Channel中收集数据,进行持久化或传递给下一个接收点
Event:Flume数据流的基本组成单位
Flume架构
Flume以Agent作为最小的独立运行单位,一个Agent就是一个JVM,一个Agent’是由Sourcee、Channel、Sink三大组件构成。
值得注意的是Flume内部提供了大量内置的Source、Channel、Sink类型,不同类型的Source、Channl、Sink可以自由组合,组合方式基于用户的配置文件。比如Channel可以把事件暂存到内存中,也可以持久化到本地磁盘,Sink可以把事件写入HDFS、HBase,或者另一个Source。
Flume支持用户建立多级流,也就是说多个Agent可以协同工作。并且支持Fau-in,Fau-out,Contextual route和Backup route。