Flume概念
Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。Flume基于流式架構,靈活簡單
下圖展示了為什么要使用Flume

Flume最主要的作用就是,實時讀取服務器本地磁盤的數(shù)據,將數(shù)據寫入到HDFS
Flume組成架構
借用Flume官網的圖,如下圖

組成架構詳解如下圖所示

下面詳細介紹下Flume架構中的組件
Agent
Agent是一個JVM進程,它以事件的形式將數(shù)據從源頭送至目的,是Flume數(shù)據傳輸?shù)幕締卧?br> Agent主要有3個部分組成,Source、Channel、Sink
Source
Source是負責接收數(shù)據到Flume Agent的組件。Source組件可以處理各種類型、各種格式的日志數(shù)據,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy
Channel
Channel是位于Source和Sink之間的緩沖區(qū)。因此,Channel允許Source和Sink運作在不同的速率上。Channel是線程安全的,可以同時處理幾個Source的寫入操作和幾個Sink的讀取操作。
Flume自帶兩種Channel:Memory Channel和File Channel。
Memory Channel是內存中的隊列。Memory Channel在不需要關心數(shù)據丟失的情景下適用。如果需要關心數(shù)據丟失,那么Memory Channel就不應該使用,因為程序死亡、機器宕機或者重啟都會導致數(shù)據丟失。
File Channel將所有事件寫到磁盤。因此在程序關閉或機器宕機的情況下不會丟失數(shù)據
Sink
Sink不斷地輪詢Channel中的事件且批量地移除它們,并將這些事件批量寫入到存儲或索引系統(tǒng)、或者被發(fā)送到另一個Flume Agent。
Sink是完全事務性的。在從Channel批量刪除數(shù)據之前,每個Sink用Channel啟動一個事務。批量事件一旦成功寫出到存儲系統(tǒng)或下一個Flume Agent,Sink就利用Channel提交事務。事務一旦被提交,該Channel從自己的內部緩沖區(qū)刪除事件。
Sink組件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定義
Event
傳輸單元,F(xiàn)lume數(shù)據傳輸?shù)幕締卧?,以事件的形式將?shù)據從源頭送至目的地
Flume拓撲結構
Flume拓撲結構如下面圖片所示




Flume Agent內部原理
Flume內部原理如圖所示
