Watcher 通知次數(shù)
Watcher 只會通知一次,并且沒有重試機制以及事務回滾章咧。
意味著Watcher 只關(guān)心“通知"這個動作验靡,而不關(guān)心客戶端是否處理成功。
如果想繼續(xù)獲取事件通知耳标,例如節(jié)點變更通知
那么在getData 時需要將watch 參數(shù)設(shè)置為true
Zookeeper 中心化架構(gòu)
同一時刻只有一個節(jié)點可以處理寫操作醇坝,就是Leader。
所以在ZooKeeper集群里麻捻,總有一個Leader被選舉纲仍。
ZooKeeper 節(jié)點類型
Leader - 被選舉出來的節(jié)點,主要處理寫操作贸毕,及同步數(shù)據(jù)到各個子Follower節(jié)點
Follower - 子節(jié)點郑叠,主要提供讀操作,并在Leader掛掉時參與選舉(Election)
Observer - 觀察者節(jié)點, 除了不能參與選舉以外明棍,跟Follower功能一樣乡革,
??主要用于擴展節(jié)點時(新增節(jié)點時會重新選舉,需要使用一段時間)摊腋,提供不間斷的讀操作??沸版。
ZooKeeper 數(shù)據(jù)節(jié)點類型
分 持久化ZNode 和 臨時ZNode 兩大類
每個類型的ZNode 又分順序ZNode 和 非順序ZNode
即系以下四種:
a. 持久化ZNode
b. 持久化順序ZNode
c. 臨時ZNode
d. 臨時順序ZNode
臨時節(jié)點會在session會話斷開時銷毀
zoo.cfg配置
tickTime (默認:2000毫秒)
表示 一個時間單位,即系后續(xù)其他配置項所配置的時間的基數(shù)兴蒸。initLimit(默認:10)
表示一個節(jié)點重新加入到群集后视粮,同步數(shù)據(jù)所花的時間,
該時間的值的計算為initLimit * tickTime, 例如 10*2000 = 20000;syncLimit(默認:5)
表示節(jié)點之間的心跳時間,
該時間的值的計算為 syncLimit * tickTime,例如 5 * 2000=10000;
新增ZooKeeper節(jié)點(不是數(shù)據(jù)ZNode)后的操作
同步數(shù)據(jù)
如果數(shù)據(jù)同步失敗橙凳,則該節(jié)點加入群集失敗蕾殴,不會標記成正常節(jié)點笑撞。
同步數(shù)據(jù)所需要的時間為zoo.cfg配置里的 initLimit * tickTime。重新選舉??(還沒確認這個事實)
重新參與選舉钓觉。
寫入數(shù)據(jù)特性
當發(fā)起寫入數(shù)據(jù)操作時茴肥,Leader會將數(shù)據(jù)同步到一半以上的節(jié)點之后就返回操作結(jié)果。
樂觀鎖性質(zhì)
ZooKeeper的ZNode節(jié)點數(shù)據(jù)都包含一個dataVersion荡灾,這個dataVersion 可以在執(zhí)行setData時指定一個修改前獲取的dataVersion作為version參數(shù),來嘗試是否設(shè)置成功瓤狐,跟數(shù)據(jù)樂觀鎖的概念是一樣的。
Zookeeper 四字命令
通過TCP發(fā)送四個字母的命令到Zookeeper端口可以查看一些相關(guān)信息批幌。
發(fā)送TCP包命令如下:
echo 'conf' | nc localhost 2181
conf
輸出相關(guān)服務配置的詳細信息础锐。
cons
列出所有連接到服務器的客戶端的完全的連接 /會話的詳細信息。包括“接受 / 發(fā)送”的包數(shù)量逼裆、會話 id 郁稍、操作延遲、最后的操作執(zhí)行等等信息胜宇。
dump
列出未經(jīng)處理的會話和臨時節(jié)點耀怜。
envi
輸出關(guān)于服務環(huán)境的詳細信息(區(qū)別于 conf命令)。
reqs
列出未經(jīng)處理的請求
ruok
測試服務是否處于正確狀態(tài)桐愉。如果確實如此财破,那么服務返回“imok ”,否則不做任何相應从诲。
stat
輸出關(guān)于性能和連接的客戶端的列表左痢。
wchs
列出服務器 watch的詳細信息。
wchc
通過 session列出服務器 watch的詳細信息系洛,它的輸出是一個與watch相關(guān)的會話的列表俊性。
wchp
通過路徑列出服務器 watch的詳細信息。它輸出一個與 session相關(guān)的路徑描扯。