Apache Storm 官方文檔 —— 容錯性
本文通過問答的形式解釋了 Storm 的容錯性原理。
工作進程(worker)死亡時會發生什麼?
工作進程死亡的時候,supervisor 會重新啟動這個進程。如果在啟動過程中仍然一直失敗,並且無法向 Nimbus 發送心跳,Nimbus 就會將這個 worker 重新分配到其他機器上去。
節點故障時會發生什麼?
一個節點(集群中的工作節點,非 Nimbus 所在服務器)故障時,該節點上所有的任務(tasks)都會超時,然後 Nimbus 在檢測到超時後會將所有的這些任務重新分配到其他機器上去。
Nimbus 或者 Supervisor 的後台進程掛掉時會發生什麼
Nimbus 和 Supervisor 的後台進程本身是設計為快速失敗(無論何時發生了異常情況之後都會啟動自毀操作)和無狀態(所有的狀態由 ZooKeeper 負責管理)的。正如配置 Storm 集群這篇文章中所述,Nimbus 和 Supervisor 的後台進程實際上是在後台監控工具的監控之下運行的。所以,如果 Nimbus 或者 Supervisor 進程掛掉,他們就會靜默地自動重啟。
值得一提的是,Nimbus 和 Supervisor 的故障不會影響任何工作進程。這一點與 Hadoop 形成了鮮明對比,在 Hadoop 中 JobTracker 的故障會導致所有正在運行的 job 運行失敗(Hadoop 2.x 中引入的 Yarn 架構已經提升了 Hadoop 係統的穩定性,目前的架構並不會如這裏所說的那麼不堪——譯者注)。
Nimbus 是係統的單故障點1嗎?
如果你的 Nimbus 節點出現故障無法訪問,集群中的 worker 仍然會繼續保持運行。另外,此時 Supervisor 也仍然會正常工作,在 worker 掛掉時自動重啟掛掉的進程。但是,由於缺少 Nimbus 的協調,worker 就不會在必要的時候重新分配到不同的機器中(看上去好像你丟失了一個 worker)。
所以這個問題的答案是,Nimbus 確實稍微有一點像 SPOF(單故障點,Single Point of Failure)。不過在實際應用中,Nimbus 的故障從來就不是什麼問題。未來的開發計劃中還會考慮讓 Nimbus 具備更好的可用性。
Storm 是如何保障消息的完全處理的?
對於節點故障或者消息丟失的情況,Storm 提供了一套完善的機製保障所有的消息都能夠得到正確處理。消息的可靠性保障一文中解釋了這方麵更多的技術細節。
1單故障點是指在一個係統中的某個在失效或停止運轉後會導致整個係統不能工作的部件,具體概念可以參考維基百科。
最後更新:2017-05-22 14:34:13