javascript
Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用
Storm 是Twitter開源的一個高容錯的分布式實時計算系統,而JStorm是阿里巴巴集團中間件團隊在Storm基礎上改造和優化的一個分布式實時計算引擎,它使用Java語言開發。
JStorm是一個類似與Hadoop MapReduce的分布式計算系統,用戶按照指定的接口編寫一個任務程序,然后將這個任務程序提交給Jstorm系統,Jstorm系統會復雜7*24小時運行并調度該任務。在運行過程中如果某個任務執行器發生意外其他故障,調度器會立即分配一個新的Worker替換這個失效的Worker來繼續執行任務。
JStorm 整體架構圖:
其核心部分由Nimbus、Supervisor、Worker、Task和Zookeeper五部分組成
- Nimbus:是任務的中央調度器
- Supervisor:做為Worker的代理角色,負責管理Worker的生命周期。
- Worker: 是Task的容器
- Task:對應每一個任務的真正執行體
- Zookeeper:是整個系統的協調者
無論Storm還是JStorm,都高度依賴Zookeeper來實現諸如同步心跳。
1. 同步心跳
在JStorm中,需要集群內部實時同步三種心態;
Worker向Supervisor匯報心跳
Supervisor向Nimbus匯報心跳
Task向Nimbus匯報心跳
其中后面兩種心跳檢測機制通過Zookeeper來實現。
在JStorm實現中,Supervisor每隔10s就將字節擁有的資源數量同步到Zookeeper的/supervisor節點上,Nimbus就可以通過這些節點來檢查由哪些集群式或者的。
而每個Task每隔10s就會將自己的心跳和運行狀態同步到Zookeeper的/tasks節點上,這樣Nimbus就能夠檢查到哪些task是活著的。同時一旦檢查到某個Task的心跳超時,則會觸發Nimbus對該Task執行Rassign動作(重新分配任務)。
2. 同步任務配置
JStorm來負責運行并調度該任務,因此同步任務配置是JStorm的一大核心功能。整個同步任務配置過程大體上可以分為提交任務和同步Topology狀態兩大環節。
2.1 提交任務
提交任務的過程如下:
2.2 同步Topology狀態
JStorm提供了一系列的命令來控制Storm的服務,這里以客戶端的deactivate命令為例來說明JStorm是如何借助Zookeeper來同步Topology狀態的。
2.3 調度器選舉
JStorm增加了調度器的HA機制,用于實現調度器的動態選舉。每個Nimbus在啟動的時候,都會試圖到Zookeeper上創建一個臨時節點/nimbus_master。在創建這個過程中,如果發現該節點以及存在,則表示Nimbus的Master已經存在,那么當前Nimbus就會在Zookeeper的/nimbus_slave節點下創建一個臨時子節點,并將自己的機器名和端口號寫入到該節點中,同時注冊對/nimbus_master的監聽。
在運行過程過程中,該Nimbus(這里指的是創建/nimbus_slave節點對應的機器)還會啟動一個Follower線程,用于:
3. Zookeeper使用優化
3.1 減少Zookeeper的全量掃描
3.2 減少無用的Watcher操作
3.3 延長心跳設置
總結
以上是生活随笔為你收集整理的Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [OSDI 12] PoweGraph:
- 下一篇: Hadoop详解(一):Hadoop简介