Yige

Yige

Build

Flume簡介與基本使用

Flume 簡介及基本使用#

內容參考: 官方文檔

Flume 基本架構#

image.png
外部數據源以特定格式向 Flume 發送 events (事件),當 source 接收到 events 時,它將其存儲到一個或多個 channelchannel 會一直保存 events 直到它被 sink 所消費。sink 的主要功能從 channel 中讀取 events,並將其存入外部存儲系統或轉發到下一個 source,成功後再從 channel 中移除 events

基本概念#

  • Event
  • Source
  • Channel
  • Sink
  • Agent

Event#

Event 是 Flume NG 數據傳輸的基本單元。類似於 JMS 和消息系統中的消息。一個 Event 由標題和正文組成:前者是鍵 / 值映射,後者是任意字節數組。

Agent#

是一個獨立的 (JVM) 進程,包含 Source、 Channel、 Sink 等組件

Source#

數據收集組件,從外部數據源收集數據,並存儲到 Channel 中。
內置了幾十種類型,如 Avro SourceThrift SourceKafka SourceJMS Source

Channel#

Channel 是源和接收器之間的管道,用於臨時存儲數據。可以是內存或持久化的文件系統:

  • Memory Channel : 使用內存,優點是速度快,但數據可能會丟失 (如突然宕機);
  • File Channel : 使用持久化的文件系統,優點是能保證數據不丟失,但是速度慢。

內置Memory ChannelJDBC ChannelKafka ChannelFile Channel

Sink#

Sink 的主要功能從 Channel 中讀取 Event,並將其存入外部存儲系統或將其轉發到下一個 Source,成功後再從 Channel 中移除 Event。包含HDFS SinkHive SinkHBaseSinksAvro Sink

Flume 事務#

數據在傳輸到下個節點時 (一般是批量數據),假設接收節點出現異常,比如網絡異常。則回滾這一批數據,因此有可能導致數據重發(是重發不是重複)。
同個節點內,Source 寫入數據到 Channel, 數據在一個批次內的數據出現異常,則不寫入到 Channel,已接收到的部分數據直接拋棄,靠上個節點重發數據

source -> channel: put 事務
channel -> sink: take 事務

put 事務步驟:

  • doput : 先將批數據寫入臨時緩衝區 putlist 裡面
  • docommit:去檢查 channel 裡面有沒有空位置,如果有就傳入數據,如果沒有那麼 dorollback 就把數據回滾到 putlist 裡面。

take 事務步驟:

  • dotake:將數據讀取到臨時緩衝區 takelist,並將數據傳到 hdfs 上。
  • docommit : 去判斷數據發送是否成功,若成功那麼清除臨時緩衝區 takelist
    若不成功(比如 hdfs 系統服務器崩潰等)那麼 dorollback 將數據回滾到 channel 裡面

參考鏈接: flume 事務解析

Flume 的可靠性#

當節點出現故障時,日誌能夠被傳送到其他節點上而不會丟失。Flume 提供了三種級別的可靠性保障,從強到弱依次分別為:

  • end-to-end: 收到數據 agent 首先將 event 寫到磁碟上,當數據傳送成功後,再刪除;如果數據發送失敗,可以重新發送
  • Store on failure: 這也是 scribe 採用的策略,當數據接收方 crash 時,將數據寫到本地,待恢復後,繼續發送
  • Besteffort: 數據發送到接收方後,不會進行確認

Flume 的部署類型#

單一流程#

image.png

multi-agent flow(多代理流程,幾個 agent 順序連接)#

image.png

可以將幾個 Agent 順序連接起來,將最初的數據源經過收集,存儲到最終的存儲系統中。這是最簡單的情況,一般情況下,應該控制這種順序連接的 Agent 的數量,因為數據流經的路徑變長了,如果不考慮 failover 的話,出現故障將影響整個 Flow 上的 Agent 收集服務

Consolidation(流的合併,幾個 Agent 的數據匯聚到同一個 Agent )#

image.png

這種情況應用的場景比較多,比如要收集 Web 網站的用戶行為日誌, Web 網站為了可用性使用的負載集群模式,每個節點都產生用戶行為日誌,可以為每 個節點都配置一個 Agent 來單獨收集日誌數據,然後幾個 Agent 將數據最終匯聚到一個用來存儲數據存儲系統,如 HDFS 上

Multiplexing the flow(多路復用)#

image.png

Flume 支持從一個 Source 向多個 Channel,也就是向多個 Sink 傳遞事件,這個操作稱之為 Fan Out (扇出)。默認情況下 Fan Out 是向所有的 Channel 複製 Event,即所有 Channel 收到的數據都是相同的。同時 Flume 也支持在 Source 上自定義一個復用選擇器 (multiplexing selector) 來實現自定義的路由規則。

舉個例子,當 syslog, java, nginx、 tomcat 等混合在一起的日誌流開始流入一個 agent 後,可以在 agent 中將混雜的日誌流分開,然後給每種日誌建立一個自己的傳輸通道

load balance 功能#

image.png

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。