導讀:本文介紹了分布式海量日志采集、聚合和傳輸系統(tǒng)Cloudera Flume相關(guān)內(nèi)容,,F(xiàn)lume是Cloudera提供的日志收集系統(tǒng),,F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方。 關(guān)鍵詞:Flume Cloudera 日志收集 分布式數(shù)據(jù)庫 Flume是Cloudera提供的日志收集系統(tǒng),,F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理,,并寫到各種數(shù)據(jù)接受方(可定制)的能力,。 Flume是一個分布式,、可靠、和高可用的海量日志采集,、聚合和傳輸?shù)南到y(tǒng),。
上圖的Flume的Architecture,在Flume中,,最重要的抽象是data flow(數(shù)據(jù)流),,data flow描述了數(shù)據(jù)從產(chǎn)生,傳輸,、處理并最終寫入目標的一條路徑,。在上圖中,實線描述了data flow,。 其中,,Agent用于采集數(shù)據(jù),agent是flume中產(chǎn)生數(shù)據(jù)流的地方,,同時,,agent會將產(chǎn)生的數(shù)據(jù)流傳輸?shù)絚ollector。對應的,,collector用于對數(shù)據(jù)進行聚合,,往往會產(chǎn)生一個更大的流。 Flume提供了從console(控制臺),、RPC(Thrift-RPC),、text(文件)、tail(UNIX tail),、syslog(syslog日志系統(tǒng),,支持TCP和UDP等2種模式),exec(命令執(zhí)行)等數(shù)據(jù)源上收集數(shù)據(jù)的能力,。同時,,F(xiàn)lume的數(shù)據(jù)接受方,可以是console(控制臺),、text(文件),、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系統(tǒng))等,。 其中,,收集數(shù)據(jù)有2種主要工作模式,如下: Push Sources:外部系統(tǒng)會主動地將數(shù)據(jù)推送到Flume中,,如RPC、syslog,。 Polling Sources:Flume到外部系統(tǒng)中獲取數(shù)據(jù),,一般使用輪詢的方式,,如text和exec。 注意,,在Flume中,,agent和collector對應,而source和sink對應,。Source和sink強調(diào)發(fā)送,、接受方的特性(如數(shù)據(jù)格式、編碼等),,而agent和collector關(guān)注功能,。 Flume Master用于管理數(shù)據(jù)流的配置,如下圖,。
為了保證可擴展性,,F(xiàn)lume采用了多Master的方式。為了保證配置數(shù)據(jù)的一致性,,F(xiàn)lume引入了ZooKeeper,,用于保存配置數(shù)據(jù),ZooKeeper本身可保證配置數(shù)據(jù)的一致性和高可用,,另外,,在配置數(shù)據(jù)發(fā)生變化時,ZooKeeper可以通知Flume Master節(jié)點,。 Flume Master間使用gossip協(xié)議同步數(shù)據(jù),。 下面簡要分析Flume如何支持Reliability、Scalability,、Manageability和Extensibility,。 Reliability:Flume提供3中數(shù)據(jù)可靠性選項,包括End-to-end,、Store on failure和Best effort,。其中End-to-end使用了磁盤日志和接受端Ack的方式,保證Flume接受到的數(shù)據(jù)會最終到達目的,。Store on failure在目的不可用的時候,,數(shù)據(jù)會保持在本地硬盤。和End-to-end不同的是,,如果是進程出現(xiàn)問題,,Store on failure可能會丟失部分數(shù)據(jù)。Best effort不做任何QoS保證,。 Scalability:Flume的3大組件:collector,、master和storage tier都是可伸縮的。需要注意的是,F(xiàn)lume中對事件的處理不需要帶狀態(tài),,它的Scalability可以很容易實現(xiàn),。 Manageability:Flume利用ZooKeeper和gossip,保證配置數(shù)據(jù)的一致性,、高可用,。同時,多Master,,保證Master可以管理大量的節(jié)點,。 Extensibility:基于Java,用戶可以為Flume添加各種新的功能,,如通過繼承Source,,用戶可以實現(xiàn)自己的數(shù)據(jù)接入方式,實現(xiàn)Sink的子類,,用戶可以將數(shù)據(jù)寫往特定目標,,同時,通過SinkDecorator,,用戶可以對數(shù)據(jù)進行一定的預處理,。 |
|