初識Flume

一、flume簡介

FlumeCloudera提供的日誌收集系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種storageFlume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。


上圖的FlumeArchitecture,在Flume中,最重要的抽象是data flow(數據流)data flow描述了數據從產生,傳輸、處理並最終寫入目標的一條路徑。在上圖中,實線描述了data flow

其中,Agent用於採集數據,agentflume中產生數據流的地方,同時,agent會將產生的數據流傳輸到collector。對應的,collector用於對數據進行聚合,往往會產生一個更大的流。

Flume提供了從console(控制檯)RPC(Thrift-RPC)text(文件)tail(UNIX tail)syslog(syslog日誌系統,支持TCPUDP2種模式)exec(命令執行)等數據源上收集數據的能力。同時,Flume的數據接受方,可以是console(控制檯)text(文件)dfs(HDFS文件)RPC(Thrift-RPC)syslogTCP(TCPsyslog日誌系統)等。

  其中,收集數據有2種主要工作模式,如下:

Push Sources:外部系統會主動地將數據推送到Flume中,如RPCsyslog

Polling SourcesFlume到外部系統中獲取數據,一般使用輪詢的方式,如textexec

  注意,在Flume中,agentcollector對應,而sourcesink對應。Sourcesink強調發送、接受方的特性(如數據格式、編碼等),而agentcollector關注功能。

Flume Master用於管理數據流的配置,如下圖。


爲了保證可擴展性,Flume採用了多Master的方式。爲了保證配置數據的一致性,Flume引入了ZooKeeper,用於保存配置數據,ZooKeeper本身可保證配置數據的一致性和高可用,另外,在配置數據發生變化時,ZooKeeper可以通知Flume Master節點。

Flume Master間使用gossip協議同步數據。

  下面簡要分析Flume如何支持ReliabilityScalabilityManageabilityExtensibility

ReliabilityFlume提供3中數據可靠性選項,包括End-to-endStore on failureBest effort。其中End-to-end使用了磁盤日誌和接受端Ack的方式,保證Flume接受到的數據會最終到達目的。Store on failure在目的不可用的時候,數據會保持在本地硬盤。和End-to-end不同的是,如果是進程出現問題,Store on failure可能會丟失部分數據。Best effort不做任何QoS保證。

ScalabilityFlume3大組件:collectormasterstorage tier都是可伸縮的。需要注意的是,Flume中對事件的處理不需要帶狀態,它的Scalability可以很容易實現。

ManageabilityFlume利用ZooKeepergossip,保證配置數據的一致性、高可用。同時,多Master,保證Master可以管理大量的節點。

Extensibility:基於Java,用戶可以爲Flume添加各種新的功能,如通過繼承Source,用戶可以實現自己的數據接入方式,實現Sink的子類,用戶可以將數據寫往特定目標,同時,通過SinkDecorator,用戶可以對數據進行一定的預處理。

 注:以上介紹來自:http://caibinbupt.iteye.com/blog/765960,更多瞭解請參考Flume主頁:https://github.com/cloudera/flume/

二、爲什麼選擇flume

目前可選的開源日誌收集項目有如下這些:facebookscribeapachechukwalinkedinkafkaclouderaflume,注:flume正逐步遷移到apache下。其他項目的介紹課參考各項目主頁:

scribe主頁:https://github.com/facebook/scribe

chukwa主頁:http://incubator.apache.org/chukwa/

kafka主頁:http://sna-projects.com/kafka/

在此參考網友繪製的對比圖表:


(圖表來自:http://dongxicheng.org/search-engine/log-systems/

從上圖中可以看出flume作爲開源的日誌收集項目比較優秀,使用廣泛,參考資料比較多。整體設計架構提供了強大的可擴展性和豐富的自帶插件。

 

FLUME日誌收集

 

一、FLUME介紹

Flume是一個分佈式、可靠、和高可用的海量日誌聚合的系統,支持在系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。

設計目標:

(1) 可靠性

當節點出現故障時,日誌能夠被傳送到其他節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別爲:end-to-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功後,再刪除;如果數據發送失敗,可以重新發送。),Storeon failure(這也是scribe採用的策略,當數據接收方crash時,將數據寫到本地,待恢復後,繼續發送),Besteffort(數據發送到接收方後,不會進行確認)。

(2) 可擴展性

