Storm1.0.x新功能調(diào)研

原文地址:http://woodding2008.iteye.com/blog/2326677
簡介
storm1.0版本的重要功能都在1.0.0版本中發(fā)布势腮,1.0.1版本中以fixed bug為主,調(diào)研使用1.0.1版本.
storm1.0.0 :http://storm.apache.org/2016/04/12/storm100-released.html

Pacemaker

默認(rèn)情況下使用zookeeper來存儲(chǔ)心跳信息陆错,需要修改配置箩兽。
storm.cluster.state.store "org.apache.storm.pacemaker.pacemaker_state_factory"
參考資料: https://storm.apache.org/releases/1.0.1/Pacemaker.html

官方性能指標(biāo)
1、max 270 supervisor
2、2000-3000 nodes (max:6000nodes)
3棒呛、70% CPU、1G RAM (4core域携、24GRAM)

容錯(cuò)
1簇秒、pacemaker 掛掉:worker繼續(xù)運(yùn)行
2、網(wǎng)絡(luò)分區(qū)(腦裂):與nimbus+pacemaker在同一側(cè)的worker繼續(xù)運(yùn)行秀鞭,另一側(cè)重新分配趋观。

測試Case
1扛禽、直接關(guān)閉Pacemaker,180分鐘后重新啟動(dòng)pacemaker
結(jié)果:任務(wù)繼續(xù)運(yùn)行拆内,期間沒有發(fā)生飄移旋圆,一直嘗試重試。
現(xiàn)場分析:
Nimbus與Worker一直嘗試連接pacemaker麸恍。
重試策略采用:PacemakerClient.StormBoundedExponentialBackoffRetry【有限指數(shù)退避重試策略】

2、將其中一臺(tái)機(jī)器的網(wǎng)卡數(shù)據(jù)攔截(腦裂)搀矫,持續(xù)5-10分鐘

HA Nimbus

HA 機(jī)制
1抹沪、Leader選舉:通過curator提供的分布式鎖來實(shí)現(xiàn),誰獲取鎖誰是Leader瓤球。com.netflix.curator.framework.recipes.locks.InterProcessMutex
2融欧、Topology codes:異步線程(Timer)檢測本地不存在的任務(wù)代碼,通過RPC向當(dāng)前Leader下載任務(wù)代碼卦羡。
3噪馏、Nimbus Leader:StormSubmitter,Supervisor,Non-leader Nimbus and Storm UI 角色通過zookeeper獲取Nimbus Leader地址。
參考資料: https://github.com/apache/storm/pull/61

測試Case
1绿饵、直接停掉Nimbus Leader
結(jié)果:正在運(yùn)行的任務(wù)沒有飄移情況欠肾。

2、啟動(dòng)任務(wù)后拟赊,立刻停掉Nimbus Leader
結(jié)果:任務(wù)啟動(dòng)失敗

3刺桃、storm kill 任務(wù)后,立刻停掉Nimbus Leader
結(jié)果:任務(wù)關(guān)閉失敗吸祟,任務(wù)一直處于KILLED狀態(tài)【僵尸任務(wù)瑟慈,不執(zhí)行】。
重啟全部nimbus任務(wù)停止屋匕。

4葛碧、storm kill 任務(wù)后,過30秒[延遲任務(wù)關(guān)閉時(shí)間过吻,可以配置进泼,建議保持30],立刻停掉Nimbus Leader
結(jié)果:任務(wù)關(guān)閉成功疮装。

5缘琅、關(guān)閉worker所在機(jī)器的supervisor進(jìn)程(默認(rèn)3秒檢測一次worker進(jìn)程)--> Kill -9 $workerPid ---> 關(guān)閉Nimbus Leader --->worker沒有重新啟動(dòng)/飄走-->1分鐘后啟動(dòng)supervisor --->worker飄移走
結(jié)果:worker成功飄移。

Automatic Backpressure

反壓機(jī)制
1廓推、worker executor的接收隊(duì)列大于高水位刷袍,通知反壓線程
2、worker反壓線程通知zookeeper樊展,executor繁忙事件
3呻纹、所有worker監(jiān)聽zookeeper executor繁忙的事件
4堆生、worker spouts降低發(fā)送tuple速度

參考資料: https://github.com/apache/storm/pull/700
https://issues.apache.org/jira/browse/STORM-886

測試Case
1、基數(shù)分鐘雷酪,前8秒淑仆,bolt處理消息邏輯sleep(1ms), spout一直全力發(fā)送數(shù)據(jù)。
backpressure.disruptor.high.watermark 0.9
backpressure.disruptor.low.watermark 0.4
topology.max.spout.pending null
結(jié)果:觸發(fā)高水位哥力,執(zhí)行反壓蔗怠,經(jīng)過幾次反壓,任務(wù)永久組塞吩跋,可以確認(rèn)[bolt消息處理量==spout消息發(fā)送量]

