Flume 1.7 源码分析(二)整体架构
生活随笔
收集整理的這篇文章主要介紹了
Flume 1.7 源码分析(二)整体架构
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Flume 1.7 源碼分析(一)源碼編譯
Flume 1.7 源碼分析(二)整體架構(gòu)
Flume 1.7 源碼分析(三)程序入口
Flume 1.7 源碼分析(四)從Source寫數(shù)據(jù)到Channel
3 整體架構(gòu)
Flume有三大組件:Source、Channel、Sink。
- Source就是數(shù)據(jù)來源,例如Web Server產(chǎn)生日志后,可使用ExecSource執(zhí)行tail -F命令后不斷監(jiān)聽日志文件新生成的數(shù)據(jù),然后傳給Channel。
- Channel就是一個(gè)緩存隊(duì)列,由于讀取數(shù)據(jù)和寫入數(shù)據(jù)的速度可能不匹配,假如用同步完成的方式可能效率低下,所以Source把數(shù)據(jù)寫到Channel這個(gè)隊(duì)列里面,Sink再用另外的線程去讀取。
- Sink就是最終的存儲(chǔ),例如可以是HDFS或LOG文件輸出等,Sink負(fù)責(zé)去Channel里面讀取數(shù)據(jù),并存儲(chǔ)。
在程序啟動(dòng)時(shí),會(huì)啟動(dòng)所有的SourceRunner、Channel、SinkRunner。其中Channel的啟動(dòng),沒做什么特別的事情,就是初始化一下狀態(tài)、創(chuàng)建一下計(jì)數(shù)器,算做一個(gè)被動(dòng)的角色。比較重要的是SourceRunner和SinkRunner。
- SourceRunner會(huì)調(diào)用Source的start方法。以ExecSource為例,其start方法就是啟動(dòng)一個(gè)線程,去不斷獲取標(biāo)準(zhǔn)輸出流寫入一個(gè)列表(eventList),同時(shí)再啟動(dòng)一個(gè)線程去定期批量地把列表中的數(shù)據(jù)往Channel發(fā),如下圖所示。
- SinkRunner則是不斷循環(huán)調(diào)用SinkProcess的process的方法,SinkProcess有幾種類型,用于決定選擇哪個(gè)Sink進(jìn)行存儲(chǔ)(Sink可以有多個(gè)),選擇了Sink后,調(diào)用其process方法。Sink的process方法,主要做的就是去Channel中讀取數(shù)據(jù),并寫入對(duì)應(yīng)的存儲(chǔ),如下圖所示。
總結(jié)
以上是生活随笔為你收集整理的Flume 1.7 源码分析(二)整体架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flume 1.7 源码分析(一)源码编
- 下一篇: Flume 1.7 源码分析(三)程序入