Flume學習系列(三)---- Channel Selector與Sink Processors

前言: 繼上一篇從source到channel到sink實現了一整套的流程之后颂跨,我們這次學習一下Channel Selector與Sink Processors恒削。我個人為了方便理解把這兩個組件想象成在Source和Channel之間以及Channel和Sink之間蔓同。(注:這兩個組件不是必須要設置的蹲诀。)

一弃揽、Channel Selector

????flume channel selectors允許給一個source可以配置多個channel的能力则北。這種模式有兩種方式尚揣,一種是用來復制(Replication)掖举,這也是默認配置,另一種是用來分流(Multiplexing)方篮。

????1) Replication方式:可以將數據源復制多份励负,分別傳遞到多個channel中,每個channel接收到的數據都是相同的巾表。如下圖所示:

001.png

這種方式的配置主要有兩個key:


table1.png
a1.sources = r1
a1.channels = c1 c2 c3
a1.sources.r1.selector.type = replicating
a1.sources.r1.channels = c1 c2 c3
#這意味著c3是可選的集币,向c3寫入失敗會被忽略惠猿。但是向c1负间,c2寫入失敗會出錯
a1.sources.r1.selector.optional = c3

????2)Multiplexing方式:selector可以根據header的值來確定數據傳遞到哪一個channel,其中header的值可以通過interceptor去設置趾访。如果現在不明白interceptor沒關系董虱,就把它當作能在header中添加一個key-value對的玩意就可以愤诱。

table2.png

002.jpg

????假設我們通過攔截器向header中添加了key為state的一個屬性淫半,他的值根據具體需求可以為CZ和US等。那我們想把值為CZ的數據流通過c1處理科吭,把值為US的數據流通過c2,c3處理猴鲫,其他情況用c4處理拂共。則flume.conf 配置如下:

a1.sources = r1
a1.channels = c1 c2 c3 c4
#設置selector類型
a1.sources.r1.selector.type = multiplexing
#設置根據header中的什么key去分流
a1.sources.r1.selector.header = state
#設置根據key的具體值選擇哪個channel
a1.sources.r1.selector.mapping.CZ = c1
a1.sources.r1.selector.mapping.US = c2 c3
#設置默認channel
a1.sources.r1.selector.default = c4

二宜狐、Sink Processors

????Sink Processors蛇捌,顧名思義,就是沉槽處理器柑爸,也就是數據向哪里流盒音,怎么流由處理器控制。以sinkgroup的形式出現譬圣。簡單的說就是一個source 對應一個Sinkgroups雄坪,即多個sink, 其實與selector情況差不多,只是processor考慮更多的是可靠性和性能绳姨,即故障轉移與負載均衡的設置阔挠。
????SinkGroup允許組織多個sink到一個實體上。SinkProcessors 能夠提供在組內所有sink之間實現負載均衡的能力(配置load_balance)跪削。而且在失敗的情況下能夠進行故障轉移碾盐,從一個Sink到另一個Sink(配置failover )揩局。

table3.png
#設置組名
a1.sinkgroups = g1
#設置組內的sink
a1.sinkgroups.g1.sinks = k1 k2
#設置processor的類別,這里是負載均衡
a1.sinkgroups.g1.processor.type = load_balance

2.1 負載均衡(load_balance)

????過程:source里的event流經channel孕豹,進入sink組励背,在sink組內部根據負載算法(我們在配置文件中配的round_robin砸西、random)選擇sink,后續(xù)可以選擇不同機器上的agent實現負載均衡衅疙。
借圖:https://blog.csdn.net/silentwolfyh/article/details/51165804

003.jpg

配置如下:

# Name the components on this agent
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1

# Describe/configure the source
#exec源從執(zhí)行Unix命令的標準輸出獲取數據
a1.sources.r1.type = exec
a1.sources.r1.channels=c1
#要執(zhí)行的Unix命令是tail饱溢,tail命令默認在屏幕上顯示指定文件的末尾10行
a1.sources.r1.command=tail -F /home/flume/xx.log 

#define sinkgroups
#這里定義的就是Processor
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
#類型為負載均衡
a1.sinkgroups.g1.processor.type=load_balance
#是否指數增長超時恢復時間
a1.sinkgroups.g1.processor.backoff=true
#選擇下一個sink的算法
a1.sinkgroups.g1.processor.selector=round_robin

