189 8069 5689

FLUMENG的基本架构

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 节点组成图:

FLUME NG的基本架构

多 Agent 并联下的架构图:

FLUME NG的基本架构

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失败时转移到另一个。

FLUME NG的基本架构

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


文章名称:FLUMENG的基本架构
文章起源:http://cdxtjz.cn/article/jgeshp.html

其他资讯