Flume NG 學習筆記(一)簡介

1、簡介

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

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

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

一、sources和sinks 使用channels進行連接sql

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

三、再也不區分邏輯和物理node,全部物理節點統稱爲 「agents」,每一個agents 都能運行0個或多個sources 和sinks數組

四、再也不須要master節點和對zookeeper的依賴,配置文件簡單化。緩存

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

六、使用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能夠協同工做


 

2、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,有兩種方式:

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

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

 

二、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)、總結:若是應用沒法實現以分鐘切割日誌文件的話,能夠兩種收集方式結合使用。2、Flume Sink

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

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

 

3、Flume Channel

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

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

其中:

MemoryChannel能夠實現高速的吞吐,可是沒法保證數據的完整性。

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

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

相關文章
相關標籤/搜索