那些年踏過的Apache Flume之路

   Flume作爲日誌採集系統,有着獨特的應用和優勢,那麼Flume在實際的應用和實踐中到底是怎樣的呢?讓我們一起踏上Flume之路。

1、  什麼是Apache Flume

(1)Apache Flume簡單來講是高性能、分佈式的日誌採集系統,和sqoop同屬於數據採集系統組件,但是sqoop用來採集關係型數據庫數據,而Flume用來採集流動型數據。

(2)Flume名字來源於原始的近乎實時的日誌數據採集工具,現在被廣泛用於任何流事件數據的採集,它支持從很多數據源聚合數據到HDFS。

(3)Flume最初由Cloudera開發,在2011年貢獻給了Apache基金會,2012年變成了Apache的頂級項目。Flume OG是Flume最初的版本,後升級換代成了Flume NG

(4)Flume的優勢:可橫向擴展、延展性、可靠性

2、  Flume體系結構

(1)核心模塊Agent:一個獨立的Flume進程,包含了source,channel和sink組件:

a)Source是決定數據從哪裏來以及以什麼樣的方式來進行採集的組件,它會把接受數據轉化成event,event就是一個事件,這個事件有它的事件頭,事件體(數據內容)。

b)Sink就是把event發送到指定的目的地,數據是寫到HDFS,Hive還是Hbase,這些參數和類型選擇都要用sink來完成。

c)Channel介於Source和Sink之間,從Source緩存event,直到Sink把event取走

3、  Flume設計目標

(1)可靠性

a)Channels提供了Flume可靠性保障,默認Channels的保障模式爲Memory Channel,MemoryChannel就是內存,將所有的數據存放在裏面,但是它本身存在缺陷,如果斷電數據將會丟失。那怎麼解決這個問題呢? Channels還有另外一種模式,就是基於磁盤的Channels,基於磁盤的隊列確保當出現斷電時數據不丟失,但是在這裏我們必須明確Memory的性能是比磁盤高的。

b)Agent和Channel之間的數據傳輸是事務性的,就是在傳輸數據的過程中如果出現了故障,失敗的數據會回滾和重試,不會丟失。事務就是保證我們的源到目標整體是完整的,要麼一起成功,要麼一起失敗。                           

c)相同的任務可以配置多個Agent。比如,兩個agent完成一個數據採集作業,如果一個agent失敗,則上游的agent會失敗切換到另一個。

(2)擴展性

當採集的數據過多的時候,Flume既可橫向的擴展,也可以縱向擴展更多的agent來線性地提升系統性能。

(3)延展性

延展性就是Flume到底可以採集什麼樣的數據呢?在Flume中源是由Sources決定的,輸出是由Sinks決定的,Sources和Sinks在Flume當中提供了一些非常豐富的實現。

例如:常見的Sources包括files、syslog和任何linux進程的標準輸出的數據;常用Sinks包括本地文件系統或HDFS,也可以與kafka實現兼容、集成;更靈活的在於開發員可以寫自己的Sources或Sinks。所以Flume既提供了內置的豐富的實現,也可以滿足於針對一些特殊的數據源進行定製。

4、常見的Flume數據源:

wKioL1hbbfjRgtw9AAIH08BMFPA977.png-wh_50

5、大規模部署實例:

(1)Flume使用agents收集數據:

a)Agents可以從很多源接收數據,包括其他agents

b)大規模的部署使用多層來實現擴展性和可靠性

c)Flume支持傳輸中數據的檢查和修改

wKiom1hbbhTTBUU2AAHipmRl7HA743.png-wh_50

對於Flume,我們從整體上進行了一個概括和認知解讀,那麼Sources、Sinks、Channels這些具體構件以及Flume的配置會是什麼樣的呢?後續我也會做相應的分享和解答。建議大家在平常多關注和學習大數據的相關資訊和分享知識,多學習別人的經驗,我自己平常喜歡關注微信公衆號“大數據cn”“大數據時代學習中心”,感覺不錯,希望想學大數據的人可以一起進步。

 



 


 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章