1. flume定义
Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.
flume的优点:1、可以和任意文件存储系统集成。
2、在实时传输的数据输入源和输出源之间建立传输缓冲,以及对被传输数据做初步筛选。
3、flume中的事务基于channel,使用两个事务模型(sender+receiver)确保消息被可靠传输。
flume最大的作用是可以实时的读取被监控文件目录,并实时上传至目的文件系统。一般用在服务器上传日志至hdfs或kafka。
2.flume的组成结构
Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。
Agent主要有3个部分组成,Source、Channel、Sink。
(1)Source:
负责接收数据到agent的组件,其可处理多种类型的数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy,以及自定义类型。
(2)Channel:
位于Source和Sink之间,具有缓冲、拦截、选择等功能。因此,Channel允许Source和sink运作在不同的传输速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个sink的读取操作。
Flume自带两种Channel:Memory Channel和File Channel。
Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。
File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
(3)Sink:
Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。
(4)Event:
传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。 Event由可选的header和载有数据的一个byte array 构成。Header是容纳了key-value字符串对的HashMap。
3.Flume的多种拓扑结构
(1)串联型:
优点:扩大Channel缓冲区
缺点:1,影响传输速率;2,一旦某个节点宕机,整个系统都面临瘫痪的风险
(2)串并联型:
4.Flume Agent内部原理