Flume原理解析

閱讀目錄(Content)

前言

最近有一點(diǎn)浮躁,遇到了很多不該發(fā)生在我身上的事情宣鄙。沒有袍镀,忘掉這些。好好的學(xué)習(xí)冻晤,才是正道苇羡!

回到頂部(go to top)

一、Flume簡(jiǎn)介

flume 作為 cloudera 開發(fā)的實(shí)時(shí)日志收集系統(tǒng)鼻弧,受到了業(yè)界的認(rèn)可與廣泛應(yīng)用设江。Flume 初始的發(fā)行版本目前被統(tǒng)稱為 Flume OG(original generation),屬于 cloudera温数。

但隨著 FLume 功能的擴(kuò)展绣硝,F(xiàn)lume OG 代碼工程臃腫、核心組件設(shè)計(jì)不合理撑刺、核心配置不標(biāo)準(zhǔn)等缺點(diǎn)暴露出來鹉胖,尤其是在 Flume OG 的最后一個(gè)發(fā)行版本 0.9.4. 中,日

志傳輸不穩(wěn)定的現(xiàn)象尤為嚴(yán)重,為了解決這些問題甫菠,2011 年 10 月 22 號(hào)挠铲,cloudera 完成了 Flume-728,對(duì) Flume 進(jìn)行了里程碑式的改動(dòng):重構(gòu)核心組件寂诱、核心配置以

及代碼架構(gòu)拂苹,重構(gòu)后的版本統(tǒng)稱為 Flume NG(next generation);改動(dòng)的另一原因是將 Flume 納入 apache 旗下痰洒,cloudera Flume 改名為 Apache Flume瓢棒。

備注:Flume參考資料

官方網(wǎng)站: http://flume.apache.org/
    用戶文檔: http://flume.apache.org/FlumeUserGuide.html
    開發(fā)文檔: http://flume.apache.org/FlumeDeveloperGuide.html

回到頂部(go to top)

二、Flume特點(diǎn)

flume是一個(gè)分布式丘喻、可靠脯宿、和高可用的海量日志采集、聚合和傳輸?shù)南到y(tǒng)泉粉。支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方连霉,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理嗡靡,

并寫到各種數(shù)據(jù)接受方(比如文本跺撼、HDFS、Hbase等)的能力 讨彼。
  flume的數(shù)據(jù)流由事件(Event)貫穿始終歉井。事件是Flume的基本數(shù)據(jù)單位,它攜帶日志數(shù)據(jù)(字節(jié)數(shù)組形式)并且攜帶有頭信息点骑,這些Event由Agent外部的Source生成酣难,當(dāng)

Source捕獲事件后會(huì)進(jìn)行特定的格式化,然后Source會(huì)把事件推入(單個(gè)或多個(gè))Channel中黑滴。你可以把Channel看作是一個(gè)緩沖區(qū)憨募,它將保存事件直到Sink處理完該事件。

Sink負(fù)責(zé)持久化日志或者把事件推向另一個(gè)Source袁辈。

1)flume的可靠性
    當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí)菜谣,日志能夠被傳送到其他節(jié)點(diǎn)上而不會(huì)丟失。Flume提供了三種級(jí)別的可靠性保障晚缩,從強(qiáng)到弱依次分別為:end-to-end(收到數(shù)據(jù)agent首先將

event寫到磁盤上尾膊,當(dāng)數(shù)據(jù)傳送成功后,再刪除荞彼;如果數(shù)據(jù)發(fā)送失敗冈敛,可以重新發(fā)送。)鸣皂,Store on failure(這也是scribe采用的策略抓谴,當(dāng)數(shù)據(jù)接收方crash時(shí)暮蹂,將

數(shù)據(jù)寫到本地,待恢復(fù)后癌压,繼續(xù)發(fā)送)仰泻,Besteffort(數(shù)據(jù)發(fā)送到接收方后,不會(huì)進(jìn)行確認(rèn))滩届。

2)flume的可恢復(fù)性
    還是靠Channel集侯。推薦使用FileChannel,事件持久化在本地文件系統(tǒng)里(性能較差)帜消。

回到頂部(go to top)

三棠枉、Flume的一些核心概念

Client:Client生產(chǎn)數(shù)據(jù),運(yùn)行在一個(gè)獨(dú)立的線程泡挺。

