一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java Zookeeper簡述

java Zookeeper簡述

2021-12-21 13:14flystar27 Java教程

ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。下面通過本文給大家分享java 中 zookeeper簡單使用,需要的朋友參考下吧

Zookeeper 是一個分布式協調服務,可用于服務發現,分布式鎖,分布式領導選舉,配置管理等。Zookeeper 提供了一個類似于 Linux 文件系統的樹形結構(可認為是輕量級的內存文件系統,但只適合存少量信息,完全不適合存儲大量文件或者大文件),同時提供了對于每個節點的監控通知機制。

 

Zookeeper 角色

Zookeeper 集群是一個基于主從復制的高可用集群,每個服務器承擔如下三種角色中的一種

Leader

1.一個 Zookeeper 集群同一時間只會有一個實際工作的 Leader,它會發起并維護與各 Follwer及 Observer 間的心跳。

2.所有的寫操作必須要通過 Leader 完成再由 Leader 將寫操作廣播給其它服務器。只要有超過半數節點(不包括 observeer 節點)寫入成功,該寫請求就會被提交(類 2PC 協議)。

Follower

1.一個 Zookeeper 集群可能同時存在多個 Follower,它會響應 Leader 的心跳,

2.Follower 可直接處理并返回客戶端的讀請求,同時會將寫請求轉發給 Leader 處理,

3.并且負責在 Leader 處理寫請求時對請求進行投票。

Observer

角色與 Follower 類似,但是無投票權。Zookeeper 需保證高可用和強一致性,為了支持更多的客戶端,需要增加更多 Server;Server 增多,投票階段延遲增大,影響性能;引入 Observer,Observer 不參與投票; Observers 接受客戶端的連接,并將寫請求轉發給 leader 節點; 加入更多 Observer 節點,提高伸縮性,同時不影響吞吐率。

java Zookeeper簡述

 

Zookeeper 工作原理(原子廣播)

1.Zookeeper 的核心是原子廣播,這個機制保證了各個 server 之間的同步。實現這個機制的協議叫做 Zab 協議。Zab 協議有兩種模式,它們分別是恢復模式和廣播模式。

2.當服務啟動或者在領導者崩潰后,Zab 就進入了恢復模式,當領導者被選舉出來,且大多數 server 的完成了和 leader 的狀態同步以后,恢復模式就結束了。

3.狀態同步保證了 leader 和 server 具有相同的系統狀態

4.一旦 leader 已經和多數的 follower 進行了狀態同步后,他就可以開始廣播消息了,即進入廣播狀態。這時候當一個 server 加入 zookeeper 服務中,它會在恢復模式下啟動,發現 leader,并和 leader 進行狀態同步。待到同步結束,它也參與消息廣播。Zookeeper服務一直維持在 Broadcast 狀態,直到 leader 崩潰了或者 leader 失去了大部分的followers 支持。

5.廣播模式需要保證 proposal 被按順序處理,因此 zk 采用了遞增的事務 id 號(zxid)來保證。所有的提議(proposal)都在被提出的時候加上了 zxid。

6.實現中 zxid 是一個 64 為的數字,它高 32 位是 epoch 用來標識 leader 關系是否改變,每次一個 leader 被選出來,它都會有一個新的 epoch。低 32 位是個遞增計數。

7.當 leader 崩潰或者 leader 失去大多數的 follower,這時候 zk 進入恢復模式,恢復模式需要重新選舉出一個新的 leader,讓所有的 server 都恢復到一個正確的狀態。

 

Znode 四種形式的目錄節點

  • PERSISTENT:持久的節點。
  • EPHEMERAL:暫時的節點。
  • PERSISTENT_SEQUENTIAL:持久化順序編號目錄節點。
  • EPHEMERAL_SEQUENTIAL:暫時化順序編號目錄節點。

 

ZooKeeper 安裝和使用

  • 使用 Docker 下載 ZooKeeper

docker pull zookeeper:3.5.8

  • 運行 ZooKeeper

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8

  • 連接 ZooKeeper 服務

