Flume是一個分佈式、可靠、和高可用的海量日誌聚合的系統,支持在系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。node
(1) 可靠性web
當節點出現故障時,日誌可以被傳送到其餘節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別爲:end-to-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功後,再刪除;若是數據發送失敗,能夠從新發送。),Store on failure(這也是scribe採用的策略,當數據接收方crash時,將數據寫到本地,待恢復後,繼續發送),Best effort(數據發送到接收方後,不會進行確認)。shell
(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等)。測試
flume的邏輯架構:spa
正如前面提到的,Flume採用了分層架構:分別爲agent,collector和storage。其中,agent和collector均由兩部分組成:source和sink,source是數據來源,sink是數據去向。
Flume使用兩個組件:Master和Node,Node根據在Master shell或web中動態配置,決定其是做爲Agent仍是Collector。
數據流簡單示例
Step 1: 外部數據源(web server)將Flume可識別的Event發送到Source;
Step 2: Source收到Event後存儲到一個或多個Channel中;
Step 3: Channel保留Event直到Sink將其處理完畢;
Step 4: Sink從Channel中取出數據,並將其傳輸至外部存儲(HDFS)
組件 功能介紹
Event Flume處理數據元,多是一條日誌、一個Avro對象等,一般約4KB大小
Agent Flume運行實體,每臺機器一份,可能包括多個Source或者Sink
Client 產生Event,在單獨線程中運行
Source 接收Event,並送入Channel,在單獨線程中運行並監控
Channel 鏈接Source與Sink,功能相似隊列,有可靠性實現
Sink 從Channel接收Event,可能進行下一步轉發(如連與另外某Source通信),在單獨線程中運行並監控
配置文件示例
• # example.conf: A single-node Flume configuration
• # 組件該代理的名字
• agent1.sources = source1
• agent1.sinks = sink1
• agent1.channels = channel1
• # 採集類型,IP,端口
• agent1.sources.source1.type = netcat
• agent1.sources.source1.bind = localhost
• agent1.sources.source1.port = 44444
• # 輸出類型
• agent1.sinks.sink1.type = logger
• # channel中的存儲方式
• agent1.channels.channel1.type = memory
• # 將source和channel綁定;sink和channel綁定,source能夠綁定多個channel以空格隔開,shink只能綁定一個channel
• agent1.sources.source1.channels = channel1
• agent1.sinks.sink1.channel = channel1
基本功能
咱們看一下,Flume NG都支持哪些功能(目前最新版本是1.5.0.1),瞭解它的功能集合,可以讓咱們在應用中更好地選擇使用哪種方案。說明Flume NG的功能,實際仍是圍繞着Agent的三個組件Source、Channel、Sink來看它可以支持哪些技術或協議。咱們再也不對各個組件支持的協議詳細配置進行說明,經過列表的方式分別對三個組件進行概要說明:
Flume Source
Source類型 說明
Avro Source 支持Avro協議(其實是Avro RPC),內置支持
Thrift Source 支持Thrift協議,內置支持
Exec Source 基於Unix的command在標準輸出上生產數據
JMS Source 從JMS系統(消息、主題)中讀取數據,ActiveMQ已經測試過
Spooling Directory Source 監控指定目錄內數據變動
Twitter 1% firehose Source 經過API持續下載Twitter數據,試驗性質
Netcat Source 監控某個端口,將流經端口的每個文本行數據做爲Event輸入
Sequence Generator Source 序列生成器數據源,生產序列數據
Syslog Sources 讀取syslog數據,產生Event,支持UDP和TCP兩種協議
HTTP Source 基於HTTP POST或GET方式的數據源,支持JSON、BLOB表示形式
Legacy Sources 兼容老的Flume OG中Source(0.9.x版本)
Flume Channel
Channel類型 說明
Memory Channel Event數據存儲在內存中
JDBC Channel Event數據存儲在持久化存儲中,當前Flume Channel內置支持Derby
File Channel Event數據存儲在磁盤文件中
Spillable Memory Channel Event數據存儲在內存中和磁盤上,當內存隊列滿了,會持久化到磁盤文件(當前試驗性的,不建議生產環境使用)
Pseudo Transaction Channel 測試用途
Custom Channel 自定義Channel實現
Flume Sink
Sink類型 說明
HDFS Sink 數據寫入HDFS
Logger Sink 數據寫入日誌文件
Avro Sink 數據被轉換成Avro Event,而後發送到配置的RPC端口上
Thrift Sink 數據被轉換成Thrift Event,而後發送到配置的RPC端口上
IRC Sink 數據在IRC上進行回放
File Roll Sink 存儲數據到本地文件系統
Null Sink 丟棄到全部數據
HBase Sink 數據寫入HBase數據庫
Morphline Solr Sink 數據發送到Solr搜索服務器(集羣)
ElasticSearch Sink 數據發送到Elastic Search搜索服務器(集羣)
Kite Dataset Sink 寫數據到Kite Dataset,試驗性質的
Custom Sink 自定義Sink實現
另外還有Channel Selector、Sink Processor、Event Serializer、Interceptor等組件,能夠參考官網提供的用戶手冊。