1 簡介
Apache Flume 是一個分布式,高可用的資料收集系統,它可以從不同的資料源收集資料,經過聚合后發送到存盤系統中,通常用于日志資料的收集,Flume 分為 NG 和 OG (1.0 之前) 兩個版本,NG 在 OG的基礎上進行了完全的重構,是目前使用最為廣泛的版本,
Flume 跟 Sqoop、Kettle 有類似的地方但是又有不同,隨后會詳細分析,
2 基本架構和核心概念
基本架構圖【官網】:

來自尚硅谷的資料,侵刪,【這個較為詳盡】:

2.1 基本架構
這里我們可以類比Kafka進行理解,外部資料源【扮演Kafka的生產者】以特定格式向 Flume 發送 events (事件)【就像Kafka的message一樣】,當 source 接收到 events 時,它將其存盤到一個或多個 channel【是不是很像Kafka的副本】,channe 會一直保存 events 直到它被 sink 所消費,sink 的主要功能從 channel 中讀取 events 【是不是很像Kafka的消費者】,并將其存入外部存盤系統或轉發到下一個 source,成功后再從 channel 中移除 events,【跟Kafka多么的像】🐘
2.2 核心概念
Agent: 是一個獨立的 (JVM) 行程,包含 Source 、 Channel 、 Sink 等組件,
Event: 它是 Flume NG 資料傳輸的基本單元,類似于 JMS 和訊息系統中的訊息,一個 Event 由標題和正文組成:前者是鍵/值映射,后者是任意位元組陣列,
Source: 資料收集組件,從外部資料源收集資料,并存盤到 Channel 中,
Channel: 是源和接收器之間的管道,用于臨時存盤資料,可以是記憶體或持久化的檔案系統:
Memory Channel : 使用記憶體,優點是速度快,但資料可能會丟失 (如突然宕機);
File Channel : 使用持久化的檔案系統,優點是能保證資料不丟失,但是速度慢,
Sink: 主要功能從 Channel 中讀取 Event,并將其存入外部存盤系統或將其轉發到下一個Source ,成功后再從 Channel 中移除 Event ,
2.3 組件種類
Flume 中的每一個組件都提供了豐富的型別,適用于不同場景:
- Source 型別 :內置了幾十種型別,如 Avro Source , Thrift Source , Kafka Source , JMS Source ;
- Sink 型別 : HDFS Sink , Hive Sink , HBaseSinks , Avro Sink 等;
- Channel 型別 : Memory Channel , JDBC Channel , Kafka Channel , File Channel 等,
對于 Flume 的使用,除非有特別的需求,否則通過組合內置的各種型別的 Source,Sink 和 Channel就能滿足大多數的需求,在 Flume 官網 上對所有型別組件的配置引數均以表格的方式做了詳盡的介紹【Flume的官網是真的很不錯,清晰 👏 】,并附有配置樣例;同時不同版本的引數可能略有所不同,所以使用時建議選取官網的《Flume 1.9.0 User Guide》作為主要參考資料,
3 架構模式
3.1 multi-agent flow
Flume 支持跨越多個 Agent 的資料傳遞,這要求前一個 Agent 的 Sink 和下一個 Agent 的 Source 都必須是 Avro 型別,Sink 指向 Source 所在主機名 (或 IP 地址) 和埠,

3.2 Consolidation
Consolidation(聯合,統一;合并) 日志收集中常常存在大量的客戶端(比如分布式 web 服務),Flume 支持使用多個 Agent 分別收集日志,然后通過一個或者多個 Agent 聚合后再存盤到檔案系統中,

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

3.4 負載均衡

4 Agent內部原理
【來自尚硅谷的資料 侵刪】這里不詳細說明了,大家理解理解:

5 配置格式
Flume 配置通常需要以下兩個步驟【配置舉例,隨后會有詳細說明】:
- 分別定義好 Agent 的 Sources Sinks Channels,然后將 Sources 和 Sinks 與通道進行系結,需要注意的是一個 Source 可以配置多個 Channel,但一個 Sink 只能配置一個 Channel,基本格式如下:
<Agent>.sources = <Source>
<Agent>.sinks = <Sink>
<Agent>.channels = <Channel1> <Channel2>
# set channel for source
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...
# set channel for sink
<Agent>.sinks.<Sink>.channel = <Channel1>
- 分別定義 Source Sink Channel 的具體屬性,基本格式如下:
<Agent>.sources.<Source>.<someProperty> = <someValue>
# properties for channels
<Agent>.channel.<Channel>.<someProperty> = <someValue>
# properties for sinks
<Agent>.sources.<Sink>.<someProperty> = <someValue>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292668.html
標籤:其他
