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來處理,不會出現此日志丟失或未被處理的情況。

可恢復性

通道可以以內存或文件的方式實現,內存更快,但不可恢復。文件較慢但提供了可恢復性。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM