zookeeper的原始碼分析

2021-08-19 13:54:24 字數 1181 閱讀 8593

閱讀本文可以帶著下面問題:

1.zookeeper客戶端有幾部分組成?

2.那個模組管理所有網路

io的模組?

3.watcher是否允許多個

client

對乙個或多個

znode

進行監控?

4.zookeeper例項被建立時,會隨之建立幾個執行緒,各自是什麼?

5.真正處理網路

io的是那個執行緒?

模組:

我們可以認為zk的client由三個主要模組組成:zookeeper, watchermanager, clientcnxn

zookeeper是zk client端的真正介面,使用者可以操作的最主要的類,當使用者建立乙個zookeeper例項以後,幾乎所有的操作都被這個例項包辦了,使用者不用關心怎麼連線到server,watcher什麼時候被觸發等等令人傷神的問題。

watchermanager,顧名思義,它是用來管理watcher的,watcher是zk的一大特色功能,允許多個client對乙個或多個znode進行監控,當znode有變化時能夠通知到監控這個znode的各個client。watchermanager就管理了zk client繫結的所有watcher。

clientcnxn是管理所有網路io的模組,所有和zk server互動的資訊和資料都經過這個模組,包括給zk server傳送request,從zk server接受response,以及從zk server接受watcher event。clientcnxn完全管理了網路,從外部看來網路操作是透明的。

執行緒:

每當我們建立乙個zookeeper例項的時候,會有兩個執行緒被建立:sendthread和eventthread。所以當我們使用zk client端的時候應該盡量只建立乙個zookeeper例項並反覆使用。大量的建立銷毀zookeeper例項不僅會反覆的建立和銷毀執行緒,而且會在server端建立大量的session。

sendthread是真正處理網路io的執行緒

ZooKeeper原始碼分析

業餘時間學習了一下zookeeper distributed process coordination這本書的內容,對zookeeper實現的細節很好奇,所以順便把zookeeper原始碼看了一遍。看完之後想寫點內容做個筆記,確發現不好開始。由於zookeeper乙個完整的邏輯的 可能在多個執行緒,...

Zookeeper 原始碼分析 啟動

本文主要介紹了zookeeper啟動的過程 執行zkserver.sh start命令可以啟動zookeeper。入口的main函式在類中quorumpeermain。main函式主要呼叫了runfromconfig函式,建立了 quorumpeer物件,並且呼叫了start函式,從而啟動了zook...

zookeeper領導者選舉原始碼分析

基於版本3.4.13 quorumcnxmanager主要負責和其他節點資料傳輸 sendqueue 選票傳送佇列,用於儲存待傳送的選票。recvqueue 選票接收佇列,用於儲存接收到的外部投票。workerreceiver 選票接收器。其會不斷地從quorumcnxmanager中獲取其他伺服器...