1. 程式人生 > >Flume的基本概念

Flume的基本概念

Flume 概念

Flume 最早是Cludera提供的日誌收集系統,後貢獻給Apache。所以目前是Apache下的專案,Flume支援在日誌系統中指定各類資料傳送方,用於收集資料。

Flume 是一個高可用的,高可靠的,魯棒性(robust健壯性),分散式的海量日誌採集、聚合和傳輸的系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料(source);同時,Flume提供對資料進行簡單處理,並寫到各種資料接受仿的能力(sink)。

flume是分散式的日誌收集系統,它將各個伺服器中的資料收集起來並送到指定的地方去,比如說送到圖中的HDFS,簡單來說flume就是收集日誌的。

event 事件

event相關概念:flume的核心是把資料從資料來源(source)中收集過來,再將收集到的資料送到指定的目的地(sink)。為了保證傳輸的過程一定成功,在送到目的地之前,會先快取資料(channel),待資料真正到達目的地(sink)後,flume再刪除自己的快取資料。

在整個資料的傳輸的過程中,流動的是event,即事務保證是在event級別進行的。那麼什麼是event呢?—–event將傳輸的資料進行封裝,是flume傳輸資料的基本單位,如果是文字檔案,通常是一行記錄,event也是事務的基本單位。event從source,流向channel,再到sink,本身為一個位元組陣列

,並可攜帶headers(頭資訊)資訊。event代表著一個數據的最小完整單元,從外部資料來源來,向外部的目的地去。

一個完整的event包括:event headers、event body、event資訊(即文字檔案中的單行記錄),如下所以: 

其中event資訊就是flume收集到的日記記錄。

flume的執行機制 

flume執行的核心就是agent,agent本身是一個Java程序。

agent 裡面包含3個核心的元件:source—->channel—–>sink,類似生產者、倉庫、消費者的架構。 

source:source元件是專門用來收集資料的,可以處理各種型別、各種格式的日誌資料,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定義。

channel:source元件把資料收集來以後,臨時存放在channel中,即channel元件在agent中是專門用來存放臨時資料的——對採集到的資料進行簡單的快取,可以存放在memory、jdbc、file等等。

sink:sink元件是用於把資料傳送到目的地的元件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定義。

一個完整的工作流程:source不斷的接收資料,將資料封裝成一個一個的event,然後將event傳送給channel,chanel作為一個緩衝區會臨時存放這些event資料,隨後sink會將channel中的event資料傳送到指定的地方—-例如HDFS等。

注:只有在sink將channel中的資料成功傳送出去之後,channel才會將臨時event資料進行刪除,這種機制保證了資料傳輸的可靠性與安全性。

flume的用法 

flume之所以這麼神奇—-其原因也在於flume可以支援多級flume的agent,即flume可以前後相繼形成多級的複雜流動,例如sink可以將資料寫到下一個agent的source中,這樣的話就可以連成串了,可以整體處理了。

此外,flume還支援扇入(fan-in)、扇出(fan-out)。所謂扇入就是source可以接受多個輸入,所謂扇出就是sink可以將資料輸出多個目的地中。

置多個agent的資料流(多級流動)

資料流合併(扇入流)

在做日誌收集的時候一個常見的場景就是,大量的生產日誌的客戶端傳送資料到少量的附屬於儲存子系統的消費者agent。例如,從數百個web伺服器中收集日誌,它們傳送資料到十幾個負責將資料寫入HDFS叢集的agent。

這個可在Flume中可以實現,需要配置大量第一層的agent,每一個agent都有一個avro sink,讓它們都指向同一個agent的avro source(強調一下,在這樣一個場景下你也可以使用thrift source/sink/client)。在第二層agent上的source將收到的event合併到一個channel中,event被一個sink消費到它的最終的目的地。

資料流複用(扇出流)

Flume支援多路輸出event流到一個或多個目的地。這是靠定義一個多路資料流實現的,它可以實現複製和選擇性路由一個event到一個或者多個channel。

上面的例子展示了agent foo中source扇出資料流到三個不同的channel,這個扇出可以是複製或者多路輸出。在複製資料流的情況下,每一個event被髮送所有的三個channel;在多路輸出的情況下,一個event被髮送到一部分可用的channel中,它們是根據event的屬性和預先配置的值選擇channel的。 這些對映關係應該被填寫在agent的配置檔案中。

Flume的特性

可靠性

事務型的資料傳遞,保證資料的可靠性

一個日誌交給flume來處理,不會出現此日誌丟失或未被處理的情況。

可恢復性

通道可以以記憶體或檔案的方式實現,記憶體更快,但不可恢復。檔案較慢但提供了可恢復性。