先使用docker ps查看 ZooKeeper 的 ContainerID,然后使用docker exec -it ContainerID /bin/bash命令進入容器中。
進入 bin 目錄,然后通過./zkCli.sh -server 127.0.0.1:2181命令連接ZooKeeper 服務

root@eaf70fc620cb:/apache-zookeeper-3.5.8-bin# cd bin

成功連接 ZooKeeper 服務后頁面

java Zookeeper簡述

 

常用命令

可通過help命令查看 ZooKeeper 常用命令

  • 創建節點(create 命令)

通過create命令在根目錄創建了 node1 節點,與它關聯的字符串是"node1"

[zk: 127.0.0.1:2181(CONNECTED) 34] create /node1 “node1”

通過create命令在根目錄創建了 node1 節點,與它關聯的內容是數字 123

[zk: 127.0.0.1:2181(CONNECTED) 1] create /node1/node1.1 123
Created /node1/node1.1

更新節點數據內容(set 命令)

[zk: 127.0.0.1:2181(CONNECTED) 11] set /node1 "set node1"

  • 獲取節點的數據(get 命令)

get命令可以獲取指定節點的數據內容和節點的狀態,可以看出我們通過set命令已經將節點數據內容改為 “set node1”。

set node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x4b
mtime = Sun Jan 20 10:41:10 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
  • 查看某個目錄下的子節點(ls 命令)

通過ls命令查看根目錄下的節點

[zk: 127.0.0.1:2181(CONNECTED) 37] ls /
[dubbo, ZooKeeper, node1]

通過ls命令查看 node1 目錄下的節點

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /node1
[node1.1]

ZooKeeper 中的 ls 命令和 linux 命令中的 ls 類似, 這個命令將列出絕對路徑 path 下的所有子節點信息(列出 1 級,并不遞歸)

  • 查看節點狀態(stat 命令)

通過stat命令查看節點狀態

[zk: 127.0.0.1:2181(CONNECTED) 10] stat /node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 查看節點信息和狀態(ls2 命令)

ls2命令更像是ls命令和stat命令的結合。ls2命令返回的信息包括 2 部分:

1.子節點列表

2.當前節點的 stat 信息。

[zk: 127.0.0.1:2181(CONNECTED) 7] ls2 /node1
[node1.1]
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 刪除節點(delete 命令)

這個命令很簡單,但是需要注意的一點是如果你要刪除某一個節點,那么這個節點必須無子節點才行。

[zk: 127.0.0.1:2181(CONNECTED) 3] delete /node1/node1.1

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/flystar27/article/details/120121612

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 青青青青青| 亚洲国产成人久久综合区 | 天堂在线中文字幕 | 国产99页 | 无码一区国产欧美在线资源 | 精品无码久久久久久久久 | 8x8x拔插| 日产精品一二三四区国产 | 欧美性白人顶级hd | 男公厕里同性做爰 | 色导行| 996热精品视频在线观看 | 成年人网站免费在线观看 | 96萝莉| 我的美女奴隶 | 日本免费三区 | 四虎国产精品免费久久久 | 国产精品视频久久久久 | 别停好爽好深好大好舒服视频 | 免费日本视频 | 私人影院在线免费观看 | 不知火舞被c视频在线播放 不卡一区二区三区卡 | 国产一级视频在线观看 | 国产成人www免费人成看片 | 超级乱淫变态伦短篇小说全集 | 黑人巨大vs北条麻妃在线 | 我与肥熟老妇的性事 | 女教师波多野结衣高清在线 | 深夜激情网 | 好猛好紧好硬使劲好大刺激视频 | 欧美黑人一级片 | 唯美 清纯 另类 亚洲制服 | 国产精品福利在线观看免费不卡 | 国产精品欧美亚洲韩国日本99 | 国产成人精品在线观看 | np高h疯狂黄暴宫口 narutomanga玖辛奈之乳 | 草莓视频深夜释放 | 免费在线影院 | 无人区在线观看免费观看 | 免费高清视频免费观看 | 精品一区二区三区视频日产 |