前言:??本文是flume學(xué)習(xí)系列的開篇抖苦,主要介紹了flume的各種組件及相關(guān)配置。但是本篇文章并不打算從環(huán)境搭建開始炎咖,因為比較簡單而且網(wǎng)上資料也很詳盡:
????So,研讀了一下官方文檔练对,特此把Flume的一些重要知識點總結(jié)一下。能力有限税灌,如有錯誤均函,提前感謝各位大佬提出。
我還是前言:我不是人造革菱涤,是真皮边酒。開車之前我們起碼要知道Flume是個什么鬼吧?Flume是一個高可用的狸窘,高可靠的墩朦,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)翻擒,F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方氓涣,用于收集數(shù)據(jù);同時陋气,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理劳吠,并寫到各種數(shù)據(jù)接受方(可定制)的能力。好巩趁,開始飆車痒玩。
一、Architecture
????首先议慰,介紹一下蠢古。。别凹。wait草讶,wait,
????分析一下這個圖堕战,箭頭的指向代表數(shù)據(jù)的流向。數(shù)據(jù)從Web 服務(wù)器 --> Source --> Channel-->Sink-->HDFS拍霜。我們需要關(guān)注的是中間被矩形框起來的部分(Agent)嘱丢,它就是Flume的核心。從名字上我們就能直觀的想到祠饺,Source(源)是用來收集數(shù)據(jù)的越驻,Channel(管道)是用來傳輸數(shù)據(jù)的,Sink(沉槽)是用來存儲數(shù)據(jù)的。
????很簡單伐谈,F(xiàn)lume以Agent為最小的獨立運行單位烂完。一個Agent就是一個JVM進程。單Agent由Source诵棵、Sink和Channel三大組件構(gòu)成抠蚣。上面這種單Agent結(jié)構(gòu)已經(jīng)可以完成很多任務(wù)了,但是履澳,實際中有各種花式需求嘶窄。
????比如:一個電商公司,每天產(chǎn)生很多的交易記錄距贷,這些記錄需要被存儲柄冲,同時公司也可能會對這些記錄進行分析,給用戶實時推薦忠蝗,那就需要把這些產(chǎn)生的數(shù)據(jù)流向不同的目的地现横。這要怎么辦呢?
????不慌阁最,大牛早就想到這些情況了戒祠,F(xiàn)lume中有multi-hop(多跳)、Consolidation(合并)速种、Multiplexing the flow(多路數(shù)據(jù)流)來解決各種花式問題姜盈。
????我認為,multi-hop(多跳)一般用來做緩沖配阵,防止源產(chǎn)生數(shù)據(jù)太快處理不過來馏颂,
????Consolidation(合并)用來把多個源合并到一個目的地。
????Multiplexing the flow(多路數(shù)據(jù)流)用來把單個源分發(fā)給多個目的地棋傍。
二救拉、Configuration
這部分就是如何去使用flume了,flume的配置文件在安裝目錄下的conf/flume.conf舍沙。注意:安裝完flume后近上,這個文件是.template后綴的。我們需要把它拷貝一份拂铡。下面我們通過一個小案例簡單介紹一下flume的配置。netcat通過localhost的44444端口給source發(fā)消息葱绒,最終以日志的形式打印出來感帅。
# Name the components on this agent
# a1是agent名,r1,k1,c1是a1的三個組件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
#設(shè)置source的一些屬性地淀,這些屬性的key可以從User Guide中查到失球,value是flume已經(jīng)為我們寫好的一些常用source。
#后面我們可以自定義source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
#設(shè)置sink的一些屬性
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
#設(shè)置channel的一些屬性
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
#把source和sink通過channel鏈接起來
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
????這就完成了一個最基本的flume配置。然后就是啟動flume实苞。
$ bin/flume-ng agent --conf ../conf --conf-file ../conf/flume.conf --name a1 -Dflume.root.logger=DEBUG,console
????這里有幾個參數(shù)豺撑,--conf后面跟配置文件目錄黔牵,--conf-file后面跟配置文件, --name后面跟要啟動的Agent猾浦。 -D后面跟一些其他的啟動參數(shù),比如日志相關(guān)的金赦。
三音瓷、Source,Channel夹抗,Sink
下面這個表格是Flume為我們提供的現(xiàn)成的Source,Channel偷线,Sink。已經(jīng)可以滿足很多需求了沽甥,如果我們想根據(jù)自己的業(yè)務(wù)需求去定制声邦,可以模仿這些現(xiàn)成的類去寫,準備后面的文章去動手實現(xiàn)一下摆舟。
More important,官方文檔十分詳細:準備好起飛了么媳瞪?
官網(wǎng)中的User Guide對這些組件的各種配置描述的十分詳細照宝,炒雞友好。舉個栗子:比較常用的HTTP Source厕鹃,(通過HTTP get或post請求接收事件)文檔中是這樣的:
相應(yīng)的 Channel剂碴、Sink也都一樣。如果需要查詢?nèi)绾闻渲靡涿苯尤ス倬W(wǎng)看。
四洽议、總結(jié)
????我覺得理解和使用flume并不難,但是要實現(xiàn)一些自定義的功能亚兄,就需要研讀一下flume的源碼,然后進行模仿荚坞。還有就是沒有一整套的處理流程去學(xué)習(xí)(從收集數(shù)據(jù)到傳遞到沉槽)菲盾。所以后面決定寫一些Demo,以便于更好的掌握flume懒鉴。