Flume採用了三層架構,分別爲agentcollectorstorage,每一層均可以水平擴展。其中,所有agentcollectormaster統一管理,這使得系統容易監控和維護,且master允許有多個(使用ZooKeeper進行管理和負載均衡),這就避免了單點故障問題。

(3) 可管理性

所有agentcolletormaster統一管理,這使得系統便於維護。多master情況,Flume利用ZooKeepergossip,保證動態配置數據的一致性。用戶可以在master上查看各個數據源或者數據流執行情況,且可以對各個數據源配置和動態加載。Flume提供了web shellscript command兩種形式對數據流進行管理。

(4) 功能可擴展性

用戶可以根據需要添加自己的agentcollector或者storage。此外,Flume自帶了很多組件,包括各種agentfile syslog等),collectorstoragefileHDFS等)。

 

二、FLUME架構

flume的邏輯架構:、


正如前面提到的,Flume採用了分層架構:分別爲agentcollectorstorage。其中,agentcollector均由兩部分組成:sourcesinksource是數據來源,sink是數據去向

Flume使用兩個組件:MasterNodeNode根據在Mastershellweb中動態配置,決定其是作爲Agent還是Collector

(1)agent

agent的作用是將數據源的數據發送給collector

Flume自帶了很多直接可用的數據源(source),如:

·        text(“filename”):將文件filename作爲數據源,按行發送

·        tail(“filename”):探測filename新產生的數據,按行發送出去

·        fsyslogTcp(5140):監聽TCP5140端口,並且接收到的數據發送出去

·        tailDir("dirname"[,fileregex=".*"[, startFromEnd=false[, recurseDepth=0]]]):監聽目錄中的文件末尾,使用正則去選定需要監聽的文件(不包含目錄),recurseDepth爲遞歸監聽其下子目錄的深度

更多可參見這位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050465.html

同時提供了很多sink,如:

·        console[("format")] :直接將將數據顯示在consolr

·        text(“txtfile”):將數據寫到文件txtfile

·        dfs(“dfsfile”):將數據寫到HDFS上的dfsfile文件中

·        syslogTcp(“host”,port):將數據通過TCP傳遞給host節點

·        agentSink[("machine"[,port])]:等價於agentE2ESink,如果省略,machine參數,默認使用flume.collector.event.hostflume.collector.event.port作爲默認collecotr

·        agentDFOSink[("machine"[,port])]:本地熱備agentagent發現collector節點故障後,不斷檢查collector的存活狀態以便重新發送event,在此間產生的數據將緩存到本地磁盤中

·        agentBESink[("machine"[,port])]:不負責的agent,如果collector故障,將不做任何處理,它發送的數據也將被直接丟棄

·        agentE2EChain:指定多個collector提高可用性。當向主collector發送event失效後,轉向第二個collector發送,當所有的collector失敗後,它會非常執着的再來一遍

更多可參見這位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050472.html

(2)collector

collector的作用是將多個agent的數據彙總後,加載到storage中。

它的sourcesinkagent類似。

數據源(source),如:

·        collectorSource[(port)]Collector source,監聽端口匯聚數據

·        autoCollectorSource:通過master協調物理節點自動匯聚數據

·        logicalSource:邏輯source,由master分配端口並監聽rpcSink

sink,如:

·        collectorSink("fsdir","fsfileprefix",rollmillis)collectorSink,數據通過collector匯聚之後發送到hdfs, fsdir hdfs目錄,fsfileprefix爲文件前綴碼

·        customdfs("hdfspath"[,"format"]):自定義格式dfs

(3) storage

storage是存儲系統,可以是一個普通file,也可以是HDFSHIVEHBase,分佈式存儲等。

(4) Master

Master是管理協調agentcollector的配置等信息,是flume集羣的控制器。

 

Flume中,最重要的抽象是data flow(數據流),dataflow描述了數據從產生,傳輸、處理並最終寫入目標的一條路徑。


1.  對於agent數據流配置就是從哪得到數據,把數據發送到哪個collector

2.  對於collector是接收agent發過來的數據,把數據發送到指定的目標機器上。

注:Flume框架對hadoopzookeeper的依賴只是在jar包上,並不要求flume啓動時必須將hadoopzookeeper服務也啓動。

 

其他配置以及相關資料,可參見博客:

http://blog.csdn.net/wulantian/article/details/46341135


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