Flume基本原理与架构(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/RivenDong/article/details/101569565

1. 前言

Flume是Cloudera(Hadoop数据管理软件与服务提供商)提供的高可用、高可靠、分布式,进行海量日志采集、聚合和传输系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据。同时,Flume可对数据进行简单处理,并写到各种数据接收方。

2. Flume的特点

2.1 事务性

Flume使用两个独立的事务负责从Source到Channel及从Channel到Sink的事件传递。在Source到Channel的过程中,一旦所有事件全部传递到Channel并且提交成功,那么Source就该将该文件标记为完成;从Channel到Sink的过程同样以事务的方式传递。

2.2 可靠性

Channel中的File Channel具有持久性,事件写入到File Channel后,即使Agent重新启动,事件也不会丢失。Flume中还提供了一种Memory Channel的方式,但它不具有持久存储的能力,数据完整性不能得到保障;与File Channel相比,Memory Channel的优点是具有较高的吞吐量。

2.3 多层代理

分层结构的Flume代理,实现了Flume事件的汇聚,也就是第一层代理采集原始Source事件,并将他们发送到第二层,第二层代理数量比第一层少,汇总了第一层事件后再把这些事件写入到HDFS中。
将一组节点汇聚到一个文件中,这样可以减少文件数量,增加文件大小,减轻施加在HDFS上的压力。另外,因为向文件输入数据的节点变多,所以文件可以更快地推陈出新,从而使得这些文件可用于分析的时间更接近于时间的创建时间。

3. Flume架构

Flume的架构图如下所示:
在这里插入图片描述
在这里插入图片描述
Flume由一组以分布式拓扑结构相互连接的代理构成,FLume中有多个Agent,即Flume代理。Agent是由Source、Sink和Channel共同构成的Java进程,Flume的Source产生事件后将其传给Channel,Channel存储这些事件直至转发给Sink。下图是多个Agent结构的Flume架构图:
在这里插入图片描述

4. Flume的主要组件

4.1 Event、Client与Agent数据传输组件

事件Event是Flume数据传输的基本单元,Flume以事件的形式将数据从源头传送到最终目的。举个栗子:

在进行日志传输时,Client把原始需要收集的日志信息包装成Events并且发送到一个或多个Agent上。这样做的主要目的是从数据源系统中将Flume解耦。
代理Agent是Flume流的基础部分,一个Agent包含Source、Channel、Sink和其他组件,它基于这些组件把Event从一个节点传输到另一个节点或最终目的地上,由Flume为这些组件提供配置、生命周期管理和监控支持。

4.2 Source与Event的接收组件

Source的主要职责是接收Event,并将Event批量地放到一个或者多个Channel中。接下来我们分别介绍一下常用的两类Source:Spooling Directory Source和Exec Source。

  1. Spooling Directory Source

Spooling Directory Source通过读取硬盘上需要被收集数据的文件到spooling目录来获取数据,然后再将数据发送到Channel。该Source会监控指定的目录来发现新文件并解析新文件。

注意:与Exec源不同,即使Flume重新启动或者死机,这种Source也是可靠的,不会丢失数据。同时需要注意的是:产生的文件不能进行任意修改,否则会停止处理。
2. Exec Source

Exec源在启动时运行给定的UNIX命令,并期望该进程在标准输出上连续生成数据。如果进程由于任何原因退出,则源也将退出并且不会继续产生数据。

4.3 Channel与Event的传输组件

Channel位于Source和Sink之间,用于缓存Event,当Sink成功将Event发送到下一个Agent或最终目的之后,会将Event从Channel上移除,不同的Channel提供的持久化水平也是不一样的,并且Channel可以和任何数量的Source和Sink工作。

  1. Memory Channel 内存中存储

Memory Channel是指Events被存储在已配置最大容量的内存队列中,因此它不具有持久化的能力。在使用时,如果出现问题导致虚拟机宕机或操作系统重启,事件就会丢失,在这种情况下,数据完整性不能得到保障。但是与File Channel相比,Memory Channel的优势在于具有较高的吞吐量,在要求高吞吐量并且允许Agent Event失败所导致数据丢失的情况下,是理想的选择。

  1. File Channel持久化存储

File Channel具有持久性,只要事件被写入到Channel,即使代理重启,事件也不会丢失,能保障数据的安全性。

4.4 Sink与Event的发送组件

Sink的主要职责是将Event传输到下一个Agent或最终目的处,成功传输完成后将Event从Channel中移除。
Sink主要分为:File Roll Sink 和 Hdfs Sink

  1. File Roll Sink 写入本地

File Roll SInk 是指将事件写入本地文件系统中,首先我们要在本地文件系统中创建一个缓冲目录,新增文件是由手工添加的。

  1. HDFS Sink 写入HDFS

HDFS Sink是指将事件写入Hadoop分布式文件系统。它可以根据经过的时间、数据大小或事件数量定期滚动文件,也就是关闭当前文件并创建新文件。对于正在进行写操作处理的文件,其文件名会添加一个后缀“.tmp”,以表明文件处理尚未完成。

4.5 其它组件

Interceptor组件主要作用于Source,可以按照特定的顺序对Events进行装饰或过滤。Sink Group允许用户将多个Sink组合在一起,Sink Processor则能够通过组中的Sink切换来实现负载均衡,也可以在一个Sink出现故障时切换到另一个Sink。

猜你喜欢

转载自blog.csdn.net/RivenDong/article/details/101569565