1. Flume 簡介
Flume 是一個分布式的海量日志采集暖释,聚合,轉(zhuǎn)移工具墨吓。
大數(shù)據(jù)常用數(shù)據(jù)處理框架
graph LR
實時流數(shù)據(jù)采集--> flume,kafka
實時流數(shù)據(jù)處理--> spark,storm
實時數(shù)據(jù)查詢處理--> impala
批數(shù)據(jù)導(dǎo)入導(dǎo)出-->Sqoop
批數(shù)據(jù)查詢處理--> hive
這里只是給flume一個定位球匕,清楚flume適合做哪方面的數(shù)據(jù)處理。
即:flume是基于數(shù)據(jù)流的組件來實現(xiàn)分布式的數(shù)據(jù)采集
flume使用簡單帖烘,僅需寫一個配置文件亮曹,即可完成一個分布式,高可用秘症,可靠的實時數(shù)據(jù)流采集任務(wù)照卦。
2.數(shù)據(jù)流模型
Data Flow Model
重要概念:
- event:被定義為flume數(shù)據(jù)傳輸?shù)幕締卧邢㈩^和消息體組成乡摹。
- flow:指數(shù)據(jù)從源頭到目的地的數(shù)據(jù)遷移過程役耕。
- Agent:一個獨立的Flume進(jìn)程,包含組件Source,Channel,Sink.(Agent使用JVM運行flume,每臺機(jī)器運行一個agent,但可以在一個agent中包含多個sources和sinks)
- Source:數(shù)據(jù)搜集組件聪廉。(source從client收集數(shù)據(jù)瞬痘,傳遞給Channel)
- Channel:連接source和Sink,類似一個隊列
- Sink:從Channel 中讀取并移除event,將數(shù)據(jù)寫到下一個目標(biāo)源,可以是下一個source板熊,也可以是HDFS框全。
Flume運行的核心是Agent.Flume以agent為最小的獨立運行單位。一個agent包含三個核心組件干签,source,channel,sink.
2.1 Source
- Source 負(fù)責(zé)數(shù)據(jù)的收集津辩,將數(shù)據(jù)捕捉后進(jìn)行處理,封裝成event,傳遞給Channel筒严。Flume提供了很多內(nèi)置的source,支持Avro,log4j,syslog和http post,還支持自定義Source丹泉。
這里主要看下Avro,Spooling,Netcat,kafka
Source類型 | 說明 |
---|---|
Avro | 支持avro 協(xié)議 |
Spooling | 監(jiān)聽本地文件夾鸭蛙,把新增的文件采集到flume |
netcat | 從網(wǎng)絡(luò)端口接受文本數(shù)據(jù)(多用于測試調(diào)試) |
kafka | 用于從kafka中讀取數(shù)據(jù) |
2.2 Channel
- Channel 是連接Source和Sink的組件摹恨,可以看做是一個數(shù)據(jù)的緩沖區(qū),可以將數(shù)據(jù)暫存到內(nèi)存中也可以持久化到本地磁盤上娶视,直到Sink處理完該事件晒哄。比較常用的是Memory和File 兩種類型的Channel.
Channel類型 | 說明 |
---|---|
Memory | Event 數(shù)據(jù)存儲在內(nèi)存中 |
File | Event數(shù)據(jù)存儲在磁盤文件中 |
2.3 Sink
- Sink從Channel中取出event,然后將數(shù)據(jù)發(fā)送到別處,可以是另一個agent的Source肪获,或HDFS寝凌。
Sink 類型 | 說明 |
---|---|
logger | 把數(shù)據(jù)輸出成logger日志(測試調(diào)試) |
hdfs | 把數(shù)據(jù)寫入hdfs |
avro | 發(fā)送到此接收器的flume event將轉(zhuǎn)化為avro event 并發(fā)送至配置的主機(jī)名:端口號 |
kafka | 將數(shù)據(jù)發(fā)送至kafka |