Flume應用場景及架構原理


Flume概念

Flume是一個分布式、可靠、和高可用的海量日志聚合的系統,支持在系統中定制各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定制)的能力。

flume 特點:



1、可靠性
當節點出現故障時,日志能夠被傳送到其他節點上而不會丟失。Flume提供了三種級別的可靠性保障,所有的數據以event為單位傳輸,從強到弱依次分別為:end-to-end(

收到數據agent首先將event寫到磁盤上,當數據傳送成功后,再刪除;如果數據發送失敗,可以重新發送。

),Store on failure(這也是scribe采用的策略,當數據接收方crash時,將數據寫到本地,待恢復后,繼續發送),Best effort(數據發送到接收方后,不會進行確認)。

2、可擴展性
Flume采用了三層架構,分別為agent,collector和storage,每一層均可以水平擴展。其中,所有agent和collector由master統一管理,這使得系統容易監控和維護,且master允許有多個(使用ZooKeeper進行管理和負載均衡),這就避免了單點故障問題。

3、可管理性
所有agent和colletor由master統一管理,這使得系統便於維護。多master情況,Flume利用ZooKeeper和gossip,保證動態配置數據的一致性。用戶可以在master上查看各個數據源或者數據流執行情況,且可以對各個數據源配置和動態加載。Flume提供了web 和shell script command兩種形式對數據流進行管理。

4、功能可擴展性
用戶可以根據需要添加自己的agent,collector或者storage。此外,Flume自帶了很多組件,包括各種agent(file, syslog等),collector和storage(file,HDFS等)。

5、文檔豐富,社區活躍
Flume 已經成為 Hadoop 生態系統的標配,它的文檔比較豐富,社區比較活躍,方便我們學習。

Flume OG 與 Flume NG 的對比
1、Flume OG

Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent、collector、master等組件構成。

2、Flume NG

Flume NG:Flume next generation ,即Flume 1.x版本,它由Agent、Client等組件構成。

3、Flume NG版本的優點

1)相對於Flume OG版本,Flume NG版本代碼比較簡單。

2)相對於Flume OG版本,Flume NG版本架構簡潔。

Flume NG基本架構
Flume NG是一個分布式、可靠、可用的系統,它能夠將不同數據源的海量日志數據進行高效收集、聚合、移動,最后存儲到一個中心化數據存儲系統中。由原來的Flume OG到現在的Flume NG,進行了架構重構,並且現在NG版本完全不兼容原來的OG版本。經過架構重構后,Flume NG更像是一個輕量的小工具,非常簡單,容易適應各種方式日志收集,並支持failover和負載均衡。

Flume NG 的架構圖如下所示。



Flume NG核心概念
Flume的架構主要有一下幾個核心概念:
1、Event:一個數據單元,帶有一個可選的消息頭。
2、Flow:Event從源點到達目的點的遷移的抽象。
3、Client:操作位於源點處的Event,將其發送到Flume Agent。
4、Agent:一個獨立的Flume進程,包含組件Source、Channel、Sink。
1)、Source:用來消費傳遞到該組件的Event。
2)、Channel:中轉Event的一個臨時存儲,保存有Source組件傳遞過來的Event。
3)、Sink:從Channel中讀取並移除Event,將Event傳遞到Flow Pipeline中的下一個Agent(如果有的話)或者數據持久化。

Event
1、Event 是Flume數據傳輸的基本單元。
2、Flume 以事件的形式將數據從源頭傳輸到最終的目的。
3、Event 由可選的header和載有數據的一個byte array構成。
1)載有的數據對Flume是不透明的。
2)Header 是容納了key-value字符串對的無序集合,key在集合內是唯一的。
3)Header 可以在上下文路由中使用擴展。

Client
1、Client 是一個將原始log包裝成events並且發送它們到一個或者多個agent的實體。
2、Client 在Flume的拓撲結構中不是必須的,它的目的是從數據源系統中解耦Flume。

Agent
1、一個Agent包含Source、Channel、Sink和其他組件。
2、它利用這些組件將events從一個節點傳輸到另一個節點或最終目的地。
3、agent是Flume流的基礎部分。
4、Flume 為這些組件提供了配置、生命周期管理、監控支持。

Agent之Source



1、Source負責接收event或通過特殊機制產生event,並將events批量的放到一個或多個Channel。
2、Source包含event驅動和輪詢兩種類型。
3、Source 有不同的類型。
1)與系統集成的Source:Syslog,NetCat。
2)自動生成事件的Source:Exec
3)用於Agent和Agent之間的通信的IPC Source:Avro、Thrift。
4、Source必須至少和一個Channel關聯。

Agent之Channel與Sink


Agent之Channel
1、Channel位於Source和Sink之間,用於緩存進來的event。
2、當Sink成功的將event發送到下一跳的Channel或最終目的地,event才Channel中移除。
3、不同的Channel提供的持久化水平也是不一樣的:
1)Memory Channel:volatile。
2)File Channel:基於WAL實現。
3)JDBC Channel:基於嵌入Database實現。
4、Channel支持事物,提供較弱的順序保證。
5、Channel可以和任何數量的Source和Sink工作。

Agent之Sink
1、Sink負責將event傳輸到下一跳或最終目的,成功完成后將event從Channel移除。
2、有不同類型的Sink:
1)存儲event到最終目的的終端Sink。比如HDFS,HBase。
2)自動消耗的Sink。比如:Null Sink。
3)用於Agent間通信的IPC sink:Avro。

3、Sink必須作用於一個確切的Channel。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM