1. 程式人生 > >19.大資料學習之旅——flume介紹

19.大資料學習之旅——flume介紹

flume介紹

概述
Flume最早是Cloudera提供的日誌收集系統,後貢獻給Apache。所以目前是Apache下的專案,Flume支援在日誌
系統中定製各類資料傳送方,用於收集資料。
Flume是一個高可用的,高可靠的魯棒性(robust 健壯性),分散式的海量日誌採集、聚合和傳輸的系統,
Flume支援在日誌系統中定製各類資料傳送方,用於收集資料(source);同時,Flume提供對資料進行簡單處理,
並寫到各種資料接受方(可定製)的能力(sink)。
當前Flume有兩個版本Flume 0.9X版本的統稱Flume-og,老版本的flume需要引入zookeeper叢集管理,效能
也較低(單執行緒工作)。老版本的flume對於zookeeper依賴過高,此外也會對Zookeeper造成一定
的負載壓力。
Flume1.X版本的統稱Flume-ng。新版本需要引入zookeerper。
由於Flume-ng經過重大重構,與Flume-og有很大不同,使用時請注意區分。

系統需求
jdk1.6以上。推薦1.7或1.8

下載地址
flume.apache.org

flume基本概念
flume總體架構
在這裡插入圖片描述
flume是分散式的日誌收集系統,它將各個伺服器中的資料收集起來並送到指定的地方去,比
如說送到圖中的HDFS,簡單來說flume就是收集日誌的。
event 事件
event的相關概念:flume的核心是把資料從資料來源(source)收集過來,在將收集到的資料送
到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(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來處理,不會出現此日誌丟失或未被處理的情況。

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

上一篇 18.大資料學習之旅——Kafka(Kafka配置)