首頁技術文章正文

Flume的運行機制介紹

更新時間:2021-12-01 來源:黑馬程序員 瀏覽量:

Flume原是Cloudera公司提供的一個高可用的、高可靠的、分布式海量日志采集、聚合和傳輸系統(tǒng),而后納人到了Apache旗下,作為一個頂級開源項目。Apache Flume不僅只限于日志數據的采集,由于Flume采集的數據源是可定制的,因此Flume還可用于傳輸大量事件數據,包括但不限于網絡流量數據、社交媒體生成的數據、電子郵件消息以及幾乎任何可能的數據源。

當前Flume分為兩個版本: Flume 0.9x版本,統(tǒng)稱Flume-og(original generation)和Flume 1.x版本,統(tǒng)稱Flume-ng(next generation)。 由于早期的Flume-og存在設計不合理、代碼臃腫、不易擴展等問題,因此在Flume納入到Apache旗下后,開發(fā)人員對Cloudera Flume的代碼進行了重構,同時對Flume功能進行了補充和加強,并重命名為Apache Flume,于是就出現了Flume-ng與Flume-og兩種截然不同的版本。而在實際開發(fā)中,多數使用目前比較流行的Flumeng版本進行Flume開發(fā)。


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進行存儲),也可以繼續(xù)作為數據源傳人其他遠程服務器或者Source中。

在整個數據傳輸的過程中,Flume將流動的數據封裝到一個event(事件)中,它是Flume內部數據傳輸的基本單元。一個完整的event包含headers和body,其中headers包含了一些標識信息,而body中就是Flume收集到的數據信息。



猜你喜歡:

數據分析的流程是什么?如何做數據分析?

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

Spark Mllib分層抽樣操作步驟

黑馬程序員python+大數據開課程

分享到:
在線咨詢 我要報名
和我們在線交談!