1.Flume概念和功能
Flume是一种分布式,可靠和可用的服务,用于高效收集,聚合和移动大量日志数据。 它具有基于流数据流的简单灵活的架构。 它具有可靠的可靠性机制和许多故障转移和恢复机制的强大和容错能力。 它使用一个简单的可扩展数据模型,允许在线分析应用程序。
Flume是Cloudera公司开发的用于实时收集服务器(apache/ngnix等)日志数据的框架,Flume很多时候和storm以及spark streaming等流式处理框架结合使用。

kafka/flume + strom/spark streaming

flume高可用 flume功能_服务器


Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步。

2.架构

flume高可用 flume功能_flume高可用_02


Flume事件(event)被定义为具有字节有效载荷和可选的一组字符串属性的数据流的单元。 Flume代理(Agent)是一个(JVM)进程,它承载事件从外部源传递到下一个目标(跳)的组件。

Agent 就是一个java进程,Agent主要有3个部分组成,Source、Channel、Sink。

source:

source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。

channel:

source组件把数据收集来以后,临时存放在channel中,即channel组件在agent中是专门用来存放临时数据的——对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等等。

sink:

sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定义。

*

为了安全性,数据的传输是将数据封装成一个Event事件。Source会将从服务器收集的数据封装成Event,然后存储在缓冲区Channel,Channel的结构与队列比较相似(先进先出)。Sink就会从缓冲区Channel中抓取数据,抓取到数据时,就会把Channel中的对应数据删除,并且把抓取的数据写入HDFS等目标地址或者也可以是下一个Source(这样就可以将Flume串起来,同时一个Source可以接受多个输入,一个Sink可以将数据写出到多个地址)。一定是当数据传输成功后,才会删除缓冲区Channel中的数据,这是为了可靠性。当接收方Crash时,以便可以重新发送数据。

*

flume高可用 flume功能_flume_03


Event作为Flume的最小数据传输单位,以事件的形式将数据从源头传送到最终的目的。具有以下特性:

Event由可选的header和载有数据的一个byte array构成 载有的数据对flume是不透明的
Header是容纳了key-value字符串对的无序集合,key在集合内是唯一的。
Header可以在上下文路由中使用扩