(1)Flume 的核心概念
Flume 以Agent 为最小的独立运行单位。一个Agent 就是一个JVM。单Agent 由Source、Sink 和Channel 三大组件构成,如图8.1 所示。
图8.1 Flume 基础架构
Flume 的核心组件的功能见表8.1。
表8.1 Flume 核心组件功能
Flume 的核心是将数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,再删除缓存的数据。
Flume 运行的核心是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是Source、Channel、Sink。通过这些组件,Event 可以从一个地方流向另一个地方。
Source 可以接收外部源发送过来的数据。不同的Source,可以接受不同的数据格式。例如:目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。
Channel 是一个存储池,接收Source 的输出,直到有Sink 消费掉Channel 中的数据。Channel 中的数据直到进入下一个Channel 中或进入终端,才会被删除。当Sink 写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。
Sink 会消费Channel 中的数据,然后送给外部源或其他Source。例如:数据可以写入到HDFS 或HBase 中。
Flume 传输的数据的基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event 从Source 流向Channel 再到Sink,本身为一个Byte 数组,并可携带headers 信息。Event 代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。
Flume 允许多个Agent 连在一起,形成前后相连的多级跳。Flume 的多Agent 架构,如图8.2 所示。
图8.2 Flume 多Agent 架构(www.xing528.com)
值得注意的是,Flume 提供了大量内置的Source、Channel 和Sink 类型。不同类型的Source、Channel 和Sink 可以自由组合。组合方式基于用户设置的配置文件,非常灵活。例如:Channel 可以将事件暂存在内存里,也可以持久化到本地硬盘上。Sink 可以将日志写入HDFS,HBase,甚至是另外一个Source 等。Flume 支持用户建立多级流,也就是说,多个Agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes。
(2)Source 概述
Source 负责接收Events 或通过特殊机制产生Events,并将Events 批量放到一个或多个Channels。Source 有两种类型,分别是驱动和轮询。驱动型Source 是外部主动发送数据给Flume,驱动Flume 接收数据;轮询Source 是Flume 周期性地主动去获取数据。Source 必须至少与一个Channel 关联。Source 有很多的类型,不同的类型的Source 采集数据源不同,表8.2为Source 的类型与说明。
表8.2 Source 类型与说明
(3)Channel 概述
Channel 位于Source 和Sink 之间,Channel 的作用类似队列,用于临时缓存进来的Events,当Sink 成功地将Events 发送到下一跳的Channel 或最终目的,Events 从Channel 移除。不同的Channel 提供的持久化水平也是不一样的:
①Channels 支持事务,提供较弱的顺序保证,可以连接任何数量的Source 和Sink。
②Memory Channel:消息存放在内存中,提供高吞吐,但不提供可靠性;可能丢失数据。
③File Channel:对数据持久化;但是配置较为麻烦,需要配置数据目录和Checkpoint 目录;不同的File Channel 均需要配置一个Checkpoint 目录。
④JDBC Channel:内置的Derby 数据库,对Event 进行了持久化,提供高可靠性;可以取代同样具有持久特性的File Channel。
(4)Sink 概述
Sink 负责将Events 传输到下一跳或最终目的,成功完成后将Events 从Channel 移除。必须作用于一个确切的Channel。Sink 也分为很多的类型,表8.3 为Sink 的类型与说明。
表8.3 Sink 类型与说明
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。