1. flume定义

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的组成结构

                                      

flume如何做到不丢数据 flume如何保证数据不丢失_大数据

                                      

flume如何做到不丢数据 flume如何保证数据不丢失_数据_02

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。

Agent主要有3个部分组成,Source、Channel、Sink。

(1)Source:

exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy,以及自定义类型。

(2)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)串联型:

flume如何做到不丢数据 flume如何保证数据不丢失_flume_03

优点:扩大Channel缓冲区

缺点:1,影响传输速率;2,一旦某个节点宕机,整个系统都面临瘫痪的风险

(2)串并联型:


flume如何做到不丢数据 flume如何保证数据不丢失_大数据_04

将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地

flume如何做到不丢数据 flume如何保证数据不丢失_flume如何做到不丢数据_05

将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。

flume如何做到不丢数据 flume如何保证数据不丢失_Source_06

多数据源汇集,常用在服务器日志聚集。

4.Flume Agent内部原理

flume如何做到不丢数据 flume如何保证数据不丢失_数据_07