Flume作爲日誌採集系統,有着獨特的應用和優勢,那麼Flume在實際的應用和實踐中到底是怎樣的呢?讓我們一起踏上Flume之路。
(1)Apache Flume簡單來講是高性能、分佈式的日誌採集系統,和sqoop同屬於數據採集系統組件,但是sqoop用來採集關係型數據庫數據,而Flume用來採集流動型數據。
(2)Flume名字來源於原始的近乎實時的日誌數據採集工具,現在被廣泛用於任何流事件數據的採集,它支持從很多數據源聚合數據到HDFS。
(3)Flume最初由Cloudera開發,在2011年貢獻給了Apache基金會,2012年變成了Apache的頂級項目。Flume OG是Flume最初的版本,後升級換代成了Flume NG
(4)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取走
a)Channels提供了Flume可靠性保障,默認Channels的保障模式爲Memory Channel,MemoryChannel就是內存,將所有的數據存放在裏面,但是它本身存在缺陷,如果斷電數據將會丟失。那怎麼解決這個問題呢? Channels還有另外一種模式,就是基於磁盤的Channels,基於磁盤的隊列確保當出現斷電時數據不丟失,但是在這裏我們必須明確Memory的性能是比磁盤高的。
b)Agent和Channel之間的數據傳輸是事務性的,就是在傳輸數據的過程中如果出現了故障,失敗的數據會回滾和重試,不會丟失。事務就是保證我們的源到目標整體是完整的,要麼一起成功,要麼一起失敗。
c)相同的任務可以配置多個Agent。比如,兩個agent完成一個數據採集作業,如果一個agent失敗,則上游的agent會失敗切換到另一個。
當採集的數據過多的時候,Flume既可橫向的擴展,也可以縱向擴展更多的agent來線性地提升系統性能。
延展性就是Flume到底可以採集什麼樣的數據呢?在Flume中源是由Sources決定的,輸出是由Sinks決定的,Sources和Sinks在Flume當中提供了一些非常豐富的實現。
例如:常見的Sources包括files、syslog和任何linux進程的標準輸出的數據;常用Sinks包括本地文件系統或HDFS,也可以與kafka實現兼容、集成;更靈活的在於開發員可以寫自己的Sources或Sinks。所以Flume既提供了內置的豐富的實現,也可以滿足於針對一些特殊的數據源進行定製。
(1)Flume使用agents收集數據:
a)Agents可以從很多源接收數據,包括其他agents
b)大規模的部署使用多層來實現擴展性和可靠性
c)Flume支持傳輸中數據的檢查和修改
對於Flume,我們從整體上進行了一個概括和認知解讀,那麼Sources、Sinks、Channels這些具體構件以及Flume的配置會是什麼樣的呢?後續我也會做相應的分享和解答。建議大家在平常多關注和學習大數據的相關資訊和分享知識,多學習別人的經驗,我自己平常喜歡關注微信公衆號“大數據cn”“大數據時代學習中心”,感覺不錯,希望想學大數據的人可以一起進步。