flume簡介
flume是一個分布式、可靠、和高可用的海量日志采集、和傳輸的系統,支持子啊日志系統
中定制各類資料發送方,用于收集資料;同時,flume提供對資料進行簡單處理,并寫道各種
資料接收方(比如文本、HDFS、Hbase等)的能力,flume的資料流由事件(Event)貫穿始終,
事件是flume的基本資料單位,它攜帶日志資料(位元組陣列形式)并且攜帶有頭資訊,這些
Event由Agent外部的source生成,當source捕獲事件后會進行特定的格式化,然后,source會把事件推入(單個或多個)channel中,你可以把channel看作是一個緩沖區,它將保存事件直到sink處理完該事件,sink負責持久化日志或者把事件推向另一個source,
flume架構
flume 運行的核心是Agent,flume以agent為最小的獨立運行單位,一個agent就是一個JVM,它是一個完整的資料資料收集工具,含有三個核心組件,分別是:
source、channel、sink,通過這些組件,Event可以從一個地方流向另一個地方,如下圖所示

flume各組件的作用
Client:
Client生產資料,運行在一個獨立的執行緒
Event:
一個資料單元,訊息頭和訊息體組成,(Event可以是日志記錄、avro物件等)
Flow:
event從源點到達目的點的遷移的抽象
Agent:
一個獨立的flume行程,包含組件source、channel、sink,(agent使用JVM運行flume.每臺機器運行一個agent,但是可以在一個agent中包含多個sources和sinks)
Source:
資料收集組件,(source從Client收集資料,傳遞給channel)
Source是資料的收集端,負責將資料捕獲后進行特殊的格式化,將資料封裝到事件(event) 里,然后將事件推入Channel中, Flume提供了很多內置的Source, 支持 Avro, log4j, syslog 和 http post(body為json格式),可以讓應用程式同已有的Source直接打交道,如AvroSource
如果內置的Source無法滿足需要, Flume還支持自定義Source,
Channel:
中轉event的一個臨時存盤,保存由source組件傳遞過來的event,(channel連接source和sink,這個有點像一個佇列),
Channel是連接Source和Sink的組件,大家可以將它看做一個資料的緩沖區(資料佇列),它可以將事件暫存到記憶體中也可以持久化到本地磁盤上, 直到Sink處理完該事件,介紹兩個較為常用的Channel, MemoryChannel和FileChannel,
Sink:
從channel中讀取并移除event,將event傳遞到flowPipline中的下一個agent(如果有的話)(sink從channel收集資料,運行在一個獨立的執行緒),
Sink從Channel中取出事件,然后將資料發到別處,可以向檔案系統、資料庫、 hadoop存資料, 也可以是其他agent的Source,在日志資料較少時,可以將資料存盤在檔案系統中,并且設定一定的時間間隔保存資料,
Flume資料流
Flume 的核心是把資料從資料源收集過來,再送到目的地,為了保證輸送一定成功,在送到目的地之前,會先快取資料,待資料真正到達目的地后,洗掉自己快取的資料
Flume 傳輸的資料的基本單位是 Event,如果是文本檔案,通常是一行記錄,這也是事務的基本單位, Event 從 Source,流向 Channel,再到 Sink,本身為一個 byte 陣列,并可攜帶 headers 資訊, Event 代表著一個資料流的最小完整單元,從外部資料源來,向外部的目的地去,
值得注意的是,Flume提供了大量內置的Source、Channel和Sink型別,不同型別的Source,Channel和Sink可以自由組合,組合方式基于用戶設定的組態檔,非常靈活,
比如:Channel可以把事件暫存在記憶體里,也可以持久化到本地硬碟上,Sink可以把日志寫入HDFS, HBase,甚至是另外一個Source等等,Flume支持用戶建立多級流,
也就是說,多個agent可以協同作業,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/281584.html
標籤:大數據
上一篇:insert into select關于插入資料的問題
下一篇:Flume
