快速學習-Flume概述

  • 2020 年 2 月 18 日
  • 筆記

第1章 概述

1.1 Flume定義

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

1.2 Flume組成架構

Flume組成架構如圖1-1,圖1-2所示:

1.2.1 Agent

Agent是一個JVM進程,它以事件的形式將數據從源頭送至目的,是Flume數據傳輸的基本單元。Agent主要有3個部分組成,Source、Channel、Sink。

1.2.2 Source

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

1.2.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將所有事件寫到磁盤。因此在程序關閉或機器宕機的情況下不會丟失數據。

1.2.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、自定義。

1.2.5 Event

傳輸單元,Flume數據傳輸的基本單元,以事件的形式將數據從源頭送至目的地。

1.3 Flume拓撲結構

Flume的拓撲結構如圖1-3、1-4、1-5和1-6所示:

1.4 Flume Agent內部原理