最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java Zookeeper簡述

 更新時間:2021年09月06日 11:29:22   作者:flystar27  
ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。下面通過本文給大家分享java 中 zookeeper簡單使用,需要的朋友參考下吧

Zookeeper 是一個分布式協(xié)調(diào)服務(wù),可用于服務(wù)發(fā)現(xiàn),分布式鎖,分布式領(lǐng)導(dǎo)選舉,配置管理等。Zookeeper 提供了一個類似于 Linux 文件系統(tǒng)的樹形結(jié)構(gòu)(可認為是輕量級的內(nèi)存文件系統(tǒng),但只適合存少量信息,完全不適合存儲大量文件或者大文件),同時提供了對于每個節(jié)點的監(jiān)控通知機制。

Zookeeper 角色

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

Leader

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

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

Follower

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

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

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

Observer

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

在這里插入圖片描述

Zookeeper 工作原理(原子廣播)

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

2.當服務(wù)啟動或者在領(lǐng)導(dǎo)者崩潰后,Zab 就進入了恢復(fù)模式,當領(lǐng)導(dǎo)者被選舉出來,且大多數(shù) server 的完成了和 leader 的狀態(tài)同步以后,恢復(fù)模式就結(jié)束了。

3.狀態(tài)同步保證了 leader 和 server 具有相同的系統(tǒng)狀態(tài)

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

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

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

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

 Znode 四種形式的目錄節(jié)點

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

ZooKeeper 安裝和使用

  • 使用 Docker 下載 ZooKeeper

docker pull zookeeper:3.5.8

  • 運行 ZooKeeper

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

  • 連接 ZooKeeper 服務(wù)

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

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

成功連接 ZooKeeper 服務(wù)后頁面

在這里插入圖片描述

常用命令

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

  • 創(chuàng)建節(jié)點(create 命令)

通過 create 命令在根目錄創(chuàng)建了 node1 節(jié)點,與它關(guān)聯(lián)的字符串是"node1"

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

通過 create 命令在根目錄創(chuàng)建了 node1 節(jié)點,與它關(guān)聯(lián)的內(nèi)容是數(shù)字 123

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

更新節(jié)點數(shù)據(jù)內(nèi)容(set 命令)

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

  • 獲取節(jié)點的數(shù)據(jù)(get 命令)

get 命令可以獲取指定節(jié)點的數(shù)據(jù)內(nèi)容和節(jié)點的狀態(tài),可以看出我們通過 set 命令已經(jīng)將節(jié)點數(shù)據(jù)內(nèi)容改為 “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
  • 查看某個目錄下的子節(jié)點(ls 命令)

通過 ls 命令查看根目錄下的節(jié)點

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

通過 ls 命令查看 node1 目錄下的節(jié)點

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

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

  • 查看節(jié)點狀態(tài)(stat 命令)

通過 stat 命令查看節(jié)點狀態(tài)

[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
  • 查看節(jié)點信息和狀態(tài)(ls2 命令)

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

1.子節(jié)點列表

2.當前節(jié)點的 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
  • 刪除節(jié)點(delete 命令)

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

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

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Netty解決 TCP 粘包拆包的方法

    Netty解決 TCP 粘包拆包的方法

    處理粘包的唯一方法就是制定應(yīng)用層的數(shù)據(jù)通訊協(xié)議,通過協(xié)議來規(guī)范現(xiàn)有接收的數(shù)據(jù)是否滿足消息數(shù)據(jù)的需要,本文給大家介紹Netty解決 TCP 粘包拆包的方法,需要的朋友一起看看吧
    2021-07-07
  • java8新特性之接口默認方法示例詳解

    java8新特性之接口默認方法示例詳解

    這篇文章主要給大家介紹了關(guān)于java8新特性之接口默認方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • 解決Java Redis刪除HashMap中的key踩到的坑

    解決Java Redis刪除HashMap中的key踩到的坑

    這篇文章主要介紹了解決Java Redis刪除HashMap中的key踩到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java中的異常Exception與處理方式詳解

    Java中的異常Exception與處理方式詳解

    這篇文章主要介紹了Java中的異常Exception與處理方式詳解, Java語言中,將程序執(zhí)行中發(fā)生的不正常情況稱為"異常"(開發(fā)過程中的語法錯誤和邏輯錯誤不是異常),需要的朋友可以參考下
    2024-01-01
  • DTO 實現(xiàn) service 和 controller 之間值傳遞的操作

    DTO 實現(xiàn) service 和 controller 之間值傳遞的操作

    這篇文章主要介紹了DTO 實現(xiàn) service 和 controller 之間值傳遞的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    這篇文章主要為大家介紹了Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 在Android系統(tǒng)中使用WebViewClient處理跳轉(zhuǎn)URL的方法

    在Android系統(tǒng)中使用WebViewClient處理跳轉(zhuǎn)URL的方法

    這篇文章主要介紹了在Android系統(tǒng)中使用WebViewClient處理跳轉(zhuǎn)URL的方法,實現(xiàn)代碼為Java語言編寫,是需要的朋友可以參考下
    2015-07-07
  • springboot多項目結(jié)構(gòu)實現(xiàn)

    springboot多項目結(jié)構(gòu)實現(xiàn)

    本文主要介紹了springboot多項目結(jié)構(gòu)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • IDEA的基本使用(讓你的IDEA有飛一般的感覺)

    IDEA的基本使用(讓你的IDEA有飛一般的感覺)

    這篇文章主要介紹了IDEA的基本使用(讓你的IDEA有飛一般的感覺),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • java線程之使用Runnable接口創(chuàng)建線程的方法

    java線程之使用Runnable接口創(chuàng)建線程的方法

    本篇文章介紹了,java中使用Runnable接口創(chuàng)建線程的方法。需要的朋友參考下
    2013-05-05

最新評論

融水| 桃源县| 蒙自县| 开封市| 济源市| 昌邑市| 乐昌市| 贡觉县| 勐海县| 平江县| 洪泽县| 阿瓦提县| 山阴县| 阿克陶县| 白朗县| 双江| 宁明县| 永宁县| 商水县| 浮山县| 历史| 石棉县| 永新县| 克拉玛依市| 渝北区| 城口县| 内丘县| 嘉鱼县| 浑源县| 临邑县| 武平县| 德江县| 大城县| 漳浦县| 广东省| 桦南县| 汉源县| 丹凤县| 赤峰市| 普兰店市| 阳山县|