#define the sink 1
a1.sinks.k1.type=avro
a1.sinks.k1.hostname=192.168.1.112
a1.sinks.k1.port=9876  

#define the sink 2
a1.sinks.k2.type=avro
a1.sinks.k2.hostname=192.168.1.113
a1.sinks.k2.port=9876


# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
a1.sinks.k2.channel=c1

2.2 故障轉移(Failover)

????配置一組sink绩郎,這組sink組成一個Failover Sink Processor翁逞,當有一個sink處理失敗,Flume將這個sink放到一個地方状植,等待冷卻時間怨喘,可以正常處理event時再拿回來。

????event通過一個channel流向一個sink組洼畅,在sink組內部根據優(yōu)先級選擇具體的sink棚赔,一個失敗后再轉向另一個sink,流程圖如下:


004.jpg

相應配置如下:

# Name the components on this agent
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.channels=c1
a1.sources.r1.command=tail -F /home/flume/xx.log

#define sinkgroups
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=failover
#在Sink中的兩個數據為優(yōu)先級設置默認為5丧肴,數字越大越優(yōu)先
a1.sinkgroups.g1.processor.priority.k1=10
a1.sinkgroups.g1.processor.priority.k2=5
a1.sinkgroups.g1.processor.maxpenalty=10000

#define the sink 1
a1.sinks.k1.type=avro
a1.sinks.k1.hostname=192.168.1.112
a1.sinks.k1.port=9876

#define the sink 2
a1.sinks.k2.type=avro
a1.sinks.k2.hostname=192.168.1.113
a1.sinks.k2.port=9876


# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
a1.sinks.k2.channel=c1

三芋浮、總結

channel selector和sink processor都不是必須配置的纸巷,他們有自己的默認值。channel selector注重處理數據的流向瘤旨,sink processor注重處理可靠性和性能。


005.jpg

參考資料:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祟偷,隨后出現的幾起案子,更是在濱河造成了極大的恐慌贺辰,老刑警劉巖嵌施,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異滓侍,居然都是意外死亡牲芋,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門夕冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歹鱼,“玉大人卜高,你說我怎么就攤上這事〔籼危” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵秧廉,是天一觀的道長疼电。 經常有香客問我,道長蔽豺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮濒析,結果婚禮上啥纸,老公的妹妹穿的比我還像新娘。我一直安慰自己斯棒,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布庭惜。 她就那樣靜靜地躺著护赊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骏啰。 梳的紋絲不亂的頭發(fā)上抽高,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天翘骂,我揣著相機與錄音,去河邊找鬼碳竟。 笑死,一個胖子當著我的面吹牛方仿,可吹牛的內容都是我干的。 我是一名探鬼主播仙蚜,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼委粉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贾节?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤知牌,失蹤者是張志新(化名)和其女友劉穎角寸,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體扁藕,經...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡亿柑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年棍弄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片式矫。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡役耕,死狀恐怖,靈堂內的尸體忽然破棺而出故慈,到底是詐尸還是另有隱情框全,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布拆撼,位于F島的核電站容劳,受9級特大地震影響竭贩,放射性物質發(fā)生泄漏莺禁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一楼熄、第九天 我趴在偏房一處隱蔽的房頂上張望浩峡。 院中可真熱鬧,春花似錦红符、人聲如沸伐债。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虹蒋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峭竣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工皆撩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哲银,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓滥比,卻偏偏與公主長得像做院,于是被迫代替她去往敵國和親濒持。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容

  • title: Flume構建日志采集系統(tǒng)date: 2018-02-03 19:45tags: [flume,k...
    溯水心生閱讀 16,127評論 3 25
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現玛迄,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Flume架構與實踐 Flume是一款在線數據采集的系統(tǒng)虏杰,典型的應用場景是作為數據的總線勒虾,在線的進行日志的采集、分...
    mike_zhangliang閱讀 2,090評論 0 2
  • 博客原文 翻譯作品笛钝,水平有限,如有錯誤玻靡,煩請留言指正中贝。原文請見 官網英文文檔 引言 概述 Apache Flume...
    rabbitGYK閱讀 11,455評論 13 34
  • 潛意識打敗意識
    虧錢閱讀 67評論 0 0