Flume是一個高可用、高可靠,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。其中Flume-NG是Flume的一個分支,其目的是要明顯簡單,體積更小,更容易部署,其最基本的架構(gòu)如下圖所示:
圖1 Flume-NG架構(gòu)

Flume-NG由一個個Agent來組成,而每個Agent由Source、Channel、Sink三個模塊組成,其中Source負責接收數(shù)據(jù),Channel負責數(shù)據(jù)的傳輸,Sink則負責數(shù)據(jù)向下一端的發(fā)送。
Flume也可以配置成多個Source、Channel、Sink,如圖2所示:
圖2 Flume結(jié)構(gòu)圖

Flume的可靠性基于Agent間事務(wù)的交換,下一個Agent down掉,Channel可以持久化數(shù)據(jù),Agent恢復(fù)后再傳輸。Flume的可用性則基于內(nèi)建的Load Balancing和Failover機制。Channel及Agent都可以配多個實體,實體之間可以使用負載分擔等策略。每個Agent為一個JVM進程,同一臺服務(wù)器可以有多個Agent。收集節(jié)點(Agent1,2,3)負責處理日志,匯聚節(jié)點(Agent4)負責寫入HDFS,每個收集節(jié)點的Agent可以選擇多個匯聚節(jié)點,這樣可以實現(xiàn) 負載均衡 。
圖3 Flume級聯(lián)結(jié)構(gòu)圖