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