日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用

發(fā)布時間:2025/4/16 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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ù)的過程如下:

  • 客戶但提交提交一個Jar到Nimbus
  • Nimbus掃描Zookeeper上的/supervisor節(jié)點(diǎn),獲取本集群中所有的資源信息。
  • Nimbus掃描Zookeeper上的/assignments節(jié)點(diǎn),來獲取分配的任務(wù)的資源占用情況。
  • Nimbus根據(jù)平衡算法,將Task分配到每一個機(jī)器上,同時確定Task綁定的端口和資源調(diào)度情況(CPU Slot、Memory Slot、Disk Slot)
  • 完成分配任務(wù)之后,Nimbus會將任務(wù)的分配結(jié)果寫入Zookeeper的/assignmetns節(jié)點(diǎn)中
  • Nimbus還需要設(shè)置Topology的狀態(tài)為Active,做法就是在Zookeeper上的/topology節(jié)點(diǎn)下找到以該Topology的topology-id命名的對應(yīng)子節(jié)點(diǎn),并將其設(shè)置為Active
  • 重新分配任務(wù)。每個Supervisor都會監(jiān)聽/Zookeeper上的/assignmetns節(jié)點(diǎn)。當(dāng)檢測到節(jié)點(diǎn)發(fā)生變更時,就會立即獲得本機(jī)的任務(wù)配置,然后啟動或者殺死對應(yīng)的Worker。
  • 2.2 同步Topology狀態(tài)

    JStorm提供了一系列的命令來控制Storm的服務(wù),這里以客戶端的deactivate命令為例來說明JStorm是如何借助Zookeeper來同步Topology狀態(tài)的。

  • 客戶端發(fā)出deactive命令
  • Nimbus收到這個命令之后,會設(shè)置Zookeeper中的/StomrBase節(jié)點(diǎn)對應(yīng)的Topology狀態(tài)為deactive
  • 同時Worker進(jìn)程會對Zookeeper中的/StormBase節(jié)點(diǎn)進(jìn)行注冊監(jiān)聽,當(dāng)節(jié)點(diǎn)發(fā)生變化之后,立即設(shè)置Worker的狀態(tài)為deactive
  • Worker內(nèi)部的Task每執(zhí)行一個batch操作后,就會檢查Worker狀態(tài),如果狀態(tài)變更為deactive,那么Task就會立即將自己設(shè)置為掛起狀態(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線程,用于:

  • 反復(fù)掃描/nimbus_master是否存在
  • 如果/nimbus_master節(jié)點(diǎn)存在,則同步/nimbus_master的Topology到本機(jī)中
  • 如果/nimbus_master節(jié)點(diǎn)消失,則會觸發(fā)調(diào)度器的重新選舉。
  • 3. Zookeeper使用優(yōu)化

    3.1 減少Zookeeper的全量掃描

    3.2 減少無用的Watcher操作

    3.3 延長心跳設(shè)置

    總結(jié)

    以上是生活随笔為你收集整理的Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。