Event: 一個(gè)數(shù)據(jù)單元术健,消息頭和消息體組成。(Events可以是日志記錄粘衬、 avro 對(duì)象等。)
  Flow: Event從源點(diǎn)到達(dá)目的點(diǎn)的遷移的抽象咳促。
  Agent: 一個(gè)獨(dú)立的Flume進(jìn)程稚新,包含組件Source、 Channel跪腹、 Sink褂删。(Agent使用JVM 運(yùn)行Flume。每臺(tái)機(jī)器運(yùn)行一個(gè)agent冲茸,但是可以在一個(gè)agent中包含

多個(gè)sources和sinks屯阀。)
  Source: 數(shù)據(jù)收集組件。(source從Client收集數(shù)據(jù)轴术,傳遞給Channel)
  Channel: 中轉(zhuǎn)Event的一個(gè)臨時(shí)存儲(chǔ)难衰,保存由Source組件傳遞過來的Event。(Channel連接 sources 和 sinks 逗栽,這個(gè)有點(diǎn)像一個(gè)隊(duì)列盖袭。)
  Sink: 從Channel中讀取并移除Event, 將Event傳遞到FlowPipeline中的下一個(gè)Agent(如果有的話)(Sink從Channel收集數(shù)據(jù)彼宠,運(yùn)行在一個(gè)獨(dú)立線程鳄虱。)

3.1、Agent結(jié)構(gòu)

Flume 運(yùn)行的核心是 Agent凭峡。Flume以agent為最小的獨(dú)立運(yùn)行單位拙已。一個(gè)agent就是一個(gè)JVM。它是一個(gè)完整的數(shù)據(jù)收集工具摧冀,含有三個(gè)核心組件倍踪,分別是

source系宫、 channel、 sink惭适。通過這些組件笙瑟, Event 可以從一個(gè)地方流向另一個(gè)地方,如下圖所示癞志。

image

3.2往枷、source

Source是數(shù)據(jù)的收集端,負(fù)責(zé)將數(shù)據(jù)捕獲后進(jìn)行特殊的格式化凄杯,將數(shù)據(jù)封裝到事件(event) 里错洁,然后將事件推入Channel中。 Flume提供了很多內(nèi)置的
  Source戒突, 支持 Avro屯碴, log4j, syslog 和 http post(body為json格式)膊存〉级可以讓應(yīng)用程序同已有的Source直接打交道,如AvroSource隔崎,
  SyslogTcpSource今艺。 如果內(nèi)置的Source無法滿足需要, Flume還支持自定義Source爵卒。

  
image

source類型:

image

3.3虚缎、Channel

Channel是連接Source和Sink的組件,大家可以將它看做一個(gè)數(shù)據(jù)的緩沖區(qū)(數(shù)據(jù)隊(duì)列)钓株,它可以將事件暫存到內(nèi)存中也可以持久化到本地磁盤上实牡, 直
  到Sink處理完該事件。介紹兩個(gè)較為常用的Channel轴合, MemoryChannel和FileChannel创坞。

Channel類型:

image

3.4、Sink

Sink從Channel中取出事件受葛,然后將數(shù)據(jù)發(fā)到別處摆霉,可以向文件系統(tǒng)、數(shù)據(jù)庫奔坟、 hadoop存數(shù)據(jù)携栋, 也可以是其他agent的Source。在日志數(shù)據(jù)較少時(shí)咳秉,可
  以將數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中婉支,并且設(shè)定一定的時(shí)間間隔保存數(shù)據(jù)。

image

Sink類型:

image

回到頂部(go to top)

四澜建、Flume攔截器向挖、數(shù)據(jù)流以及可靠性

4.1蝌以、Flume攔截器

當(dāng)我們需要對(duì)數(shù)據(jù)進(jìn)行過濾時(shí),除了我們?cè)赟ource何之、 Channel和Sink進(jìn)行代碼修改之外跟畅, Flume為我們提供了攔截器,攔截器也是chain形式的溶推。

攔截器的位置在Source和Channel之間徊件,當(dāng)我們?yōu)镾ource指定攔截器后,我們?cè)跀r截器中會(huì)得到event蒜危,根據(jù)需求我們可以對(duì)event進(jìn)行保留還是

