下图描述了 Flume 的基本架构。如示意图所示, data generators (如 Facebook、Twitter)会生成数据,这些数据由在这些数据上运行的各个 Flume agents 收集。此后, data collector (也是一个代理)会从代理中收集数据,这些数据会聚合并推送到 HDFS 或 HBase 等集中存储中。
Flume Event
event 是 Flume 中传输的数据的基本单位。它包含一个字节数组有效负载,该有效负载将随可选标题一起从源传输到目标。典型的 Flume 事件将具有以下结构 −
Flume Agent
在 Flume 中, agent 是一个独立的守护进程 (JVM)。它从客户端或其他代理接收数据(事件)并将其转发到其下一个目的地(汇或代理)。Flume 可以有多个代理。下图表示 Flume Agent
如该图所示,Flume 代理包含三个主要组件,即 source 、 channel 和 sink 。
Source
source 是代理的一个组件,它从数据生成器处接收数据并将其作为 Flume 事件的形式传输到一个或多个信道。
Apache Flume 支持多种类型的源,每个源都会从指定的数据生成器接收事件。
Example − Avro 源、Thrift 源、twitter 1% 源等。
Channel
channel 是一个瞬态存储,它从源接收事件并在汇使用它们之前对其进行缓冲。它充当源和汇之间的桥梁。
这些信道是完全事务性的,并且它们可以与任何数量的源和汇协同工作。
Example − JDBC 信道、文件系统信道、内存信道等。
Sink
sink 将数据存储到 HBase 和 HDFS 等集中存储中。它使用来自信道的数据(事件)并将其传递到目的地。汇的目的地可能是另一个代理或集中存储。
Note − 一个 Flume 代理可以有多源、多汇、多信道。我们在本教程的 Flume 配置章节中列出了所有受支持的源、汇和信道。
Additional Components of Flume Agent
我们在上面讨论的是代理的基本组件。除此之外,我们还有更多组件在将事件从数据生成器传输到集中存储中起着至关重要的作用。
Interceptors
拦截器用于更改/检查在源和信道之间传输的 Flume 事件。
Channel Selectors
在多个信道的情况下,这些用于确定要选择哪个信道来传输数据。信道选择器有两种类型 −
-
Default channel selectors − 它们也称为复制信道选择器,它们会复制每个信道中的所有事件。
-
Multiplexing channel selectors − 它们根据该事件标题中的地址来决定要发送事件的信道。
Sink Processors
这些用于从所选汇组中调用特定的汇。它们用于为您的汇创建故障转移路径,或者在信道中跨多个汇负载平衡事件。