千家信息网

FLUME NG的基本架构

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,Flume简介Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统。原名是 Flume OG (original generation),但随着 FLume 功能的
千家信息网最后更新 2024年11月19日FLUME NG的基本架构

Flume简介

Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统。原名是 Flume OG (original generation),但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation,改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume)。

FLUME NG

1、NG 只有一种角色的节点:代理节点(agent)。

2、agent 节点的组成也发生了变化。Flume NG 的 agent 由 source、sink、Channel 组成。

flume ng 节点组成图:

多 Agent 并联下的架构图:

Flume 的特性

flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时支持对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

flume 的数据流由事件(Event)贯穿始终。事件是 Flume 的基本数据单位,它携带日志数据并且携带有头信息,这些 Event 由 Agent 外部的 Source 生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个) Channel 中。可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。

Sink 负责持久化日志或者把事件推向另一个 Source。

Flume 具备高可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:

1、end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。

2、Store on failure:这也是scribe采用的策略,当数据接收方crash崩溃时,将数据写到本地,待恢复后,继续发送。

3、Best effort:数据发送到接收方后,不会进行确认。

Flume 架构组成和核心概念

client: 生产数据的地方,运行在一个独立的线程。

event: 生产的数据,可以是日志记录、 avro 对象等,如果是文本文件通常是一行记录。

agent: flume 核心组件,flume 以 Agent 为最小的独立运行单位。一个 agent 就是一个 jvm, agent 又是由 source, channel, sink 等构建而成。

agent 由 source, channel, sink 等构建而成:

3.1 Source:从 Client 收集数据,传递给 Channel

不同的 source,可以接受不同的数据格式,比如监视外部源-目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。source 组件可以处理各种格式的日志数据,eg:avro Sources、thrift Sources、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。

Avro Source:支持Avro协议(实际上是Avro RPC),内置支持|

Thrift Source:支持Thrift协议,内置支持

Exec Source:基于Unix的command在标准输出上生产数据

JMS Source:从JMS系统(消息、主题)中读取数据

Spooling Directory Source:监控指定目录内数据变更

Twitter 1% firehose Source:通过API持续下载Twitter数据,试验性质

Netcat Source:监控某个端口,将流经端口的每一个文本行数据作为Event输入

Sequence Generator Source:序列生成器数据源,生产序列数据

Syslog Sources:读取syslog数据,产生Event,支持UDP和TCP两种协议

HTTP Source:基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式

Legacy Sources:兼容老的Flume OG中Source(0.9.x版本)

详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sources

3.2、Channel:连接 sources 和 sinks

有点像一个队列,是一个存储池,接收 source 的输出,直到有 sink 消费掉 channel 中的数据,channel 中的数据直到进入下一个 channel 或者进入 sink 才会被删除,当 sink 写入失败后,可以自动重启,不会造成数据丢失。临时存放的数据可以存放在memory Channel、jdbc Channel、file Channel、自定义。

Memory Channel:Event数据存储在内存中

JDBC Channel:Event数据存储在持久化存储中,当前Flume Channel内置支持Derby

File Channel:Event数据存储在磁盘文件中

Spillable Memory Channel:Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件

Pseudo Transaction Channel:测试用途

Custom Channel:自定义Channel实现

详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-channels

3.3、Sink:从Channel收集数据,运行在一个独立线程

用于把数据发送到目的地的组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sinks

flume可以支持

1、多级 flume的 agent,(即多个 flume 可以连成串,上一个 flume 可以把数据写到下一个 flume 上)

2、支持扇入(fan-in):source 可以接受多个输入

3、扇出(fan-out):sink 可以输出到多个目的地

3.4、其他几个组件

Interceptor:作用于Source,按照预设的顺序在必要地方装饰和过滤events。

Channel Selector:允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel

Sink Processor:多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。

睿江云官网链接:http://www.eflycloud.com/#register?salesID=6DGNUTUAV

0