日誌收集系統之 Apache Flume
Flume 是什麼?
Flume 是一種分佈式,可靠且可用的服務,用於有效地收集,聚合和移動大量日誌數據。它具有基於流數據流的簡單靈活的體系結構。它具有可調整的可靠性機制以及許多故障轉移和恢復機制,具有強大的功能和容錯能力。它使用一個簡單的可擴展數據模型,允許在線分析應用程序。
源碼地址:https://github.com/apache/flume.git
系統架構
Agent 主要由: Source、Channel、Sink 三個組件組成.
Source:
從數據發生器接收數據, 並將接收的數據以 Flume 的 Event 格式傳遞給一個或者多個通道 channel。
Source 組件類型:
Channel:
Channel 是一種短暫的存儲容器,它將從 Source 處接收到的 Event 格式的數據緩存起來,直到它們被 Sinks 消費掉, 它在 Source 和 Sink 間起着橋樑的作用,Channel 是一個完整的事務, 這一點保證了數據在收發的時候的一致性. 並且它可以和任意數量的 Source 和 Sink 鏈接.
Channel 組件類型:
Sink:
Sink 將數據存儲到集中存儲器比如 Hbase 和 HDFS,它從 channels 消費數據 (events) 並將其傳遞給目標地。目標地可能是另一個 Sink,也可能 HDFS、HBase。
Sink 組件類型:
應用場景
1、電子商務網站
比如我們在做一個電子商務網站,然後我們想從消費用戶中訪問點特定的節點區域來分析消費者的行爲或者購買意圖. 這樣我們就可以更加快速的將他想要的推送到界面上,實現這一點,我們需要將獲取到的它訪問的頁面以及點擊的產品數據等日誌數據信息收集並移交給 Hadoop 平臺上去分析,而 Flume 正是幫我們做到這一點。
2、內容推送
現在流行的內容推送,比如廣告定點投放以及新聞私人定製也是基於此。
3、ETL 工具
可以利用插件把關係型數據庫實時增量的導入到 Hdfs 外部數據源。
優勢
1、Flume 可以將應用產生的數據存儲到任何集中存儲器中,比如 HDFS、HBase;
2、當收集數據的速度超過將寫入數據的時候,也就是當收集信息遇到峯值時,這時候收集的信息非常大,甚至超過了系統的寫入數據能力,這時候,Flume 會在數據生產者和數據收容器間做出調整,保證其能夠在兩者之間提供平穩的數據;
3、提供上下文路由特徵;
4、Flume 的管道是基於事務,保證了數據在傳送和接收時的一致性;
5、Flume 是可靠的,容錯性高的,可升級的,易管理的, 並且可定製的。
主要特徵
1、Flume 可以高效率的將多個網站服務器中收集的日誌信息存入 HDFS/HBase 中;
2、使用 Flume,我們可以將從多個服務器中獲取的數據迅速的移交給 Hadoop 中;
3、除了日誌信息,Flume 同時也可以用來接入收集規模宏大的社交網絡節點事件數據,比如 facebook,twitter, 電商網站如亞馬遜,flipkart 等;
4、支持各種接入資源數據的類型以及接出數據類型;
5、支持多路徑流量,多管道接入流量,多管道接出流量,上下文路由等;
6、可以水平擴展。
其它架構類型
**多代理流
**
爲了使數據跨多個代理或躍點流動,前一個代理的 Sink 和當前躍點的 Source 必須是 Avro 類型,接收器指向源的主機名(或 IP 地址)和端口。
合併流
日誌收集中的一種非常常見的情況是,大量的日誌生成客戶端將數據發送到連接到存儲子系統的幾個使用方代理。例如,從數百臺 Web 服務器收集的日誌發送到許多寫入 HDFS 羣集的代理。
在 Flume 中,可以通過爲多個第一層代理配置一個 Avro Sink 來實現這一點,它們均指向單個代理的 Avro 源(同樣,在這種情況下,您可以使用 thrift Source/Sink/Client)。第二層代理上的此源將接收到的事件合併到一個通道中,該通道由接收器消耗到其最終目的地。
**多路利用流
**
Flume 支持將事件流複用到一個或多個目的地。這是通過定義一種流多路複用器來實現的,該流多路複用器可以將事件複製或選擇性地路由到一個或多個通道。
上面的示例顯示了來自代理 “foo” 的源,將流分流到三個不同的通道。可以複製或多路複用。在複製流的情況下,每個事件都發送到所有三個通道。對於多路複用情況,當事件的屬性與預配置的值匹配時,事件將傳遞到可用通道的子集。例如,如果將名爲 “txnType” 的事件屬性設置爲 “customer”,則它應轉到 Channel1 和 Channel3,如果它是 “vendor”,則應轉到 Channel2,否則應到 Channel3。可以在代理的配置文件中設置映射。
總結
Flume 的架構設計的簡單易用,對於初學者而言也可以快速上手,其提供了多種類型的插件,在業務場景中可以根據需要選擇使用最佳類型的插件,而且 Flume 提供了擴展接口,開發者可以基於擴展接口自定義插件類型。Flume 的配置方式比較簡單,在 conf 中配置 3 個組件類型的屬性,即可以使用其功能。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/NgW8-AJ5fa4sB01sUYQ4Tg