原始碼分析,最關鍵的是要找到乙個入口,對於zk的leader選舉,並不是由客戶端來觸發,而是在啟動的時候會觸發一次選舉。因此我們可以直接去看啟動指令碼zkserver.sh中的執行命令
zoomain就是quorumpeermain。那麼我們基於這個入口來看
quorumpeermain.main方法
main方法中,呼叫了initializeandrun進行初始化並且執行
protected void initializeandrun(string args) throws configexception, ioexception
// 這裡啟動了乙個執行緒,來定時對日誌進行清理,從命名來看也很容易理解
datadircleanupmanager purgemgr = new datadircleanupmanager(config.getdatadir(), config.getdatalogdir(), config.getsnapretaincount(), config.getpurgeinterval());
purgemgr.start();
// 如果是集群模式,會呼叫runfromconfig.servers實際就是我們在zoo.cfg裡面配置的集群節點
if (args.length == 1 && config.servers.size() > 0) else
}
副本的leader選舉
kafka提供了資料複製演算法保證,如果leader副本所在的broker節點宕機或者出現故障,或者分割槽的leader節點發生故障,這個時候怎麼處理呢?那麼,kafka必須要保證從follower副本中選擇乙個新的leader副本。那麼kafka是如何實現選舉的呢?要了解leader選舉,我們需要...
副本的leader選舉
kafka提供了資料複製演算法保證,如果leader副本所在的broker節點宕機或者出現故障,或者分割槽的leader節點發生故障,這個時候怎麼處理呢?那麼,kafka必須要保證從follower副本中選擇乙個新的leader副本。那麼kafka是如何實現選舉的呢?要了解leader選舉,我們需要...
zookeeper的leader選舉機制
三個核心選舉原則 1.zookeeper集群中只有超過了半數以上的伺服器啟動,此集群才能正常工作 2.在集群正常工作之前,myid小的伺服器會給myid大的伺服器投票,這種投票會一直持續到集群開始正常工作,即,選出了leader。3.選出leader之後,之前的伺服器們的狀態要由looking轉為f...