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

1、Flume是什麼?

Flume是Cloudera開發的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據。數據源可定製、可擴展,數據存儲系統可定製、可擴展。

flume運行的核心是agent。它是一個完整的數據收集工具,含有三個核心組件,分別是source、channel、sink。通過這些組件,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 NG(next generation);改動的另一原因是將 Flume 納入 apache 旗下,cloudera Flume 改名爲 Apache Flume。

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

sources和sinks 使用channels 進行鏈接

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

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

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

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

使用Thrift、Avro Flume sources進行RPC通信

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

 

3、Flume 的一些核心概念

Agent 使用JVM 運行Flume。每臺機器運行一個agent,但是可以在一個agent中包含多個sources和sinks。允許多個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日誌系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力。同時,Flume的數據接受方,可以是console(控制檯)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日誌系統)等

 

5、數據流模型

flume傳輸的數據的基本單位是event,如果是文本文件,通常是一行記錄,這也是事務的基本單位。

Flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)並且攜帶有頭信息,這些Event由Agent外部的Source,比如上圖中的Web Server生成。當Source捕獲事件後會進行特定的格式化,然後Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩衝區,它將保存事件直到Sink處理完該事件。Sink負責持久化日誌或者把事件推向另一個Source。不同類型的Source,Channel和Sink可以自由組合。組合方式基於用戶設置的配置文件,非常靈活。比如:Channel可以把事件暫存在內存裏,也可以持久化到本地硬盤上。Sink可以把日誌寫入HDFS, HBase,甚至是另外一個Source等等。

 

6、高可靠、可恢復性

高可靠性

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

可恢復性

還是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統裏(性能較差)。

 

發佈了178 篇原創文章 · 獲贊 37 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章