天天看點

分布式海量日志采集、聚合和傳輸系統:Cloudera Flume

導讀:本文介紹了分布式海量日志采集、聚合和傳輸系統Cloudera Flume相關内容,Flume是Cloudera提供的日志收集系統,Flume支援在日志系統中定制各類資料發送方。

  Flume是Cloudera提供的日志收集系統,Flume支援在日志系統中定制各類資料發送方,用于收集資料;同時,Flume提供對資料進行簡單處理,并寫到各種資料接受方(可定制)的能力。

  Flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。

  

  上圖的Flume的Architecture,在Flume中,最重要的抽象是data flow(資料流),data flow描述了資料從産生,傳輸、處理并最終寫入目标的一條路徑。在上圖中,實線描述了data flow。

  其中,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。

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

  Flume Master用于管理資料流的配置,如下圖。

  為了保證可擴充性,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,使用者可以對資料進行一定的預處理。