Storm淺談

一、為什么用Storm

storm是一個分布式開源的實時計算系統。可以用來做實時分析、在線機器學習、etl等。

計算速度快,每個節點每秒能處理百萬個 tuples。并且很穩定,容錯性很好保證數據被處理。并且容易設置和操作。

拓撲結構

Nimbus: 主控節點,用于提交任務,分發任務,集群監控等。利用zk進行master選舉,防止單點故障。

supervisor: 負責接收Nimbus提交的任務,分配對應的worker進程。

在物理機上,圖中的 nimbus和suervisor節點一般會對應機器進行部署。

二、基礎概念

Stream
是strom里的數據流的抽象,是一個沒有邊界的tuple隊列

Tuple
storm里數據流的最小單元

Spout
表示storm里數據處理的源頭

spout示意圖

Bolt
對stream進行加工處理的邏輯單元,也會經過加工之后發射出一些新的stream

bolt處理stream

bolt stream里處理可以有多個


bolt網狀

Topology
spout和bolt組成的一個邏輯網絡會被打包成topology,topology是storm里的一個邏輯抽象,可以認為是一個job,然后提交到storm集群進行處理。

三、storm topology的并行度

在一個 Storm 集群中,Storm 主要通過以下三個部件來運行拓撲:

  1. 工作進程(worker processes)
    worker是一個服務進程,從屬于一個特定的topology,一個topology可以設置多個worker

  2. 執行器(executors)
    executor是worker進程分配的一個線程

  3. 任務(tasks)
    executor 執行的內容就是task,task是實際執行過程中數據處理的最小單元,我們程序寫的spout和bolt都會在集群中運行很多個task。

一個supervisor里可以分批多個work,一個work是一個服務進程,work內會啟用多個executor執行task.


一個storm集群會有一個或者多個worker進程來處理各種topology。但是一個worker進程只會運行特定的topology。

一個或者多個executor運行在一個worker下,然后一個executor下會運行多個task,task運行就是spout或者bolt。

圖中是一個包含有兩個 worker 進程的拓撲。其中,藍色的 BlueSpout 有兩個 executor,每個 executor 中有一個 task,并行度為 2;綠色的 GreenBolt 有兩個 executor,每個 executor 有兩個 task,并行度也為2;而黃色的YellowBolt 有 6 個 executor,每個 executor 中有一個 task,并行度為 6,因此,這個拓撲的總并行度就是 2 + 2 + 6 = 10。具體分配到每個 worker 就有 10 / 2 = 5 個 executor。

四、Ack機制

在數據流處理的過程中,strom 如何得知所有bolt都執行成功了,或者說消息可靠性如何保證?

Bolt是可以多個的,從spout輸送tupe開始,到bolt進行處理,產生加工后的新tuple,依次下傳,每級bolt的tuple會對上一個tupe進行錨定,可以簡單的認為記錄下自己的上級tuple,最后會形成一個tupe邏輯樹。

Storm的消息確認機制極為成功,一般的方案會維護系統里的所有tuple樹,并維護著每個tuple的消費狀態,但是成千上萬個tuple樹的存儲空間也是極為龐大的,并且占用的是內存資源。storm它避免了tuple樹的存儲維護,利用異或算法解決了這個問題,節省了內存資源(最多耗費20字節的內存)。

AckerBolt,一個特殊的bolt,用來確認tuple 樹是否成功執行。在一個新的 tuple 樹生成的時候,spout 為每個 tuple 發送一個用于異或的固有 id,acker 會將這些 id 記錄在它的掛起隊列中。每次 executor ack 一個 tuple 的時候,acker 會接收到一個部分校驗和,這個校驗和是 tuple 自身的 id(將其從掛起隊列中清除)和 executor 發送的每個下游 tuple 的 id(放入掛起隊列中)的異或值。

文字看的比較蛋疼,我們直接看下面的圖,用圖說話

步驟細節
tuple樹生成后,AckerBolt 為其維護著一個ackVal, 初始值是 0

  1. spout 發射消息 T1
  2. spout 發射消息 T2
  3. 調用ack方法,告訴AckerBolt T1,T2發送完成,傳遞參數就是其需要確認的消息異或值 param = T1 ^ T2,然后AckVal=T1^T2 (T1^T2 = 0 ^ T1^T2)
  4. bolt1 發射消息 T3,T4,T5
  5. bolt2 處理完之后,告訴AckerBolt T2 已經處理完畢,傳遞參數 T2,這時更新 AckVal = (T1^T2) ^ T2
  6. Bolt-1 調用 AckerBolt 告訴它 T1已經消費成功并成功發送 T3,T4,T5。傳遞參數 T1^T3^T4^T5,更新 AckVal = (T1^T2) ^ T2^(T1^T3^T4^T5)
  7. Bolt3 調用 AckerBolt 告訴他 T3,T4,T5已經成功消費,傳遞參數 0^T3^T4^T5,更新 AckVal = (T1^T2) ^ T2^(T1^T3^T4^T5)^T3^T4^T5
  8. 計算最終結果 AckVal=0,該tuple樹,消費完畢。

每個節點要ack的時候,傳遞的ackVal就是自己要確認的消息id之間的異或值

五、storm的容錯性

工作進程(worker)死亡時會發生什么?
工作進程死亡的時候,supervisor 會重新啟動這個進程。如果在啟動過程中仍然一直失敗,并且無法向 Nimbus 發送心跳,Nimbus 就會將這個 worker 重新分配到其他機器上去。

supervisor節點故障
一個節點(集群中的工作節點,非 Nimbus 所在服務器)故障時,該節點上所有的任務(tasks)都會超時,然后 Nimbus 在檢測到超時后會將所有的這些任務重新分配到其他機器上去。

Nimbus節點故障:
nimbus節點用來分發任務,監控集群,當nimbus節點故障的時候,supervisor還會繼續執行接收到任務,對正在執行的任務沒有影響,但是接收不到新的任務,另外當supervisor也出現故障,沒有nimbus能夠進行感知


參考文檔
https://www.cnblogs.com/wuxiang/p/5629138.html
http://ifeve.com/storm-understanding-the-parallelism-of-a-storm-topology/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容