您好,登錄后才能下訂單哦!
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可以協同工作
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。
FlumeChannel主要提供一個隊列的功能,對source提供中的數據進行簡單的緩存。
Flume對于Channel,則提供了Memory Channel、JDBC Chanel、File Channel,etc。
其中:
MemoryChannel可以實現高速的吞吐,但是無法保證數據的完整性。
MemoryRecoverChannel在官方文檔的建議上已經建義使用FileChannel來替換。
FileChannel保證數據的完整性與一致性,事件持久化在本地文件系統里(性能較差)。在具體配置不現的FileChannel時,建議FileChannel設置的目錄和程序日志文件保存的目錄設成不同的磁盤,以便提高效率.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。