2寞射、bolt的TickTuple TOPOLOGY_TICK_TUPLE_FREQ_SECS設(shè)置為10秒,bolt處理邏輯為Utils.sleep(100ms)锌钮,spout一直全力發(fā)送數(shù)據(jù)桥温。
backpressure.disruptor.high.watermark 0.9
backpressure.disruptor.low.watermark 0.4
topology.max.spout.pending 1000
結(jié)果:觸發(fā)高水位,執(zhí)行反壓梁丘,反復(fù)執(zhí)行反壓侵浸,任務(wù)正常。

Native Streaming Window API

storm 1.0.X支持在窗口里處理一組tuple,窗口需要給定兩個(gè)參數(shù):窗口長度和滑動(dòng)間隔氛谜。窗口計(jì)算的典型例子是可用于計(jì)算過去一小時(shí)最熱門的Twitter話題
storm提供兩種類型的窗口:
Sliding Window:一組Tuple被包含在一個(gè)窗口里掏觉,隨著滑動(dòng)間隔窗口不斷滑動(dòng)。一個(gè)tuple可能屬于多個(gè)窗口混蔼。
Tumbling Window:一組Tuple被包含在單獨(dú)一個(gè)基于時(shí)間或Tuple個(gè)數(shù)的窗口里履腋,任意一個(gè)Tuple僅屬于一個(gè)窗口。
用戶使用窗口計(jì)算時(shí)需要繼承BaseWindowedBolt類惭嚣。
測試case
滑動(dòng)窗口main方法


滑動(dòng)窗口slide類



滑動(dòng)窗口


Dynamic Log Levels

Storm 1.0允許用戶和管理員通過Storm UI和命令行來更改運(yùn)行中的Topology的日志級(jí)別的設(shè)置遵湖。用戶可以指定一個(gè)可選的超時(shí)時(shí)間,超時(shí)時(shí)間過后晚吞,這些更改將被自動(dòng)恢復(fù)延旧。生成的日志文件也可以通過Storm UI和logviewer服務(wù)很容易的被搜索到。
測試Case
1.配置/Storm_home/log4j2/worker.xml槽地,用戶可以自定義Logger迁沫,

<RollingFile name="CUSTOM" immediateFlush="false"  
fileName="${sys:storm.log.dir}/custom.log"  
filePattern="${sys:storm.log.dir}/custom.log.%i.gz">  
 <PatternLayout>  
<pattern>${pattern}</pattern>  
 </PatternLayout>  
</RollingFile>  
<Logger name="custom" level="warn" additivity="false"> /*自定義一個(gè)名為“custom”、warn級(jí)別的Logger捌蚊,輸出日志到custom.log文件中*/  
<AppenderRef ref="CUSTOM"/>  
</Logger>  

2.Topology業(yè)務(wù)類中測試代碼如下:


Logger logger=LoggerFactory.getLogger("custom");  
logger.trace("trace........");  
logger.debug("debug........");  
logger.info("info..........");  
logger.warn("warn..........");  
logger.error("error........");  

3.在Topology UI界面進(jìn)行操作


這里對Log Level作如下說明:
Level
描述

ALL
各級(jí)包括自定義級(jí)別

TRACE
指定細(xì)粒度比DEBUG更低的信息事件

DEBUG
指定細(xì)粒度信息事件是最有用的應(yīng)用程序調(diào)試

INFO
指定能夠突出在粗粒度級(jí)別的應(yīng)用程序運(yùn)行情況的信息的消息

WARN
指定具有潛在危害的情況

ERROR
錯(cuò)誤事件可能仍然允許應(yīng)用程序繼續(xù)運(yùn)行

FATAL
指定非常嚴(yán)重的錯(cuò)誤事件集畅,這可能導(dǎo)致應(yīng)用程序中止

OFF
這是最高等級(jí),為了關(guān)閉日志記錄

它們的級(jí)別關(guān)系是All<Trace<Debug<Info<Warn<Error<Fatal<Off缅糟。

4.測試結(jié)果分析
事例中未使用動(dòng)態(tài)Level時(shí)挺智,custom.log中只打印出warn級(jí)別以上的信息,設(shè)置Level為info窗宦、Timeout為60時(shí)赦颇,打印出info二鳄、warn、error級(jí)別的信息媒怯,60秒后回歸到原始級(jí)別狀態(tài)订讼。
UI界面上的“clear”按鈕則用于清除這個(gè)Logger,不再打印日志信息扇苞。

Tuple Sampling and Debugging
在調(diào)試Topology的過程中欺殿,很多Strom用戶添加了“debug”Bolt或者Trident功能,以記錄流經(jīng)Topology的數(shù)據(jù)信息鳖敷,在生產(chǎn)部署的時(shí)候移除或者禁用它們祈餐。如今Storm UI包含這一功能,可以使你直接通過Storm UI對流經(jīng)Topology或者單個(gè)組件的數(shù)據(jù)進(jìn)行取樣哄陶。被取樣的事件可以通過Storm UI直接觀察到,并被保存到磁盤哺壶。
使用說明
1.由于輕微的性能消耗屋吨,Storm默認(rèn)沒有開啟這項(xiàng)功能,可以在cronf/storm.yaml中進(jìn)行參數(shù)配置山宾。
Parameter
Meaning
When to use

