一、概述

Flume最早是Cloudera提供的日志收集系统,后贡献给Apache。所以目前是Apache下的一个 孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。

Flume是一个高可用的,高可靠的鲁棒性(robust 健壮性),分布式的海量日志采集、聚合 和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。 由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

系统需求 jdk1.6以上。推荐1.7
下载地址 点击下载

二、两个版本差异

1、Flume0.9.x版本
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。

2、Flume1.x 版本
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅地工作而无需关注下游的任何问题。

三、Flume与Scribe对比

Scribe是Facebook开源的日志收集系统,它为日志的分布式收集,统一处理提供一个可扩展的,高容错的简单方案。

flume mac下载安装 flume版本选择_置数据

四、

flume mac下载安装 flume版本选择_数据_02

五、Flume运行机制

1、agent的三个核心组件
flume运行的核心就是agent,agent本身是一个Java进程,agent里面包含3个核心的组件:source(数据源)—->channel(通道)—–>sink(数据槽),类似生产者——仓库——消费者的架构。

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

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

(3)sink(接收器)
sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

2、完整工作流程
source不断地接收数据,将数据封装成一个一个的event(头信息、正文信息、事件信息),然后将event发送给channel,chanel作为一个缓冲区会临时存放这些event数据,随后sink会将channel中的event数据发送到指定的地方—-例如HDFS、Hive等。

注意:只有在sink将channel中的数据成功发送出去之后,channel才会将临时event数据进行删除,这种机制保证了数据传输的可靠性与安全性。

3、event(事件)
flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume才删除自己缓存的数据。

在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。

:只有在sink将channel中的数据成功发送出去之后,channel才会将临时event数据进 行删除,这种机制保证了数据传输的可靠性与安全性。

flume mac下载安装 flume版本选择_数据_03

六、Flume基本用法

flume之所以这么神奇——其原因也在于flume可以支持多级flume的agent,即flume可以前后相继形成多级的复杂流动,例如sink可以将数据写到下一个agent的source中,这样的话就可以连成串了,可以整体处理了。此外,flume还支持扇入(fan-in)、扇出(fan-out)。所谓扇入就是source可以接受多个输入,所谓扇出就是sink可以将数据输出多个目的地中。

1、flume多级流动

多级流动(multi-hop flow),有点类似物理中的串联。

flume mac下载安装 flume版本选择_多级_04


2、flume数据流合并

数据流合并(consolidation),有点类似与物理中的并联。扇入流(fan-in flow)示意图:

flume mac下载安装 flume版本选择_flume mac下载安装_05


3、flume数据流多路复用

多路复用(multiplexing),有点类似与物理中的并联。扇出流(fan-out)示意图:

flume mac下载安装 flume版本选择_置数据_06


上面的例子展示了agent foo中source扇出数据流到三个不同的channel,这个扇出 可以是复制或者多路输出。在复制数据流的情况下,每一个event被发送所有的三 个channel;在多路输出的情况下,一个event被发送到一部分可用的channel中, 它们是根据event的属性和预先配置的值选择channel的。 这些映射关系应该被填 写在agent的配置文件中。

七、Flume特性

1、可靠性(reliability)
事务性的数据传递,保证数据的可靠性。(一个日志交给flume来处理,不会出现该日志丢失或未被处理的情况)

2、可恢复性(recoverability)
通道可以用内存或文件方式来实现,内存更快,但不可恢复;文件较慢但提供可恢复性。