首页技术文章正文

Flume的运行机制介绍

更新时间:2021-12-01 来源:黑马程序员 浏览量:

Flume原是Cloudera公司提供的一个高可用的、高可靠的、分布式海量日志采集、聚合和传输系统,而后纳人到了Apache旗下,作为一个顶级开源项目。Apache Flume不仅只限于日志数据的采集,由于Flume采集的数据源是可定制的,因此Flume还可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息以及几乎任何可能的数据源。

当前Flume分为两个版本: Flume 0.9x版本,统称Flume-og(original generation)和Flume 1.x版本,统称Flume-ng(next generation)。 由于早期的Flume-og存在设计不合理、代码臃肿、不易扩展等问题,因此在Flume纳入到Apache旗下后,开发人员对Cloudera Flume的代码进行了重构,同时对Flume功能进行了补充和加强,并重命名为Apache Flume,于是就出现了Flume-ng与Flume-og两种截然不同的版本。而在实际开发中,多数使用目前比较流行的Flumeng版本进行Flume开发。


Flume运行机制

Flume的核心是把数据从数据源(如WebServer)通过数据采集器(Source)收集过来,再将收集的数据通过缓冲通道(Channel)汇集到指定的接收器(Sink)。这里可以参考官方的架构图,具体展示Flume的运行机制,如下图所示。

flume基本架构

从图上可以看出,Flume基本架构中有一个Agent(代理),它是Flume的核心角色,Flume Agent是一个JVM进程,它承载着数据从外部源流向下一个目标的3个核心组件:Source、Channel和Sink。结合上图,对这3个重要组件进行说明,具体如下。

●Source(数据采集器):用于源数据的采集(如上图,从一个Web服务器采集源数据),然后将采集到的数据写人到Channel中并流向Sink;

●Channel(缓冲通道): 底层是一个缓冲队列,对Source中的数据进行缓存,将数据高效、准确地写人Sink,待数据全部到达Sink后,Flume就会删除该缓存通道中的数据;

●Sink(接收器):接收并汇集流向Sink的所有数据,根据需求,可以直接进行集中式存储(如上图,采用HDFS进行存储),也可以继续作为数据源传人其他远程服务器或者Source中。

在整个数据传输的过程中,Flume将流动的数据封装到一个event(事件)中,它是Flume内部数据传输的基本单元。一个完整的event包含headers和body,其中headers包含了一些标识信息,而body中就是Flume收集到的数据信息。



猜你喜欢:

数据分析的流程是什么?如何做数据分析?

Scrapy框架的工作原理是什么?

Spark Mllib分层抽样操作步骤

黑马程序员python+大数据开课程

分享到:
在线咨询 我要报名
和我们在线交谈!