topology.eventlogger.executors: 0
No event logger tasks are created (default).
|If you don’t intend to inspect tuples and don’t want the slight performance hit.

topology.eventlogger.executors: 1
One event logger task for the topology.
If you want to sample a low percentage of tuples from a specific spout or a bolt. This could be the most common use case.

topology.eventlogger.executors: nil
One event logger task per worker.
If you want to sample entire topology (all spouts and bolt) at a very high sampling percentage and the tuple rate is very high.

Distributed Log Search
這是一個(gè)分布式日志搜索功能至扰,用戶通過Storm UI界面可以在指定Topology的所有日志文件中進(jìn)行搜索,包括存檔日志资锰。搜索結(jié)果包含來自所有Supervisor節(jié)點(diǎn)的匹配敢课。
在Storm UI首頁點(diǎn)擊指定的Topology Name后,在頁面上方搜索框中輸入關(guān)鍵詞搜索即可绷杜≈备眩或者點(diǎn)擊首頁右上角的搜索圖標(biāo),輸入Topology ID和關(guān)鍵詞后即可搜索鞭盟。

Dynamic Worker Profiling

Storm 1.0最后一個(gè)改進(jìn)是動(dòng)態(tài)worker剖析圾结。這個(gè)新功能可以讓用戶直接從Storm UI獲取worker剖析數(shù)據(jù),包括:
Heap Dumps
JStack Output
JProfile Recordings
生成的文件齿诉,可以下載筝野,使用各種調(diào)試工具離線分析,storm1.0.x可以通過Storm UI重啟worker。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粤剧,一起剝皮案震驚了整個(gè)濱河市歇竟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抵恋,老刑警劉巖焕议,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異馋记,居然都是意外死亡号坡,警方通過查閱死者的電腦和手機(jī)懊烤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宽堆,“玉大人腌紧,你說我怎么就攤上這事⌒罅ィ” “怎么了壁肋?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長籽慢。 經(jīng)常有香客問我浸遗,道長,這世上最難降的妖魔是什么箱亿? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任跛锌,我火速辦了婚禮,結(jié)果婚禮上届惋,老公的妹妹穿的比我還像新娘髓帽。我一直安慰自己,他們只是感情好脑豹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布郑藏。 她就那樣靜靜地躺著,像睡著了一般瘩欺。 火紅的嫁衣襯著肌膚如雪必盖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天俱饿,我揣著相機(jī)與錄音歌粥,去河邊找鬼。 笑死稍途,一個(gè)胖子當(dāng)著我的面吹牛阁吝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播械拍,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼突勇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坷虑?” 一聲冷哼從身側(cè)響起甲馋,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迄损,沒想到半個(gè)月后定躏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年痊远,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垮抗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碧聪,死狀恐怖冒版,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逞姿,我是刑警寧澤辞嗡,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站滞造,受9級(jí)特大地震影響续室,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谒养,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一挺狰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧买窟,春花似錦她渴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沉唠。三九已至疆虚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間满葛,已是汗流浹背径簿。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘀韧,地道東北人篇亭。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像锄贷,于是被迫代替她去往敵國和親译蒂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 目錄 場景假設(shè) 調(diào)優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機(jī)制 Storm UI...
    mtide閱讀 17,078評論 30 60
  • 這是一個(gè)JStorm使用教程谊却,不包含環(huán)境搭建教程柔昼,直接在公司現(xiàn)有集群上跑任務(wù),關(guān)于JStorm集群環(huán)境搭建炎辨,后續(xù)研...
    Coselding閱讀 6,308評論 1 9
  • Strom集群結(jié)構(gòu)是有一個(gè)主節(jié)點(diǎn)(nimbus)和多個(gè)工作節(jié)點(diǎn)(supervisor)組成的主從結(jié)構(gòu)捕透,主節(jié)點(diǎn)通過配...
    看山遠(yuǎn)兮閱讀 2,840評論 0 7
  • 你要學(xué)會(huì)抽離自己的靈魂 讓他出世遨游自在 我們在紅塵中游走 七情六欲是每一個(gè)人的必修課 你若不能學(xué)會(huì)用出世的靈魂冷...
    尊重是最好的修養(yǎng)閱讀 471評論 0 0
  • “圓太太!我考上啦;⑿弧C肆瘛!…” 方芳發(fā)來的短信里感嘆號(hào)占了全文的三分之二嘉冒,無聲的尖叫仿佛要震碎袁媛的手機(jī)屏幕一樣曹货。她...
    神仙酵母閱讀 571評論 0 1