一、Flume 基本概念
Flume 是流式日志采集工具,Flume 提供对数据进行简单处理并且写到各种数据接受方(可定制)的能力,Flume 提供从本地文件(spooldirectorysource)、实时日志(taildir、exec)、REST 消息、Thrift、Avro、Syslog、Kafka 等数据源上收集数据的能力。
Flume 适用场景:应用系统产生的日志采集,采集后的数据供上层应用分析。 Flume 不适用场景:大量数据的实时数据采集(要求低延迟、高吞吐率)。
与其他开源日志收集工具 scribe 比较而言,几乎不用用户开发,scribe 需要用户另外开发 client,而 Flume 每一种数据源均有相应的 source 去读取或者接收数据。
适用环境:
提供从固定目录下采集日志信息到目的地(HDFS,Hbase,Kafka)能力。提供实时采集日志信息(taildir)到目的地的能力。
Flume 支持级联(多个 Flume 对接起来),合并数据的能力。 Flume 支持按照用户定制采集数据的能力。
二、Flume 架构
(1) Flume 的外部结构:
如上图所示,数据发生器(如:facebook,twitter)产生的数据被被单个的运行在数据发生器所在服务器上的 agent 所收集,之后数据收容器从各个 agent 上汇集数据并将采集到的数据存入到 HDFS 或者 HBase 中
(2) Flume 事件
事件作为 Flume 内部数据传输的最基本单元.它是由一个转载数据的字节数组(该数据组是从数据源接入点传入,并传输给传输器,也就是 HDFS/HBase)和一个可选头部构成.
典型的 Flume 事件如下面结构所示:
我们在将 event 在私人定制插件时比如:flume-hbase-sink 插件是,获取的就是 event 然后对其解析,并依据情况做过滤等,然后在传输给 HBase 或者 HDFS.
(3) FlumeAgent
我们在了解了 Flume 的外部结构之后,知道了 Flume 内部有一个或者多个Agent,然而对于每一个 Agent 来说,它就是一共独立的守护进程(JVM),它从客户端哪儿接收收集,或者从其他的 Agent 哪儿接收,然后迅速的将获取的数据传给下一个目的节点 sink,或者 agent.如下图所示 flume 的基本模型Agent 主要由三部分构成:Source、Channel 和 Sink