Flume 應(yīng)用場景及架構(gòu)原理
flume 是什么?

flume是一個分布式、可靠、和高可用的海量日志聚合的系統(tǒng),支持在系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。
Flume 特點
1、可靠性
當節(jié)點出現(xiàn)故障時,日志能夠被傳送到其他節(jié)點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別為:end-to-end(收到數(shù)據(jù)agent首先將event寫到磁盤上,當數(shù)據(jù)傳送成功后,再刪除;如果數(shù)據(jù)發(fā)送失敗,可以重新發(fā)送。),Store on failure(這也是scribe采用的策略,當數(shù)據(jù)接收方crash時,將數(shù)據(jù)寫到本地,待恢復(fù)后,繼續(xù)發(fā)送),Best effort(數(shù)據(jù)發(fā)送到接收方后,不會進行確認)。
2、可擴展性
Flume采用了三層架構(gòu),分別為agent,collector和storage,每一層均可以水平擴展。其中,所有agent和collector由master統(tǒng)一管理,這使得系統(tǒng)容易監(jiān)控和維護,且master允許有多個(使用ZooKeeper進行管理和負載均衡),這就避免了單點故障問題。
3、可管理性
所有agent和colletor由master統(tǒng)一管理,這使得系統(tǒng)便于維護。多master情況,F(xiàn)lume利用ZooKeeper和gossip,保證動態(tài)配置數(shù)據(jù)的一致性。用戶可以在master上查看各個數(shù)據(jù)源或者數(shù)據(jù)流執(zhí)行情況,且可以對各個數(shù)據(jù)源配置和動態(tài)加載。Flume提供了web 和shell script command兩種形式對數(shù)據(jù)流進行管理。
4、功能可擴展性
用戶可以根據(jù)需要添加自己的agent,collector或者storage。此外,F(xiàn)lume自帶了很多組件,包括各種agent(file, syslog等),collector和storage(file,HDFS等)。
5、文檔豐富,社區(qū)活躍
Flume 已經(jīng)成為 Hadoop 生態(tài)系統(tǒng)的標配,它的文檔比較豐富,社區(qū)比較活躍,方便我們學習。
Flume OG 與 Flume NG 的對比
1、Flume OG
Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent、collector、master等組件構(gòu)成。
2、Flume NG
Flume NG:Flume next generation ,即Flume 1.x版本,它由Agent、Client等組件構(gòu)成。
3、Flume NG版本的優(yōu)點
1)相對于Flume OG版本,F(xiàn)lume NG版本代碼比較簡單。
2)相對于Flume OG版本,F(xiàn)lume NG版本架構(gòu)簡潔。
接下來我們重點講解 Flume NG。
Flume NG基本架構(gòu)
Flume NG是一個分布式、可靠、可用的系統(tǒng),它能夠?qū)⒉煌瑪?shù)據(jù)源的海量日志數(shù)據(jù)進行高效收集、聚合、移動,最后存儲到一個中心化數(shù)據(jù)存儲系統(tǒng)中。由原來的Flume OG到現(xiàn)在的Flume NG,進行了架構(gòu)重構(gòu),并且現(xiàn)在NG版本完全不兼容原來的OG版本。經(jīng)過架構(gòu)重構(gòu)后,F(xiàn)lume NG更像是一個輕量的小工具,非常簡單,容易適應(yīng)各種方式日志收集,并支持failover和負載均衡。
Flume NG 的架構(gòu)圖如下所示:
Flume NG核心概念
Flume的架構(gòu)主要有一下幾個核心概念:
1、Event:一個數(shù)據(jù)單元,帶有一個可選的消息頭。
2、Flow:Event從源點到達目的點的遷移的抽象。
3、Client:操作位于源點處的Event,將其發(fā)送到Flume Agent。
4、Agent:一個獨立的Flume進程,包含組件Source、Channel、Sink。
5、Source:用來消費傳遞到該組件的Event。
6、Channel:中轉(zhuǎn)Event的一個臨時存儲,保存有Source組件傳遞過來的Event。
7、Sink:從Channel中讀取并移除Event,將Event傳遞到Flow Pipeline中的下一個Agent(如果有的話)
下面我們分別介紹以上幾個核心的概念:
Event
1、Event 是Flume數(shù)據(jù)傳輸?shù)幕締卧?/p>
2、Flume 以事件的形式將數(shù)據(jù)從源頭傳輸?shù)阶罱K的目的。
3、Event 由可選的header和載有數(shù)據(jù)的一個byte array構(gòu)成。
1)載有的數(shù)據(jù)對Flume是不透明的。
2)Header 是容納了key-value字符串對的無序集合,key在集合內(nèi)是唯一的。
3)Header 可以在上下文路由中使用擴展。
Client
1、Client 是一個將原始log包裝成events并且發(fā)送它們到一個或者多個agent的實體。
2、Client 在Flume的拓撲結(jié)構(gòu)中不是必須的,它的目的是從數(shù)據(jù)源系統(tǒng)中解耦Flume
Agent
1、一個Agent包含Source、Channel、Sink和其他組件。
2、它利用這些組件將events從一個節(jié)點傳輸?shù)搅硪粋€節(jié)點或最終目的地。
3、agent是Flume流的基礎(chǔ)部分。
4、Flume 為這些組件提供了配置、生命周期管理、監(jiān)控支持。
Agent之Source
1、Source負責接收event或通過特殊機制產(chǎn)生event,并將events批量的放到一個或多個Channel。
2、Source包含event驅(qū)動和輪詢兩種類型。
3、Source 有不同的類型。
1)與系統(tǒng)集成的Source:Syslog,NetCat。
2)自動生成事件的Source:Exec
3)用于Agent和Agent之間的通信的IPC Source:Avro、Thrift。
4、Source必須至少和一個Channel關(guān)聯(lián)。
Agent之Channel與Sink
Agent之Channel
1、Channel位于Source和Sink之間,用于緩存進來的event。
2、當Sink成功的將event發(fā)送到下一跳的Channel或最終目的地,event才Channel中移除。
3、不同的Channel提供的持久化水平也是不一樣的:
1)Memory Channel:volatile。
2)File Channel:基于WAL實現(xiàn)。
3)JDBC Channel:基于嵌入Database實現(xiàn)。
4、Channel支持事物,提供較弱的順序保證。
5、Channel可以和任何數(shù)量的Source和Sink工作。
Agent之Sink
1、Sink負責將event傳輸?shù)较乱惶蜃罱K目的,成功完成后將event從Channel移除。
2、有不同類型的Sink:
1)存儲event到最終目的的終端Sink。比如HDFS,HBase。
2)自動消耗的Sink。比如:Null Sink。
3)用于Agent間通信的IPC sink:Avro。
3、Sink必須作用于一個確切的Channel。
存儲 大數(shù)據(jù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。