flume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(好比文本、HDFS、Hbase等)的能力 。
flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)而且攜帶有頭信息,這些Event由Agent外部的Source生成,當Source捕獲事件後會進行特定的格式化,而後Source會把事件推入(單個或多個)Channel中。你能夠把Channel看做是一個緩衝區,它將保存事件直到Sink處理完該事件。web
Sink負責持久化日誌或者把事件推向另外一個Source。
1)flume的可靠性
當節點出現故障時,日誌可以被傳送到其餘節點上而不會丟失。Flume提供了三種級別的可靠性保障,從強到弱依次分別爲:end-to-end(收到數據agent首先將event寫到磁盤上,當數據傳送成功後,再刪除;若是數據發送失敗,能夠從新發送。),Store on failure(這也是scribe採用的策略,當數據接收方crash時,將數據寫到本地,待恢復後,繼續發送),Besteffort(數據發送到接收方後,不會進行確認)。數組
2)flume的可恢復性
仍是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統裏(性能較差)。服務器
Flume事件定義爲具備字節有效負載和可選字符串屬性集的數據流單元。Flume代理是一個(JVM)進程,它承載組件,事件經過組件從外部源流向下一個目標(hop)。異步
Flume源使用外部源(如web服務器)交付給它的事件。外部源以目標水槽源可識別的格式向水槽發送事件。例如,Avro水槽源可用於從Avro客戶機或流中的其餘水槽代理接收Avro事件,該流從Avro接收器發送事件。可使用Thrift Flume源定義相似的流,以接收來自Thrift Sink或Flume Thrift Rpc客戶機或使用Flume Thrift協議生成的任何語言編寫的Thrift客戶機的事件。當Flume源接收到一個事件時,它將其存儲到一個或多個通道中。通道是一個被動存儲,它保存事件,直到它被水槽吸取爲止。文件通道就是一個例子——它由本地文件系統支持。接收器將事件從通道中移除,並將其放入外部存儲庫中,如HDFS(經過Flume HDFS接收器)或將其轉發到流中的下一個Flume代理(下一跳)的Flume源。給定代理中的源和接收器與通道中暫存的事件異步運行。分佈式
監控nc通訊實例性能
[/soft/flume/conf/name.conf]代理
#聲明三種組件日誌
a1.sources = r1進程
a1.channels = c1事件
a1.sinks = k1
#定義source信息
a1.sources.r1.type=netcat
a1.sources.r1.bind=localhost
a1.sources.r1.port=8888
#定義sink信息
a1.sinks.k1.type=logger
#定義channel信息
a1.channels.c1.type=memory
#綁定在一塊兒
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1