一,flume是什么?
flume是一个分布式,可靠且高可用的服务,用于有效的接受,聚合,转移大量日志数据,flume具有基于流数据的简单灵活架构,良好的高可靠机制,故障转移和恢复机制,具有了强大的容错性。flume支持在系统中定制各种数据接受方,用于收集数据。同时,flume提供对数据进行简单处理,并写入各种数据接收方的能力。
二,Flume 发展历程
Flume 最初是 Cloudera 开发的日志收集系统,受到了业界的认可与广泛应用,后来逐步演化成支持任何流式数据收集的通用系统。
Flume 目前存在两个版本:Flume OG(Original generation) 和 Flume NG (Next/New generation)。
其中 Flume OG 对应的是 Apache Flume 0.9.x 之前的版本,早期随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.9.4. 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,Cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动,重构后的版本统称为 Flume NG(next generation)。同时此次改动后,Flume 也纳入了 apache 旗下。
Flume NG 在 OG的架构基础上做了调整,去掉了中心化组件 master 以及服务协调组件 Zookeeper,使得架构更加简单和容易部署。Flume NG 和 OG 是完全不兼容的,但沿袭了 OG 中的很多概念,包括Source,Sink等。
三,flume基本思想及特点
基本思想:flume采用插拔式软件架构,所有组件都是可插拔的,用户可以根据自己的需求定制各 种组件,flume的本质是中间件
特点: 1. 良好的扩展性;Flume 的架构是完全分布式的,没有任何中心化组件,使得其非常容易 扩展。
2. 高度定制化;采用插拔式架构,各组件插拔式配置,用户可以很容易的根据需求自由 定义。
3. 良好的可靠性;Flume 内置了事务支持,能保证发送的每条数据能够被下一跳收到而 不丢失。
4. 可恢复性;依赖于其核心组件channel,选择缓存类型为FileChannel,事件可持久化到 本地文件系统中。
四· ,flume的基本架构
1 Agent
Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。 相当于一个job mapreduce
Agent主要有3个部分组成,Source、Channel、Sink。
1.2.2 Source
Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。
source :收集的数据源:
exec: 日志文件。
spooling directory :目录
netcat : ip:port 网络请求来源
avro : 上一个flume的sink下沉的数据。
1.2.3 Channel
Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全(线程队列)的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
Flume自带两种Channel:Memory Channel和File Channel。
Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
1.2.4 Sink
Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统Hbase、或者被发送到另一个Flume Agent。
Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件event。
Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、kafka自定义。
1.2.5 Event
传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。
agent; 事件:每运行一个flume,就会开启一个agent.
source: 数据源
channel: 传输管道
sink: 下沉
event: 数据基本单元