導讀
Flume NG是一個分布式、可靠、可用的系統,它能夠將不同數據源的海量日志數據進行高效收集、聚合、移動,最后存儲到一個中心化數據存儲系統中。
由原來的Flume OG到現在的Flume NG,進行了架構重構,並且現在NG版本完全不兼容原來的OG版本!!!
經過架構重構后,Flume NG更像是一個輕量的小工具,非常簡單,容易適應各種方式日志收集,並支持failover和負載均衡。
Flume NG 的架構
Flume NG 的架構圖如下所示。
Flume NG核心概念
Flume的架構主要有以下幾個核心概念:
1、Event:一個數據單元,帶有一個可選的消息頭。
2、Flow:Event從源點到達目的點的遷移的抽象。
3、Client:操作位於源點處的Event,將其發送到Flume Agent。
4、Agent:一個獨立的Flume進程,包含組件Source、Channel、Sink。
5、Source:用來消費傳遞到該組件的Event。
6、Channel:中轉Event的一個臨時存儲,保存有Source組件傳遞過來的Event。
7、Sink:從Channel中讀取並移除Event,將Event傳遞到Flow Pipeline中的下一個Agent(如果有的話)
下面我分別介紹以上幾個核心的概念
1、Event
1、Event 是Flume數據傳輸的基本單元。
2、Flume 以事件的形式將數據從源頭傳輸到最終的目的。
3、Event 由可選的header和載有數據的一個byte array構成。
1)載有的數據對Flume是不透明的。
2)Header 是容納了key-value字符串對的無序集合,key在集合內是唯一的。
3)Header 可以在上下文路由中使用擴展。
2、Client
1、Client 是一個將原始log包裝成events並且發送它們到一個或者多個agent的實體。
2、Client 在Flume的拓撲結構中不是必須的,它的目的是從數據源系統中解耦Flume
3、Agent
1、一個Agent包含Source、Channel、Sink和其他組件。
2、它利用這些組件將events從一個節點傳輸到另一個節點或最終目的地。
3、agent是Flume流的基礎部分。
4、Flume 為這些組件提供了配置、生命周期管理、監控支持。
4、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關聯。
5、Agent之Channel與Sink
6、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工作。
7、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。