Flume NG 學習筆記(一)簡介

一、簡介

Flume是一個分佈式、可靠、高可用的海量日誌聚合系統,支持在系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據的簡單處理,並寫到各種數據接收方的能力。

Flume在0.9.x and 1.x之間有較大的架構調整,1.x版本之後的改稱Flume NG(next generation),0.9.x的稱爲Flume OG(originalgeneration)。

對於OG版本, Flume NG (1.x.x)的主要變化如下:

1、sources和sinks 使用channels進行鏈接

2、兩個主要channel 。1) in-memorychannel  非持久性支持,速度快。2)JDBC-based channel 持久性支持。

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

4、不再需要master節點和對zookeeper的依賴,配置文件簡單化。

5、插件化,一部分面對用戶,工具或系統開發人員。

6、使用Thrift、Avro Flume sources 可以從Flume0.9.4 發送 events  到Flume 1.x

下圖爲Flume體系架構

其中相關組件如下:

組件

功能

Agent

使用JVM 運行Flume。每臺機器運行一個agent,但是可以在一個agent中包含多個sources和sinks。

Client

生產數據,運行在一個獨立的線程。

Source

從Client收集數據,傳遞給Channel。

Sink

從Channel收集數據,運行在一個獨立線程。

Channel

連接 sources 和 sinks ,這個有點像一個隊列。

Events

可以是日誌記錄、 avro 對象等。

 

Flume架構整體上看就是 source-->channel-->sink 的三層架構,類似生成者和消費者的架構,他們之間通過channel傳輸,解耦。

Flume以agent爲最小的獨立運行單位。一個agent就是一個JVM。單agent由Source、Sink和Channel三大組件構成,注:運行Flume時,機器必須安裝裝JDK6.0以上的版本

事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)並且攜帶有頭信息,這些Event由Agent外數據源生成

當Source捕獲事件後會進行特定的格式化,然後Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩衝區,它將保存事件直到Sink處理完該事件。Sink負責持久化日誌或者把事件推向另一個Source。

Flume支持用戶建立多級流,也就是說,多個agent可以協同工作


 

二、Flume Source

FlumeSource :完成對日誌數據的收集,分成transtion 和event 打入到channel之中。

Flume提供了各種source的實現,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、HTTP Source、HDFS Source,etc。

對現有程序改動最小的使用方式是使用是直接讀取程序原來記錄的日誌文件,基本可以實現無縫接入,不需要對現有程序進行任何改動。直接讀取文件Source,有兩種方式:

1、Exec Source 以運行Linux命令的方式,持續的輸出最新的數據,如tail -F 文件名指令,在這種方式下,取的文件名必須是指定的。

ExecSource 雖然支持實時數據,但是在flume不運行和腳本錯誤時,會丟數據,也不支持斷點續傳功能。因爲沒有記錄上次文件讀到的位置,從而沒辦法知道,下次再讀時,從什麼地方開始讀。特別是在日誌文件一直在增加的時候。flume的source掛了。等flume的source再次開啓的這段時間內,增加的日誌內容,就沒辦法被source讀取到了。不過flume有一個execStream的擴展,可以自己寫一個監控日誌增加情況,把增加的日誌,通過自己寫的工具把增加的內容,傳送給flume的node。再傳送給sink的node。要是能在tail類的source中能支持,在node掛掉這段時間的內容,等下次node開啓後在繼續傳送,那就更完美了。

 

2、Spool Source是監測配置的目錄下新增的文件,並將文件中的數據讀取出來。其中,SpoolSource有2個注意地方,第一個是拷貝到spool目錄下的文件不可以再打開編輯,第二個是spool目錄下不可包含相應的子目錄。

SpoolSource在實際使用的過程中,可以結合log4j使用,使用log4j的時候,將log4j的文件分割機制設爲1分鐘一次,將文件拷貝到spool的監控目錄。 log4j有一個TimeRolling的插件,可以把log4j分割的文件到spool目錄。基本實現了實時的監控。Flume在傳完文件之後,將會修 改文件的後綴,變爲.COMPLETED(後綴也可以在配置文件中靈活指定)

Exec Source 和Spool Source 比較

    1)、ExecSource可以實現對日誌的實時收集,但是存在Flume不運行或者指令執行出錯時,將無法收集到日誌數據,無法何證日誌數據的完整性。

    2)、SpoolSource雖然無法實現實時的收集數據,但是可以使用以分鐘的方式分割文件,趨近於實時。

3)、總結:如果應用無法實現以分鐘切割日誌文件的話,可以兩種收集方式結合使用。二、Flume Sink

FlumeSink取出Channel中的數據,進行相應的存儲文件系統,數據庫,或者提交到遠程服務器。

Flume也提供了各種sink的實現,包括HDFS sink、Loggersink、Avro sink、File Roll sink、Null sink、Hbasesink,etc。

 

三、Flume Channel

FlumeChannel主要提供一個隊列的功能,對source提供中的數據進行簡單的緩存。

Flume對於Channel,則提供了Memory Channel、JDBC Chanel、File Channel,etc。

其中:

MemoryChannel可以實現高速的吞吐,但是無法保證數據的完整性。

MemoryRecoverChannel在官方文檔的建議上已經建義使用FileChannel來替換。

FileChannel保證數據的完整性與一致性,事件持久化在本地文件系統裏(性能較差)。在具體配置不現的FileChannel時,建議FileChannel設置的目錄和程序日誌文件保存的目錄設成不同的磁盤,以便提高效率.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章