首页 理论教育 Flume的工作原理及运行机制解析

Flume的工作原理及运行机制解析

更新时间:2025-01-09 工作计划 版权反馈
【摘要】:Flume 的核心概念Flume 以Agent 为最小的独立运行单位。表8.1Flume 核心组件功能Flume 的核心是将数据从数据源收集过来,再送到目的地。Flume 传输的数据的基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Flume 允许多个Agent 连在一起,形成前后相连的多级跳。Flume 运行的核心是Agent。表8.2Source 类型与说明图8.2Flume 多Agent 架构值得注意的是,Flume 提供了大量内置的Source、Channel 和Sink 类型。驱动型Source 是外部主动发送数据给Flume,驱动Flum

(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 类型与说明

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