storm容錯機制(翻譯官網文檔)

  • 爲什麼要用storm?

storm 是一個免費的開源的分佈式實時計算系統。storm使得處理無邊的數據流變得簡單,就像hadoop做批處理那樣執行實時處理。storm簡單,可以被用在各種編程語言,並且用起來充滿了樂趣!

storm有很多使用場景:實時分析,在線機器學習,持續計算,分佈式RPC(remote procedure call protocol遠程過程調用),ETL(extract-transform-load數據從來源經過抽取,轉換,加載到目的端的過程,數據倉庫技術),等等。storm很快:一個benchmark 每個節點每秒一百萬數據。storm可兼容,容錯,保證所有數據都將被處理,並且搭建和操作簡單。

storm可以和你正在使用的隊列和數據庫技術整合。一個storm topology以任意複雜方式處理和計算數據流,如果有需要可以在階段之間將數據流進行再劃分。

  • fault tolerant

storm是可容錯的:當workers死掉時,storm會自動重啓他們,如果一個節點死掉,該節點上的worker會在另一個節點重啓。

storm daemons守護進程,nimbus和supervisor都是無狀態的並且fail-fast故障快速恢復的。如果他們死掉,他們會立刻重啓,就當什麼都沒有發生過,這意味着你可以殺掉storm的守護進程而不影響到整你集羣的健康或者你的拓撲。

幾問:

當一個worker死掉怎麼辦?

當一個線程掛掉了,supervisor會重啓它,如果它重啓的時候一直掛,並且不能發送heartbeat給nimbus,nimbus會重新分配worker到其他機器上去。

當一個節點死掉怎麼辦?

分配到該節點上的任務會超時,並且nimbus會重新分配這些任務到其他機器上去。

當nimbus或者supervisor守護進程死掉怎麼辦?

nimbus和supervisor守護進程是故障快速修復的,(遇到任何意外情況,進程自建process self-destructs)並且無狀態(所有狀態都保存在zookeeper或者disk硬盤上)nimbus和supervisor必須在守護進程工具或者監視器的監視下運行。因此如果nimbus或者supervisor守護進程掛掉了,他們會重啓就當什麼都沒發生過。

最值得注意的是,沒有worker進程會受到nimbus和supervisor掛掉的影響,這和hadoop相反,hadoop中jobtracker掛掉的話,所有運行的job都沒了。

nimbus是一個單點故障single point of failure嗎?

 如果你丟失了nimbus節點,worker任然會繼續工作,除此之外,workers掛掉supervisor會繼續重啓workers。然而,沒有nimbus,workers在必要情況下不會被重新分配到其他機器上去(比如你的worker machine丟失了)。

storm如何保證數據處理?

storm提供機制保證即使節點掛掉或者消息丟失的情況下的數據處理。