離線日誌收集利器:Flume

什麼是flume

flume是apache的一個數據收集框架。定義了一個數據流的模型。下面這張圖hadoop業務開發流程圖可以說明Flume的重要性:

離線日誌收集利器:Flume

Flume是一個分佈式、可靠、和高可用的海量日誌聚合的系統,支持在系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。apache Flume 是一個從可以收集例如日誌,事件等數據資源,並將這些數量龐大的數據從各項數據資源中集中起來存儲的工具/服務,或者數集中機制。其設計的原理也是基於將數據流,如日誌數據從各種網站服務器上彙集起來存儲到HDFS,HBase等集中存儲器中。其結構如下圖所示:

離線日誌收集利器:Flume

Flume架構

Flume以agent為最小的獨立運行單位。一個agent就是一個JVM。單agent由Source、Sink和Channel三大組件構成,agent裡面包含3個核心的組件:source—->channel—–>sink,類似生產者、倉庫、消費者的架構。

離線日誌收集利器:Flume

Flume的一些核心概念:

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

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

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

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

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

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

Flume運行流程:

Flume的數據流由事件(Event)貫穿始終。事件是Flume的基本數據單位,它攜帶日誌數據(字節數組形式)並且攜帶有頭信息,這些Event由Agent外部的Source,比如上圖中的Web Server生成。當Source捕獲事件後會進行特定的格式化,然後Source會把事件推入(單個或多個)Channel中。你可以把Channel看作是一個緩衝區,它將保存事件直到Sink處理完該事件。Sink負責持久化日誌或者把事件推向另一個Source。flume之所以這麼神奇,是源於它自身的一個設計,這個設計就是agent,agent本身是一個Java進程,運行在日誌收集節點。

Flume核心組件介紹

Source:

從數據發生器接收數據,並將接收的數據以Flume的event格式傳遞給一個或者多個通道channal,Flume提供多種數據接收的方式,比如Avro,Thrift,twitter1%等

Channel:

channal是一種短暫的存儲容器,它將從source處接收到的event格式的數據緩存起來,直到它們被sinks消費掉,它在source和sink間起著一共橋樑的作用,channal是一個完整的事務,這一點保證了數據在收發的時候的一致性. 並且它可以和任意數量的source和sink鏈接. 支持的類型有: JDBC channel , File System channel , Memort channel等.

sink:

sink將數據存儲到集中存儲器比如Hbase和HDFS,它從channals消費數據(events)並將其傳遞給目標地. 目標地可能是另一個sink,也可能HDFS,HBase.

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,不需要額外的安裝過程,解壓縮即可用

高可靠性

從單agent來看,Flume使用基於事務的數據傳遞方式來保證事件傳遞的可靠性。Source和Sink被封裝進一個事務。事件被存放在Channel中直到該事件被處理,Channel中的事件才會被移除。這是Flume提供的點到點的可靠機制。

從多級流來看,前一個agent的sink和後一個agent的source同樣有它們的事務來保障數據的可靠性。


分享到:


相關文章: