尚學堂java學習筆記:Storm 系統架構

編程語言 Storm Java Java虛擬機 北京尚學堂Java學院 北京尚學堂Java學院 2017-08-27

1)主節點(Nimbus): 在分佈式系統中,調度服務非常重要,它的設計,會直接關係到系統的運行效率,錯誤恢復(fail over),故障檢測(error detection)和水平擴展(scale)的能力。 集群上任務(task)的調度由一個 Master 節點來負責。這臺機器上運行的 Nimbus 進程負責任務的調度。另外一個進程是 Storm UI,可以界面上查看集群和所有的拓撲的運行狀態。

2)從節點(Supervisor)

Storm 集群上有多個從節點,他們從 Nimbus 上下載拓撲的代碼,然後去真正執行。 Slave 上的 Supervisor 進程是用來監督和管理實際運行業務代碼的進程。在 Storm 0.9 之後,又多了一個進程 Logviewer,可以用 Storm UI 來查看 Slave 節點上的 log 文件。

尚學堂java學習筆記:Storm 系統架構

3)協調服務 Zookeeper:

ZooKeeper 在 Storm 上不是用來做消息傳輸用的,而是用來提供協調服務(coordination service),同時存儲拓撲的狀態和統計數據。

Supervisor,Nimbus 和 worker 都在 ZooKeeper 留下約定好的信息。例如 Supervisor 啟動時,會在 ZooKeeper 上註冊,Nimbus 就可以發現 Supervisor;Supervisor 在 ZooKeeper 上留下心跳信息,Nimbus 通過這些心跳信息來對 Supervisor 進行健康檢測,檢測出壞節點

由於 Storm 組件(component)的狀態信息存儲在 ZooKeeper 上,所以 Storm 組件就可以無狀態,可以 kill -9 來殺死.例如:Supervisors/Nimbus 的重啟不影響正在運行中的拓撲,因為狀態都在 ZooKeeper 上,從 ZooKeeper 上重新加載一下就好了

用來做心跳Worker 通過 ZooKeeper 把孩子 executor 的情況以心跳的形式彙報給 Nimbus Supervisor進程通過 ZK 把自己的狀態也以心跳的形式彙報給 Nimbua

存儲最近任務的錯誤情況(拓撲停止時會刪除)

尚學堂java學習筆記:Storm 系統架構

4)進程 Worker

運行具體處理組件邏輯的進程,一個 Topology 可能會在一個或者多個 worker 裡面 執行,每個 worker 是一個物理 JVM 並且執行整個 Topology 的一部分

例如:對於並行度是 300 的 topology 來說,如果我們使用 50 個工作進程來執行,那麼每個工作進程會處理其中的6個tasks,Storm 會盡量均勻的工作分配給所有的worker。

5)Task

Worker 中的每一個 spout/bolt 的線程稱為一個 task,每一個 spout 和 bolt 會被當作很多 task 在整個集群裡執行,每一個 executor 對應到一個線程,在這個線程上運行多少個 task,Stream Grouping 則是定義怎麼從一堆 task 發射 tuple 到另外一堆 task,可以調用 TopologyBuilder 類的 setSpout 和 setBolt 來設置並行度(也就是有多少個 task)

相關推薦

推薦中...