【圖文詳細 】Flume 資料採集元件—— 體系結構/核心元件
4、Flume 體系結構/核心元件
4.1、概述
Flume 的資料流由事件(Event)貫穿始終。事件是 Flume 的基本資料單位,它攜帶日誌資料(字 節陣列形式)並且攜帶有頭資訊,這些 Event 由 Agent 外部的 Source 生成,當 Source 捕獲事 件後會進行特定的格式化,然後 Source 會把事件推入(單個或多個)Channel 中。你可以把 Channel 看作是一個緩衝區,它將儲存事件直到 Sink 處理完該事件。Sink 負責持久化日誌或 者把事件推向另一個 Source。
Flume 以 agent 為最小的獨立執行單位。
一個 agent 就是一個 JVM。
單 agent 由 Source、Sink 和 Channel 三大元件構成。
如下圖:
4.2、Flume 三大核心元件
Event
Event 是 Flume 資料傳輸的基本單元。
Flume 以事件的形式將資料從源頭傳送到最終的目的地。
Event 由可選的 header 和載有資料的一個 byte array 構成。
載有的資料度 flume 是不透明的。
Header 是容納了 key-value 字串對的無序集合,key 在集合內是唯一的。
Header 可以在上下文路由中使用擴充套件
Client
Client 是一個將原始 log 包裝成 events 並且傳送他們到一個或多個 agent 的實體
目的是從資料來源系統中解耦 Flume
在 Flume 的拓撲結構中不是必須的。
Client 例項
flume log4j Appender
可以使用 Client SDK(org.apache.flume.api)定製特定的 Client
Agent
一個 Agent 包含 source,channel,sink 和其他元件。
它利用這些元件將 events 從一個節點傳輸到另一個節點或最終目的地
agent 是 flume 流的基礎部分。
flume 為這些元件提供了配置,宣告週期管理,監控支援。
Source
Source 負責接收 event 或通過特殊機制產生 event,並將 events 批量的放到一個或多個
Channel
包含 event 驅動和輪詢兩種型別。
不同型別的 Source
與系統整合的 Source:Syslog,Netcat,監測目錄池
自動生成事件的 Source:Exec
用於 Agent 和 Agent 之間通訊的 IPC source:avro,thrift source 必須至少和一個 channel 關聯
Agent 之 Channel
Channel 位於 Source 和 Sink 之間,用於快取進來的 event
當 sink 成功的將 event 傳送到下一個的 channel 或最終目的 event 從 channel 刪除
不同的 channel 提供的持久化水平也是不一樣的
Memory channel:volatile(不穩定的)
File Channel:基於 WAL(預寫式日誌 Write-Ahead logging)實現
JDBC channel:基於嵌入式 database 實現
channel 支援事務,提供較弱的順序保證
可以和任何數量的 source 和 sink 工作
Agent 之 Sink
Sink 負責將 event 傳輸到嚇一跳或最終目的地,成功後將 event 從 channel 移除
不同型別的 sink
儲存 event 到最終目的地終端 sink,比如 HDFS,HBase
自動消耗的 sink 比如 null sink
用於 agent 間通訊的 IPC:sink:Avro
必須作用於一個確切的 channel
Iterator
作用於 Source,按照預設的順序在必要地方裝飾和過濾 events
Channel Selector
允許 Source 基於預設的標準,從所有 channel 中,選擇一個或者多個 channel
Sink Processor
多個 sink 可以構成一個 sink group sink processor 可以通過組中所有 sink 實現負載均衡 也可以在一個 sink 失敗時轉移到另一個
4.3、Flume 經典部署方案