Apache Flume - 架构

下图描述了Flume的基本架构。 如图所示,数据生成器(例如 Facebook、Twitter)生成数据,这些数据由运行在其上的各个 Flume 代理收集。 此后,数据收集器(也是一个代理)从代理收集数据,这些数据被聚合并推送到集中式存储(例如 HDFS 或 HBase)中。

Flume 架构

Flume Event

Event(事件)Flume内部传输数据的基本单位。 它包含字节数组的有效负载,该负载将从源传输到目的地,并附有可选标头。 典型的 Flume 事件具有以下结构 −

Flume Event

Flume Agent

Agent(代理)是Flume中的一个独立的守护进程(JVM)。 它从客户端或其他代理接收数据(事件)并将其转发到下一个目的地(接收器或代理)。 Flume 可能有多个代理。 下图代表一个 Flume Agent

Flume Agent

如图所示,Flume Agent 包含三个主要组件,即 sourcechannelsink

Source

Source(源)是Agent的组件,它从数据生成器接收数据并以Flume事件的形式将其传输到一个或多个通道。

Apache Flume 支持多种类型的源,每个源从指定的数据生成器接收事件。

示例 − Avro 来源、Thrift 来源、twitter 1% 来源等。

Channel

channel(通道)是一个临时存储,它从源接收事件并缓冲它们,直到它们被接收器消耗。 它充当源和汇之间的桥梁。

这些通道是完全事务性的,它们可以与任意数量的源和接收器配合使用。

示例 − JDBC通道、文件系统通道、内存通道等

Sink

Sink(接收器)将数据存储到 HBase 和 HDFS 等集中存储中。 它消耗来自通道的数据(事件)并将其传递到目的地。 接收器的目的地可能是另一个代理或中央商店。

示例 − HDFS接收器

注意 − 一个 Flume Agent 可以有多个源、汇和通道。 我们在本教程的 Flume 配置章节中列出了所有支持的源、接收器、通道。

Flume Agent 的附加组件

我们上面讨论的是代理的原始组件。 除此之外,我们还有一些组件在将事件从数据生成器传输到集中存储方面发挥着至关重要的作用。

拦截器

拦截器用于更改/检查在源和通道之间传输的 Flume 事件。

通道选择器

这些用于确定在多个通道的情况下选择哪个通道来传输数据。 有两种类型的通道选择器 −

  • 默认通道选择器 − 这些也称为复制通道选择器,它们复制每个通道中的所有事件。

  • 多路复用通道选择器 − 这些根据事件标头中的地址决定发送事件的通道。

接收器处理器

这些用于从选定的接收器组中调用特定的接收器。 它们用于为您的接收器创建故障转移路径或跨通道的多个接收器负载平衡事件。