Flume(1)-概述與組成架構

一. 定義

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統。Flume基於流式架構,靈活簡單。安全

二. 優勢

1. 能夠和任意集中式存儲進程集成。架構

2. 輸入的的數據速率大於寫入目的存儲的速率,flume會進行緩衝,減少hdfs的壓力。分佈式

3. flume中的事務基於channel,使用了兩個事務模型(sender + receiver),確保消息被可靠發送。spa

Flume使用兩個獨立的事務分別負責從soucrce到channel,以及從channel到sink的事件傳遞。一旦事務中全部的數據所有成功提交到channel,那麼source才認爲該數據讀取完成。同理,只有成功被sink寫出去的數據,纔會從channel中移除。線程

三. 組成架構

1. Agent

Agent是一個JVM進程,它以事件的形式將數據從源頭送至目的,是Flume數據傳輸的基本單元。3d

Agent主要有3個部分組成,Source、Channel、Sink。日誌

2. Source

Source是負責接收數據到Flume Agent的組件。Source組件能夠處理各類類型、各類格式的日誌數據,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。blog

3. Channel

Channel是位於Source和Sink之間的緩衝區。所以,Channel容許Source和Sink運做在不一樣的速率上。Channel是線程安全的,能夠同時處理幾個Source的寫入操做和幾個Sink的讀取操做。索引

Flume自帶兩種Channel:Memory Channel和File Channel。隊列

Memory Channel是內存中的隊列。Memory Channel在不須要關心數據丟失的情景下適用。若是須要關心數據丟失,那麼Memory Channel就不該該使用,由於程序死亡、機器宕機或者重啓都會致使數據丟失。

File Channel將全部事件寫到磁盤。所以在程序關閉或機器宕機的狀況下不會丟失數據。

4. Sink

Sink不斷地輪詢Channel中的事件且批量地移除它們,並將這些事件批量寫入到存儲或索引系統、或者被髮送到另外一個Flume Agent。

Sink是徹底事務性的。在從Channel批量刪除數據以前,每一個Sink用Channel啓動一個事務。批量事件一旦成功寫出到存儲系統或下一個Flume Agent,Sink就利用Channel提交事務。事務一旦被提交,該Channel從本身的內部緩衝區刪除事件。

Sink組件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定義。

5. Event

傳輸單元,Flume數據傳輸的基本單元,以事件的形式將數據從源頭送至目的地。  Event由可選的header和載有數據的一個byte array 構成。Header是容納了key-value字符串對的HashMap。

 

相關文章
相關標籤/搜索