拋棄虱痕,拋棄的數(shù)據(jù)不會(huì)進(jìn)入Channel中纲熏。

image

4.2匈辱、Flume數(shù)據(jù)流

1)Flume 的核心是把數(shù)據(jù)從數(shù)據(jù)源收集過來,再送到目的地珍促。為了保證輸送一定成功响委,在送到目的地之前新思,會(huì)先緩存數(shù)據(jù),待數(shù)據(jù)真正到達(dá)目的地后赘风,

刪除自己緩存的數(shù)據(jù)表牢。
  2) Flume 傳輸?shù)臄?shù)據(jù)的基本單位是 Event,如果是文本文件贝次,通常是一行記錄,這也是事務(wù)的基本單位彰导。 Event 從 Source蛔翅,流向 Channel,再到 Sink位谋,

本身為一個(gè) byte 數(shù)組山析,并可攜帶 headers 信息。 Event 代表著一個(gè)數(shù)據(jù)流的最小完整單元掏父,從外部數(shù)據(jù)源來笋轨,向外部的目的地去。

image

值得注意的是赊淑,F(xiàn)lume提供了大量?jī)?nèi)置的Source爵政、Channel和Sink類型。不同類型的Source,Channel和Sink可以自由組合陶缺。組合方式基于用戶設(shè)置的配置文件钾挟,非常靈活。

比如:Channel可以把事件暫存在內(nèi)存里饱岸,也可以持久化到本地硬盤上掺出。Sink可以把日志寫入HDFS, HBase徽千,甚至是另外一個(gè)Source等等。Flume支持用戶建立多級(jí)流汤锨,

也就是說双抽,多個(gè)agent可以協(xié)同工作,并且支持Fan-in闲礼、Fan-out牍汹、Contextual Routing、Backup Routes位仁,這也正是Flume強(qiáng)大之處柑贞。如下圖所示:

image

4.3聂抢、Flume可靠性

Flume 使用事務(wù)性的方式保證傳送Event整個(gè)過程的可靠性钧嘶。 Sink 必須在Event 被存入 Channel 后,或者琳疏,已經(jīng)被傳達(dá)到下一站agent里有决,又或者,

已經(jīng)被存入外部數(shù)據(jù)目的地之后空盼,才能把 Event 從 Channel 中 remove 掉书幕。這樣數(shù)據(jù)流里的 event 無論是在一個(gè) agent 里還是多個(gè) agent 之間流轉(zhuǎn),

都能保證可靠揽趾,因?yàn)橐陨系氖聞?wù)保證了 event 會(huì)被成功存儲(chǔ)起來台汇。比如 Flume支持在本地保存一份文件 channel 作為備份,而memory channel 將

event存在內(nèi)存 queue 里篱瞎,速度快苟呐,但丟失的話無法恢復(fù)。

回到頂部(go to top)

五俐筋、Flume使用場(chǎng)景

Flume在英文中的意思是水道牵素, 但Flume更像可以隨意組裝的消防水管,下面根據(jù)官方文檔澄者,展示幾種Flow笆呆。

5.1、多個(gè)agent順序連接

image

可以將多個(gè)Agent順序連接起來粱挡,將最初的數(shù)據(jù)源經(jīng)過收集赠幕,存儲(chǔ)到最終的存儲(chǔ)系統(tǒng)中。這是最簡(jiǎn)單的情況询筏,一般情況下劣坊,應(yīng)該控制這種順序連接的
Agent 的數(shù)量,因?yàn)閿?shù)據(jù)流經(jīng)的路徑變長(zhǎng)了屈留,如果不考慮failover的話局冰,出現(xiàn)故障將影響整個(gè)Flow上的Agent收集服務(wù)测蘑。

5.2、多個(gè)Agent的數(shù)據(jù)匯聚到同一個(gè)Agent

image

這種情況應(yīng)用的場(chǎng)景比較多康二,比如要收集Web網(wǎng)站的用戶行為日志碳胳, Web網(wǎng)站為了可用性使用的負(fù)載集群模式,每個(gè)節(jié)點(diǎn)都產(chǎn)生用戶行為日志沫勿,可以為
  每 個(gè)節(jié)點(diǎn)都配置一個(gè)Agent來單獨(dú)收集日志數(shù)據(jù)挨约,然后多個(gè)Agent將數(shù)據(jù)最終匯聚到一個(gè)用來存儲(chǔ)數(shù)據(jù)存儲(chǔ)系統(tǒng),如HDFS上产雹。

