Cloudera Flume簡介

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

Flume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。編碼

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

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

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

其中,收集數據有2種主要工做模式,以下:進程

Push Sources:外部系統會主動地將數據推送到Flume中,如RPC、syslog。事件

Polling Sources:Flume到外部系統中獲取數據,通常使用輪詢的方式,如text和exec。ip

注意,在Flume中,agent和collector對應,而source和sink對應。Source和sink強調發送、接受方的特性(如數據格式、編碼等),而agent和collector關注功能。同步

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

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

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

下面簡要分析Flume如何支持Reliability、Scalability、Manageability和Extensibility。

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

Scalability:Flume的3大組件:collector、master和storage tier都是可伸縮的。須要注意的是,Flume中對事件的處理不須要帶狀態,它的Scalability能夠很容易實現。

Manageability:Flume利用ZooKeeper和gossip,保證配置數據的一致性、高可用。同時,多Master,保證Master能夠管理大量的節點。

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

相關文章
相關標籤/搜索