Flume 原理,分析,架构

Posted 码省理工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume 原理,分析,架构相关的知识,希望对你有一定的参考价值。

站酷 | 邦乔彦

阅读文本大概需要 3 分钟。



Flume 是一种分布式的日志收集框架,用于高效收集,聚合和移动大量且多数据源的日志数据。

 

Flume是Cloudera公司开发的、用于实时收集服务器(apache/ngnix等)日志数据的框架。


本文介绍的是 NG 版本,也就是 Flume 重构之后的版本,目前十分稳定。


1.

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

 

Flume 原理,分析,架构

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

Event:一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)

Flow:Event从源点到达目的点的迁移的抽象。

Agent:一个独立的Flume进程,包含组件Source、

Source:数据收集组件。(source从Client收集数据,传递给Channel)

Channel:中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)

Sink:从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)


2.

分别介绍上面的组件(重要):


Agent 是 Flume 的核心,也就是说 Flume 的最小单位就是 Agent。它有三个核心组件:Source、Channel、Sink。通过这些组件,event 可以从一个地方流向另一个地方。如图:


Flume 原理,分析,架构


Source 是数据的收集端,负责把数据捕获到进行特殊的格式化,将数据封装成 event,然后推送到 channel 中。Flume 内置了很多格式:Avro, log4j, syslog, netcat 和 http post等。

注:可以让应用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。


Channel 是连接 Source 和 Sink 的中间通道,可以把它看做数据缓冲(数据队列),它可以将事件(event)暂存在内存中,也可以持久化到文件中,直到 Sink 处理完该事件。 常用:MemoryChannel 和 FileChannel。


Sink 从 Channel 中取出数据,可以把数据以向文件系统、数据库、 hadoop存数据, 也可以是其他 Agent 的Source。在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。


3.

Flume 使用场景!!


多个 Agent 顺序连接。

Flume 原理,分析,架构


多个Agent 数据汇聚到一个 Agent 里面。

Flume 原理,分析,架构


多级流syslog, java, nginx、 tomcat等混合在一起的日志流开始流入一个 agent 后,可以agent中将混杂的日志流分开,然后给每种日志建立一个自己的传输通道。

Flume 原理,分析,架构


Load Balance功能。下图,Agent1  是一个路由节点,负责将 Channel 暂存的 Event 均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上 。


4.

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

1.End-to-End(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),2.Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),3.Besteffort(数据发送到接收方后,不会进行确认)。


Flume的可恢复性
还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)


实际生产中,Flume 应用非常广泛,需要好好掌握。




Flume 大数据常用


如果对您有帮助,欢迎点赞、关注、转发



以上是关于Flume 原理,分析,架构的主要内容,如果未能解决你的问题,请参考以下文章

Flume原理分析与使用案例

Flume+Hadoop+Hive的离线分析系统基本架构

Flume+Hadoop+Hive的离线分析系统基本架构

Flume+Hadoop+Hive的离线分析系统基本架构

Flume+Kafka+Storm+Redis实时分析系统基本架构

Flume+Kafka+Storm+Redis实时分析系统基本架构