題記
本文內(nèi)容來(lái)源于拉鉤教育大數(shù)據(jù)高薪訓(xùn)練營(yíng)
Flume的定義
- Flume由Cloudera公司開(kāi)發(fā),是一個(gè)分布式、高可靠、高可用的海量日志采集、聚合、傳輸?shù)南到y(tǒng)。
- Flume支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于采集數(shù)據(jù);
- Flume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接收方的能力。簡(jiǎn)單的說(shuō),F(xiàn)lume是實(shí)時(shí)采集日志的數(shù)據(jù)采集引擎。

Flume基本數(shù)據(jù)流程.png
Flume的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 分布式:flume分布式集群部署,擴(kuò)展性好
- 可靠性好: 當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí),日志能夠被傳送到其他節(jié)點(diǎn)上而不會(huì)丟失
- 易用性:flume配置使用較繁瑣,對(duì)使用人員專(zhuān)業(yè)技術(shù)要求高
- 實(shí)時(shí)采集:flume采集流模式進(jìn)行數(shù)據(jù)實(shí)時(shí)采集
適用場(chǎng)景:適用于日志文件實(shí)時(shí)采集。
缺點(diǎn)
- 無(wú)法監(jiān)控文件內(nèi)容的變化,只能監(jiān)控文件的增加,如果修改了文件名,flume會(huì)報(bào)錯(cuò)。
Flume的體系架構(gòu)

flume體系結(jié)構(gòu).png
Flume架構(gòu)中的組件
- Agent本質(zhì)上是一個(gè) JVM 進(jìn)程,該JVM進(jìn)程控制Event數(shù)據(jù)流從外部日志生產(chǎn)者那里傳輸?shù)侥康牡兀ɑ蛘呤窍乱粋€(gè)Agent)。一個(gè)完整的Agent中包含了三個(gè)組件Source、Channel和Sink,Source是指數(shù)據(jù)的來(lái)源和方式,Channel是一個(gè)數(shù)據(jù)的緩沖池,Sink定義了數(shù)據(jù)輸出的方式和目的地。
-
Source是負(fù)責(zé)接收數(shù)據(jù)到Flume Agent的組件。Source組件可以處理各種類(lèi)
型、各種格式的日志數(shù)據(jù),包括avro、exec、spooldir、netcat等。 -
Channel是位于Source和Sink之間的緩沖區(qū)。Channel允許Source和Sink運(yùn)作在不同的速率上。Channel是線程安全的,可以同時(shí)處理多個(gè)Source的寫(xiě)入操作及多個(gè)Sink的讀取操作。常用的Channel包括:
- Memory Channel是內(nèi)存中的隊(duì)列。Memory Channel在允許數(shù)據(jù)丟失的情景下適用。如果不允許數(shù)據(jù)丟失,應(yīng)該避免使用Memory Channel,因?yàn)槌绦蛩劳?、機(jī)器宕機(jī)或者重啟都可能會(huì)導(dǎo)致數(shù)據(jù)丟失;
- File Channel將所有事件寫(xiě)到磁盤(pán)。因此在程序關(guān)閉或機(jī)器宕機(jī)的情況下不會(huì)丟失數(shù)據(jù);
-
Sink不斷地輪詢Channel中的事件且批量地移除它們,并將這些事件批量寫(xiě)入到存儲(chǔ)或索引系統(tǒng)、或者被發(fā)送到另一個(gè)Flume Agent。
- Sink是完全事務(wù)性的。在從Channel批量刪除數(shù)據(jù)之前,每個(gè)Sink用Channel啟動(dòng)一個(gè)事務(wù)。批量事件一旦成功寫(xiě)出到存儲(chǔ)系統(tǒng)或下一個(gè)Flume Agent,Sink就利用Channel提交事務(wù)。事務(wù)一旦被提交,該Channel從自己的內(nèi)部緩沖區(qū)刪除事件。
- Sink組件包括hdfs、logger、avro、file、null、HBase、消息隊(duì)列等。
- Event是Flume定義的一個(gè)數(shù)據(jù)流傳輸?shù)?strong>最小單位。
Flume四種模式&拓?fù)浣Y(jié)構(gòu)
-
串行模式
將多個(gè)flume給順序連接起來(lái),從最初的source開(kāi)始到最終sink傳送的目的存儲(chǔ)系統(tǒng)。
此模式不建議橋接過(guò)多的flume數(shù)量, flume數(shù)量過(guò)多不僅會(huì)影響傳輸速率,而且一旦傳輸過(guò)程中某個(gè)節(jié)點(diǎn)flume宕機(jī),會(huì)影響整個(gè)傳輸系統(tǒng)。
串行模式.png -
復(fù)制模式(單Souce多Channel、Sink模式)
將事件流向一個(gè)或者多個(gè)目的地。這種模式將數(shù)據(jù)源復(fù)制到多個(gè)channel中,每個(gè)channel都有相同的數(shù)據(jù),sink可以選擇傳送的不同的目的地。
復(fù)制模式.png -
負(fù)載均衡模式(單Source、Channel多Sink)
將多個(gè)sink邏輯上分到一個(gè)sink組,flume將數(shù)據(jù)發(fā)送到不同的sink,主要解決負(fù)載均衡和故障轉(zhuǎn)移問(wèn)題。
負(fù)載均衡模式.png -
聚合模式
這種模式最常見(jiàn)的,也非常實(shí)用,日常web應(yīng)用通常分布在上百個(gè)服務(wù)器,大者甚至上千個(gè)、上萬(wàn)個(gè)服務(wù)器。產(chǎn)生的日志,處理起來(lái)也非常麻煩。用這種組合方式能很好的解決這一問(wèn)題,每臺(tái)服務(wù)器部署一個(gè)flume采集日志,傳送到一個(gè)集中收集日志的flume,再由此flume上傳hdfs、hive、hbase、消息隊(duì)列中。
聚合模式.png



