一、Flume定义
Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。
Flume基于流式架构、灵活简单。
Flume支持在日志系统中定制各类数据发送方,用于采集数据。
Flume提供对数据进行简单处理,并写到各种数据接收方的能力。
简单的说,Flume是实时采集日志的数据采集引擎。
二、Flume特性
分布式:flume分布式集群部署,扩展性好
可靠性好:当节点出现故障时,日志能够被传送到其他节点上而不会丢失
易用性:flume配置使用较繁琐,对使用人员专业技术要求高
实时采集:flume采集流模式进行数据实时采集
三、Flume中的组件
Agent:本质上是一个JVM进程,该JVM进程控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。
Source:是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、exec、spooldir、netcat等。
Channel:是位于Source和Sink之间的缓冲区。Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理多个Source的写入操作及多个Sink的读取操作。
常用的Channel包括:Memory Channel是内存中的队列。Memory Channel在允许数据丢失的情景下适用。如果不允许数据丢失,应该避免使用Memory Channel,因为程序死亡、机器宕机或者重启都可能会导致数据丢失。
File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
Sink:不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
Sink组件包括hdfs、logger、avro、file、null、HBase、消息队列等。
Event:是Flume定义的一个数据流传输的最小单位。