5.3诫惭、多級(jí)流

Flume還支持多級(jí)流,什么多級(jí)流蔓挖?結(jié)合在云開發(fā)中的應(yīng)用來舉個(gè)例子夕土,當(dāng)syslog, java瘟判, nginx怨绣、 tomcat等混合在一起的日志流開始流入一個(gè)agent 后,可以agent中將混雜的日志流分開拷获,然后給每種日志建立一個(gè)自己的傳輸通道篮撑。

image

5.4、load balance功能

image

上圖Agent1是一個(gè)路由節(jié)點(diǎn)匆瓜,負(fù)責(zé)將Channel暫存的Event均衡到對(duì)應(yīng)的多個(gè)Sink組件上赢笨,而每個(gè)Sink組件分別連接到一個(gè)獨(dú)立的Agent上 。

回到頂部(go to top)

六驮吱、Flume核心組件

Flume主要由3個(gè)重要的組件構(gòu)成:
  1)Source: 完成對(duì)日志數(shù)據(jù)的收集茧妒,分成transtion 和 event 打入到channel之中
     Flume提供了各種source的實(shí)現(xiàn),包括Avro Source糠馆、 Exce Source、 Spooling
    Directory Source怎憋、 NetCat Source又碌、 Syslog Source、 Syslog TCP Source绊袋、
    Syslog UDP Source毕匀、 HTTP Source、 HDFS Source癌别, etc皂岔。
  2)Channel: Flume Channel主要提供一個(gè)隊(duì)列的功能,對(duì)source提供中的數(shù)據(jù)進(jìn)行簡(jiǎn)單的緩存展姐。
     Flume對(duì)于Channel躁垛, 則提供了Memory Channel剖毯、 JDBC Chanel、 File Channel教馆,etc

3)Sink: Flume Sink取出Channel中的數(shù)據(jù)逊谋,進(jìn)行相應(yīng)的存儲(chǔ)文件系統(tǒng),數(shù)據(jù)庫土铺,或者提交到遠(yuǎn)程服務(wù)器胶滋。
    包括HDFS sink、 Logger sink悲敷、 Avro sink究恤、 File Roll sink、 Null sink后德、 HBasesink部宿, etc。

6.1探遵、Source

Spool Source 如何使用窟赏?
  在實(shí)際使用的過程中,可以結(jié)合log4j使用箱季,使用log4j的時(shí)候涯穷,將log4j的文件分割機(jī)制設(shè)為1分鐘一次,將文件拷貝到spool的監(jiān)控目錄藏雏。

log4j有一個(gè)TimeRolling的插件拷况,可以把log4j分割的文件到spool目錄【蚺梗基本實(shí)現(xiàn)了實(shí)時(shí)的監(jiān)控赚瘦。 Flume在傳完文件之后,將會(huì)修 改文

件的后綴奏寨,變?yōu)?COMPLETED(后綴也可以在配置文件中靈活指定)

Exec Source 和Spool Source 比較
  1) ExecSource可以實(shí)現(xiàn)對(duì)日志的實(shí)時(shí)收集起意,但是存在Flume不運(yùn)行或者指令執(zhí)行出錯(cuò)時(shí),將無法收集到日志數(shù)據(jù)病瞳,無法何證日志數(shù)據(jù)

的完整性揽咕。
  2) SpoolSource雖然無法實(shí)現(xiàn)實(shí)時(shí)的收集數(shù)據(jù),但是可以使用以分鐘的方式分割文件套菜,趨近于實(shí)時(shí)亲善。
  3)總結(jié):如果應(yīng)用無法實(shí)現(xiàn)以分鐘切割日志文件的話,可以兩種 收集方式結(jié)合使用逗柴。

6.2蛹头、Channel

1)MemoryChannel可以實(shí)現(xiàn)高速的吞吐, 但是無法保證數(shù)據(jù)完整性
  2)MemoryRecoverChannel在官方文檔的建議上已經(jīng)建義使用FileChannel來替換。
    FileChannel保證數(shù)據(jù)的完整性與一致性渣蜗。在具體配置不現(xiàn)的FileChannel時(shí)屠尊,建議FileChannel設(shè)置的目錄和程序日志文件保存的目錄

