1. 程式人生 > >flume學習之一 是什麼,主要應用在什麼場景

flume學習之一 是什麼,主要應用在什麼場景

1、Flume是什麼?

FlumeCloudera開發的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料。資料來源可定製、可擴充套件,資料儲存系統可定製、可擴充套件。

flume執行的核心是agent。它是一個完整的資料收集工具,含有三個核心元件,分別是sourcechannelsink。通過這些元件,event可以從一個地方流向另一個地方。為了保證輸送一定成功,在送到目的地之前,會先快取資料,待資料真正到達目的地後,刪除自己快取的資料。

2、flume背景

    Flume 初始的發行版本目前被統稱為 Flume OG

original generation),屬於 cloudera。但隨著 FLume 功能的擴充套件,Flume OG 程式碼工程臃腫、核心元件設計不合理、核心配置不標準等缺點暴露出來,尤其是在 Flume OG 的最後一個發行版本 0.94.0 中,日誌傳輸不穩定的現象尤為嚴重,為了解決這些問題,2011 年 10 月 22 號,cloudera 完成了 Flume-728,對 Flume 進行了里程碑式的改動:重構核心元件、核心配置以及程式碼架構,重構後的版本統稱為 Flume NGnext generation);改動的另一原因是將 Flume 納入 apache 旗下,cloudera Flume 
改名為 Apache Flume

Flume NG 1.x.x)的主要變化:

sourcessinks 使用channels 進行連結

兩個主要channel 1,  in-memory channel  非永續性支援,速度快。, JDBC-based channel 永續性支援。

不再區分邏輯和物理node,所有物理節點統稱為 “agents,每個agents 都能執行0個或多個sources sinks

不再需要master節點和對zookeeper的依賴,配置檔案簡單化。

外掛化,一部分面對使用者,工具或系統開發人員。

使用ThriftAvro Flume sources

進行RPC通訊

注:本文所使用的 apache-flume-1.6.0-bin.tar.gz,不需要額外的安裝過程,解壓縮即可用

3、Flume 的一些核心概念

Agent 使用JVM 執行Flume。每臺機器執行一個agent,但是可以在一個agent中包含多個sourcessinks允許多個agent連在一起,形成前後相連的多級跳

Client 生產資料,執行在一個獨立的執行緒。

Source 從Client收集資料,傳遞給Channel不同的source,可以接受不同的資料格式。比如有目錄池(spooling directory)        資料來源,可以監控指定資料夾中的新檔案變化,如果目錄中有檔案產生,就會立刻讀取其內容。

Sink     從Channel收集資料,執行在一個獨立執行緒。會消費channel中的資料,然後送給外部源或者其他source。如資料可以寫入到HDFS或者HBase中。

Channel 連線 sources 和 sinks ,這個有點像一個佇列。是一個儲存地,接收source的輸出,直到有sink消費掉channel中的資料。channel中的資料直到進入到下一個channel中或者進入終端才會被刪除。當sink寫入失敗後,可以自動重啟,不會造成資料丟失,因此很可靠。

Events 可以是日誌記錄、 avro 物件等。

4、Flume提供的功能

Flume提供了從console(控制檯)RPC(Thrift-RPC)text(檔案)tail(UNIX tail)syslog(syslog日誌系統,支援TCPUDP2種模式)exec(命令執行)等資料來源上收集資料的能力。同時,Flume的資料接受方,可以是console(控制檯)text(檔案)dfs(HDFS檔案)RPC(Thrift-RPC)syslogTCP(TCP syslog日誌系統)

5、資料流模型

flume傳輸的資料的基本單位是event,如果是文字檔案,通常是一行記錄,這也是事務的基本單位。

Flume的資料流由事件(Event)貫穿始終。事件是Flume的基本資料單位,它攜帶日誌資料(位元組陣列形式)並且攜帶有頭資訊,這些EventAgent外部的Source,比如上圖中的Web Server生成。當Source捕獲事件後會進行特定的格式化,然後Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩衝區,它將儲存事件直到Sink處理完該事件。Sink負責持久化日誌或者把事件推向另一個Source。不同型別的Source,ChannelSink可以自由組合。組合方式基於使用者設定的配置檔案,非常靈活。比如:Channel可以把事件暫存在記憶體裡,也可以持久化到本地硬碟上。Sink可以把日誌寫入HDFS, HBase,甚至是另外一個Source等等。


6、高可靠、可恢復性

高可靠性

作為生產環境執行的軟體,高可靠性是必須的。
從單agent來看,Flume使用基於事務的資料傳遞方式來保證事件傳遞的可靠性。SourceSink被封裝進一個事務。事件被存放在Channel中直到該事件被處理,Channel中的事件才會被移除。這是Flume提供的點到點的可靠機制。
從多級流來看,前一個agentsink和後一個agentsource同樣有它們的事務來保障資料的可靠性。

可恢復性

還是靠Channel。推薦使用FileChannel,事件持久化在本地檔案系統裡(效能較差)