flume基礎

1、FLUME介紹

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等)。測試

2、FLUME架構

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等組件,能夠參考官網提供的用戶手冊。

相關文章
相關標籤/搜索