設(shè)成不同的磁盤,以便提高效率袍睡。

6.3知染、Sink

Flume Sink在設(shè)置存儲(chǔ)數(shù)據(jù)時(shí),可以向文件系統(tǒng)中斑胜,數(shù)據(jù)庫中控淡, hadoop中儲(chǔ)數(shù)據(jù),在日志數(shù)據(jù)較少時(shí)止潘,可以將數(shù)據(jù)存儲(chǔ)在文件系中掺炭,并

且設(shè)定一定的時(shí)間間隔保存數(shù)據(jù)。在日志數(shù)據(jù)較多時(shí)凭戴,可以將相應(yīng)的日志數(shù)據(jù)存儲(chǔ)到Hadoop中涧狮,便于日后進(jìn)行相應(yīng)的數(shù)據(jù)分析。

轉(zhuǎn)自:https://www.cnblogs.com/zhangyinhua/p/7803486.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末么夫,一起剝皮案震驚了整個(gè)濱河市者冤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌档痪,老刑警劉巖涉枫,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腐螟,居然都是意外死亡愿汰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門乐纸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衬廷,“玉大人,你說我怎么就攤上這事汽绢÷鸢希” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵宁昭,是天一觀的道長(zhǎng)跌宛。 經(jīng)常有香客問我,道長(zhǎng)久窟,這世上最難降的妖魔是什么秩冈? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任本缠,我火速辦了婚禮斥扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己稀颁,他們只是感情好芬失,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匾灶,像睡著了一般棱烂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阶女,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天颊糜,我揣著相機(jī)與錄音,去河邊找鬼秃踩。 笑死衬鱼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憔杨。 我是一名探鬼主播鸟赫,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼消别!你這毒婦竟也來了抛蚤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤寻狂,失蹤者是張志新(化名)和其女友劉穎岁经,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荆虱,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒿偎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怀读。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诉位。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖菜枷,靈堂內(nèi)的尸體忽然破棺而出苍糠,到底是詐尸還是另有隱情,我是刑警寧澤啤誊,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布岳瞭,位于F島的核電站,受9級(jí)特大地震影響蚊锹,放射性物質(zhì)發(fā)生泄漏瞳筏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一牡昆、第九天 我趴在偏房一處隱蔽的房頂上張望姚炕。 院中可真熱鬧,春花似錦、人聲如沸柱宦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掸刊。三九已至免糕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忧侧,已是汗流浹背石窑。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚓炬,地道東北人尼斧。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像试吁,于是被迫代替她去往敵國(guó)和親棺棵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 博客原文 翻譯作品熄捍,水平有限烛恤,如有錯(cuò)誤,煩請(qǐng)留言指正余耽。原文請(qǐng)見 官網(wǎng)英文文檔 引言 概述 Apache Flume...
    rabbitGYK閱讀 11,455評(píng)論 13 34
  • 介紹 概述 Apache Flume是為有效收集聚合和移動(dòng)大量來自不同源到中心數(shù)據(jù)存儲(chǔ)而設(shè)計(jì)的可分布缚柏,可靠的,可用...
    ximengchj閱讀 3,516評(píng)論 0 13
  • title: Flume構(gòu)建日志采集系統(tǒng)date: 2018-02-03 19:45tags: [flume,k...
    溯水心生閱讀 16,126評(píng)論 3 25
  • 1 介紹 Flume NG是Cloudera提供的一個(gè)分布式碟贾、可靠币喧、可用的系統(tǒng),它能夠?qū)⒉煌瑪?shù)據(jù)源的海量日志數(shù)據(jù)進(jìn)...
    達(dá)微閱讀 1,476評(píng)論 0 0
  • 隨著飛機(jī)落在西班牙機(jī)場(chǎng)的停機(jī)坪上袱耽,不久后杀餐,簡(jiǎn),拖著行李箱朱巨,走出了機(jī)場(chǎng)大廳史翘。她一身夏天的清涼裝扮,酒紅色半袖冀续,白色短...
    奶沫兒閱讀 399評(píng)論 0 0