精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Zookeeper入門(mén)看這篇就夠了

開(kāi)發(fā) 前端
Zookeeper 是一個(gè)分布式應(yīng)用程序的分布式開(kāi)源協(xié)調(diào)服務(wù)。是Apache Hadoop 的一個(gè)子項(xiàng)目,主要用來(lái)解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問(wèn)題,例如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等。

[[426770]]

簡(jiǎn)介

Zookeeper 是一個(gè)分布式應(yīng)用程序的分布式開(kāi)源協(xié)調(diào)服務(wù)。是Apache Hadoop 的一個(gè)子項(xiàng)目,主要用來(lái)解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問(wèn)題,例如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等。

Zookeeper 工作原理

ZooKeeper 核心是原子廣播,該機(jī)制保證了各個(gè)Server之間的同步,實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做 Zab協(xié)議 ,Zab協(xié)議有兩個(gè)模式,他們分別是 “恢復(fù)模式 & 廣播模式”。

恢復(fù)模式

Zab協(xié)議會(huì)讓ZK集群進(jìn)入崩潰恢復(fù)模式的情況如下:

(1)當(dāng)服務(wù)框架在啟動(dòng)過(guò)程中(2)當(dāng)Leader服務(wù)器出現(xiàn)網(wǎng)絡(luò)中斷,崩潰退出與重啟等異常情況。(3)當(dāng)集群中已經(jīng)不存在過(guò)半的服務(wù)器與Leader服務(wù)器保持正常通信。

在所有的follower服務(wù)器中選舉一臺(tái)為L(zhǎng)eader,當(dāng)leader被選舉出來(lái),集群中有多數(shù)服務(wù)與新的Leader完成狀態(tài)同步之后就會(huì)退出恢復(fù)模式,用來(lái)保證至少有一半的follower能和Leader保持?jǐn)?shù)據(jù)一致,當(dāng)多數(shù)的follower集群與leader數(shù)據(jù)保持一致的時(shí)候,就會(huì)進(jìn)入消息廣播模式。

狀態(tài)同步保證了 Leader 和 Server具有相同的系統(tǒng)狀態(tài),所謂的狀態(tài)同步其實(shí)就是數(shù)據(jù)的同步。

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

廣播模式

消息廣播模式,Zab協(xié)議消息廣播過(guò)程使用的是原子廣播協(xié)議,類(lèi)似于一個(gè)二階段提交,但是又有點(diǎn)不一樣,并不是所有的follower節(jié)點(diǎn)都需要返回ack才進(jìn)行一致性事務(wù)完成,只需要多數(shù)以上即可。

針對(duì)每個(gè)客戶(hù)端的事務(wù)請(qǐng)求,leader服務(wù)器會(huì)為其生成對(duì)應(yīng)的事務(wù)Proposal,并將其發(fā)送給集群中其余所有的機(jī)器,然后再分別收集各自的選票,最后進(jìn)行事務(wù)提交。

  • leader 接收到消息請(qǐng)求后,將消息賦予一個(gè)全局唯一的 64 位自增的 Id,我們通常稱(chēng)之為zxid,通過(guò) zxid 的大小比較即可實(shí)現(xiàn)有序的特性。
  • leader 通過(guò) 隊(duì)列 保證發(fā)送的順序性,將帶有zxid的消息作為一個(gè)提案(proposal)分發(fā)給所有follower
  • 當(dāng)follower 接收到proposal,先將proposal寫(xiě)到本地事務(wù)日志,寫(xiě)事務(wù)成功后再向Leader 回一個(gè)ACK確認(rèn)
  • 當(dāng)leader 接收到多數(shù)的ack確認(rèn)后,leader 會(huì)向所有follower 發(fā)送 commit 命令,同意會(huì)在本地執(zhí)行該消息。
  • 當(dāng)follower 收到消息 commit 命令后,就會(huì)執(zhí)行該消息。

消息廣播模式流程示意圖如下:

首先客戶(hù)端會(huì)輪詢(xún)Zookeeper集群中的各個(gè)節(jié)點(diǎn),當(dāng)輪詢(xún)到一臺(tái)是follower,如果是讀的請(qǐng)求,follower會(huì)返回請(qǐng)求結(jié)果,如果是增刪改操作,follower 會(huì)向leader生成事務(wù)請(qǐng)求,針對(duì)客戶(hù)端的事務(wù)請(qǐng)求,針對(duì)客戶(hù)端的事務(wù)請(qǐng)求,leader會(huì)為這個(gè)生成對(duì)應(yīng)的事務(wù)Proposal,然后發(fā)送集群中所有follower服務(wù)器,然后分別在收集各自的選票,最后進(jìn)行事務(wù)提交。

Zab協(xié)議的二階段提交,在提交過(guò)程中移除了中斷提交過(guò)程的操作,對(duì)于Zookeeper集群來(lái)說(shuō),超過(guò)半數(shù)反饋Ack確認(rèn)就代表事務(wù)成功,這種方式無(wú)法完成所有節(jié)點(diǎn)事務(wù)一致性問(wèn)題,所以Zab協(xié)議采用恢復(fù)模式來(lái)解決數(shù)據(jù)不一致的問(wèn)題。

消息廣播協(xié)議是基于具有FIFO特性的TCP協(xié)議進(jìn)行通訊,因此可以保證消息廣播過(guò)程中的接收和發(fā)送的順序性。

事務(wù)ID

為了保證事務(wù)的順序一致性,Zookeeper 采用了遞增的事務(wù)ID號(hào)(zxid)來(lái)標(biāo)識(shí)事務(wù),所有的操作(proposal)都會(huì)在被提出時(shí)加上zxid,zxid是一個(gè)64位的數(shù)字,他高32位是epoch用來(lái)標(biāo)識(shí)leader關(guān)系是否發(fā)生變化,每當(dāng)有新的leader 被選舉出來(lái),都會(huì)有一個(gè)新的epoch,標(biāo)識(shí)當(dāng)前屬于哪個(gè)leader的領(lǐng)導(dǎo)。

對(duì)于Zookeeper 來(lái)說(shuō),每次的變化都會(huì)產(chǎn)生一個(gè)唯一的事務(wù)id,zxid(ZooKeeper Transaction Id)通過(guò)zxid ,可以確定更新操作的先后順序,如果說(shuō) zxid1 小于 zxid2,說(shuō)明 zxid1比zxid先發(fā)生。

Zookeeper 模型

Zookeeper 是一個(gè)目錄樹(shù)結(jié)構(gòu),名稱(chēng)是由斜杠 (/) 分隔的一系列路徑元素。ZooKeeper 命名空間中的每個(gè)節(jié)點(diǎn)都由路徑標(biāo)識(shí)。

ZooKeeper 層級(jí)樹(shù)狀結(jié)構(gòu)

根節(jié)點(diǎn) / 包含兩個(gè)節(jié)點(diǎn)(/modele1 & /module2),其中節(jié)點(diǎn) /module1 包含三個(gè)子節(jié)點(diǎn)(/module1/app1 & /module1/app2 & /module1/app3),在Zookeeper 中,節(jié)點(diǎn)以絕對(duì)路徑表示,不存在相對(duì)路徑,出了根節(jié)點(diǎn)以外,其他節(jié)點(diǎn)不能以 / 結(jié)尾。

特性

資源共享: 例如存儲(chǔ)空間,計(jì)算能力,數(shù)據(jù),和服務(wù)等等

擴(kuò)展性: 從軟件和硬件上增加系統(tǒng)的規(guī)模

并發(fā)性: 多個(gè)用戶(hù)同時(shí)訪(fǎng)問(wèn)

性能: 確保當(dāng)負(fù)載增加的時(shí)候,系統(tǒng)想要時(shí)間不會(huì)有影響

容錯(cuò)性: 盡管一些組件暫時(shí)不可用了,整個(gè)系統(tǒng)仍然是可用的

API抽象: 系統(tǒng)的獨(dú)立組件對(duì)用戶(hù)隱藏,僅僅暴露服務(wù)

Zookeeper的角色

領(lǐng)導(dǎo)者(leader) :負(fù)責(zé)進(jìn)行投票的發(fā)起和決議,更新系統(tǒng)狀態(tài)

學(xué)習(xí)者(learner) :包括跟隨者(follower)和觀(guān)察者(observer),follower用于接受客戶(hù)端請(qǐng)求并想客戶(hù)端返回結(jié)果,在選主過(guò)程中參與投票

Observer :可以接受客戶(hù)端連接,將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給leader,但observer不參加投票過(guò)程,只同步leader的狀態(tài),observer的目的是為了擴(kuò)展系統(tǒng),提高讀取速度

客戶(hù)端(client) :請(qǐng)求發(fā)起方

保證

順序一致性: 客戶(hù)端的更新將按發(fā)送順序應(yīng)用。

原子性: 更新成功或失敗,沒(méi)有部分結(jié)果。

統(tǒng)一視圖: 無(wú)論服務(wù)器連接到哪個(gè)服務(wù)器,客戶(hù)端都將看到相同的服務(wù)視圖。即,即使客戶(hù)端故障轉(zhuǎn)移到具有相同會(huì)話(huà)的不同服務(wù)器,客戶(hù)端也永遠(yuǎn)不會(huì)看到系統(tǒng)的舊視圖。

可靠性: 一旦應(yīng)用更新了,它將從那時(shí)起一直存在,直到客戶(hù)端覆蓋更新。

及時(shí)性: 系統(tǒng)的客戶(hù)視圖保證在特定時(shí)間范圍內(nèi)是最新的。

Znode 節(jié)點(diǎn)

Znode有兩種類(lèi)型:持久節(jié)點(diǎn)和臨時(shí)節(jié)點(diǎn) ,Znode的類(lèi)型在創(chuàng)建的之后就不能在進(jìn)行修改了。

臨時(shí)節(jié)點(diǎn)

  • 臨時(shí)節(jié)點(diǎn)在客戶(hù)端會(huì)話(huà)結(jié)束的時(shí)候,Zookeeper 會(huì)將臨時(shí)節(jié)點(diǎn)(znode)刪除,并且臨時(shí)節(jié)點(diǎn)不能有子節(jié)點(diǎn)。利用臨時(shí)節(jié)點(diǎn)的特性,我們可以使用臨時(shí)節(jié)點(diǎn)來(lái)進(jìn)行集群管理以及發(fā)現(xiàn)服務(wù)的上下線(xiàn)等。

創(chuàng)建臨時(shí)節(jié)點(diǎn)命令:create-e/module1/app1 app1創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)為 “/module1/app1” ,數(shù)據(jù)為 “app1”

持久節(jié)點(diǎn)

  • 持久節(jié)點(diǎn)不依賴(lài)于客戶(hù)端會(huì)話(huà),只有當(dāng)客戶(hù)端明確要?jiǎng)h除持久節(jié)點(diǎn)(znode)的時(shí)候才會(huì)被刪除

創(chuàng)建臨時(shí)節(jié)點(diǎn)命令:create/module1 module1創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)為 “/module1” ,數(shù)據(jù)為 “module1”

順序節(jié)點(diǎn)

  • ZooKeeper 中還提供了一種順序節(jié)點(diǎn)的類(lèi)型,每次創(chuàng)建順序節(jié)點(diǎn)時(shí)候,ZooKeeper 都會(huì)在路徑后面自動(dòng)添加10為的數(shù)據(jù)中,例如0000000001 計(jì)數(shù)器會(huì)保證在同一父節(jié)點(diǎn)下唯一,創(chuàng)建節(jié)點(diǎn)的時(shí)候會(huì)添加順序,常見(jiàn)分布式鎖。

順序節(jié)點(diǎn)只是節(jié)點(diǎn)的一種特性,也就說(shuō)不管是 持久節(jié)點(diǎn)還是 臨時(shí)節(jié)點(diǎn) 都可以設(shè)置為順序節(jié)點(diǎn),所以Znode類(lèi)型可以理解為 4種類(lèi)型:

  1. 持久節(jié)點(diǎn)
  2. 臨時(shí)節(jié)點(diǎn)
  3. 持久順序節(jié)點(diǎn)
  4. 臨時(shí)順序節(jié)點(diǎn)

創(chuàng)建順序節(jié)點(diǎn)命令(加上 “-s”參數(shù)):create-s/module1/app app我們會(huì)看到 Created/module1/app0000000001意思是我們創(chuàng)建了一個(gè)持久順序節(jié)點(diǎn)“/module1/app0000000001” 如果再執(zhí)行上面命令 會(huì)生成節(jié)點(diǎn) “/module1/app0000000002”,同理 如果我們 create-s后面添加 -e 參數(shù),就表示我們創(chuàng)建了一個(gè)臨時(shí)節(jié)點(diǎn)。

節(jié)點(diǎn)數(shù)據(jù)

  • 創(chuàng)建節(jié)點(diǎn)的時(shí)候,我們可以指定節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù),ZooKeeper可以保證讀寫(xiě)都是原子操作,而且每次讀寫(xiě)操作都是對(duì)數(shù)據(jù)的完整讀取或者完成寫(xiě)入,不提供對(duì)數(shù)據(jù)的部分讀取或者寫(xiě)入操作。
  • ZooKeeper 雖然提供了節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)的功能,但是我們并不能把它當(dāng)成一個(gè)數(shù)據(jù)庫(kù),重點(diǎn)不要把Zookeeper 當(dāng)成數(shù)據(jù)庫(kù)用,因?yàn)閆ookeeper 規(guī)定了節(jié)點(diǎn)的數(shù)據(jù)大小不能超過(guò)1M,所以我們不能在節(jié)點(diǎn)上存儲(chǔ)過(guò)多的數(shù)據(jù),盡可能保證小的數(shù)據(jù)量,因?yàn)閿?shù)據(jù)過(guò)大,會(huì)導(dǎo)致ZK的性能下降。
  • 如果確實(shí)需要存儲(chǔ)大量的數(shù)據(jù),一般可以在分布式數(shù)據(jù)庫(kù)或者Redis保存這部分?jǐn)?shù)據(jù),然后在Znode中保留數(shù)據(jù)庫(kù)中的索引。

Zookeeper單機(jī)模式安裝

java 環(huán)境

配置JAVA環(huán)境,檢驗(yàn)環(huán)境 java-version

下載安裝Zookeeper

下載地址:https://zookeeper.apache.org/releases.html

下載解壓Zookeeper

  1. cd /usr/local
  2. wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz 
  3. tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz 
  4. cd zookeeper-3.7.0/ 

重命名配置文件 zoo_sample.cfg

  1. cp conf 
  2. zoo_sample 
  3. cfg conf 
  4. zoo 
  5. cfg 

啟動(dòng)ZK

  1. ./ 
  2. bin 
  3. zkServer 
  4. sh start 

連接ZK客戶(hù)端

  1. ./ 
  2. bin 
  3. zkCli 
  4. sh 

當(dāng)我們看到下圖的信息的時(shí)候,表示我們啟動(dòng)成功

Zookeeper命令

基本命令

  • create : 在樹(shù)中的某個(gè)位置創(chuàng)建一個(gè)節(jié)點(diǎn)
  • delete : 刪除一個(gè)節(jié)點(diǎn)存在:測(cè)試節(jié)點(diǎn)是否存在于某個(gè)位置
  • get data : 從節(jié)點(diǎn)讀取數(shù)據(jù)
  • set data: 將數(shù)據(jù)寫(xiě)入節(jié)點(diǎn)
  • get children : 檢索節(jié)點(diǎn)的子節(jié)點(diǎn)列表
  • sync : 等待數(shù)據(jù)被傳播

操作Zookeeper

查看Zookeeper中包含的key

  1. ls  

創(chuàng)建一個(gè)新的Znode 創(chuàng)建成功以后我們可以使用 ls/查看我們創(chuàng)建的內(nèi)容

  1. create /zkMxn muxiaonong ls /[zkMxn, zookeeper] 

get命令獲取創(chuàng)建Znode的內(nèi)容

  1. get /zkMxn 

set 命令來(lái)對(duì) zk 所關(guān)聯(lián)的字符串進(jìn)行設(shè)置

  1. set /zkMxn mxn666 

刪除Znode

  1. delete /zkMxn 

Java Api操作 ZK

1. 導(dǎo)入Jar包

  1. <dependency>  
  2.  
  3. <groupId>org.apache.zookeeper</groupId>  
  4.  
  5. <artifactId>zookeeper</artifactId> 
  6.  
  7. <version>3.6.3</version> 
  8.  
  9. </dependency> 
  10.  
  11. <!--junit單元測(cè)試-->  
  12.  
  13. <dependency>  
  14.  
  15. <groupId>junit</groupId>  
  16.  
  17. <artifactId>junit</artifactId>  
  18.  
  19. <version>4.13.2</version>  
  20.  
  21. <scope>runtime</scope>  
  22.  
  23. </dependency> 

2. API操作Zookeeper

創(chuàng)建Zookeeper對(duì)象

  1. public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException { 
  2.       this(connectString, sessionTimeout, watcher, false); 
  3.   } 

connectString: 連接的地址,包括主機(jī)名和端口號(hào),多個(gè)的話(huà)用逗號(hào)隔開(kāi)

sessionTimeout: 等待客戶(hù)端通信的最長(zhǎng)時(shí)間,客戶(hù)端如果超過(guò)這個(gè)時(shí)間沒(méi)有和服務(wù)端進(jìn)行通信,那么就認(rèn)為該客戶(hù)端已經(jīng)終止,一般設(shè)置值為 5-10秒,單位為毫秒

watcher: 監(jiān)聽(tīng)器,用于接收會(huì)話(huà)事件的接口,需要自己定義,實(shí)現(xiàn)process()方法

連接Zookeeper

  1. Zookeeper zkClient = ""
  2. String connectStr = "192.168.2.1:2181"
  3. zkClient = new ZooKeeper(connectStr, 5000, new Watcher() { 
  4.     @Override 
  5.     public void process(WatchedEvent watchedEvent) { } 
  6. }); 

創(chuàng)建節(jié)點(diǎn)

  1. public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException { 
  2.       this(connectString, sessionTimeout, watcher, false); 
  3.   } 
  • path: 節(jié)點(diǎn)路徑
  • data: 節(jié)點(diǎn)數(shù)據(jù)
  • acl: 節(jié)點(diǎn)權(quán)限,例如: ZooDefs.Ids.OPEN_ACL_UNSAFE

OPENACLUNSAFE:完全開(kāi)發(fā),采用world驗(yàn)證模式,由于每個(gè)ZK連接都有world驗(yàn)證模式,所以當(dāng)我們節(jié)點(diǎn)設(shè)置了該參數(shù)時(shí),對(duì)所有連接開(kāi)放 CREATORALLACL:創(chuàng)建該Znode連接的擁有所有權(quán)限,這里采用的是auth驗(yàn)證模式,用sessionID做驗(yàn)證,如果設(shè)置了該參數(shù),只有創(chuàng)建改Znode節(jié)點(diǎn)的連接才能對(duì)這個(gè)Znode進(jìn)行任何操作 READACLUNSAFE:所有的客戶(hù)端都可讀,這里采用world驗(yàn)證模式,和第一條同理,所有連接都可以讀取該znode

createMode: 節(jié)點(diǎn)類(lèi)型,例如: CreateMode.PERSISTENT PERSISTENT:持久節(jié)點(diǎn) PERSISTENTSEQUENTIAL:持久有序節(jié)點(diǎn) EPHEMERAL:短暫節(jié)點(diǎn) EPHEMERALSEQUENTIAL:短暫有序節(jié)點(diǎn)

完整APIDemo:

  1. import lombok.extern.slf4j.Slf4j; 
  2. import org.apache.zookeeper.*; 
  3. import org.apache.zookeeper.data.Stat; 
  4. import java.io.IOException; 
  5. import java.io.UnsupportedEncodingException; 
  6. import java.util.concurrent.CountDownLatch; 
  7.  
  8. /** @Author mxn 
  9.   * @Description //TODO ZooKeeper Java API測(cè)試 
  10.   * @Date 10:22 2021/9/29 
  11.   * @Param 
  12.   * @return 
  13.  **/ 
  14. @Slf4j 
  15. public class ZookeeperTest { 
  16.  
  17.     // IP 和端口 
  18.     private final static String ipAddress = "192.168.2.123:2181"
  19.  
  20.  
  21.     public static void main(String[] args) { 
  22.         ZookeeperTest test = new ZookeeperTest(); 
  23.  
  24.         String key = "/zkMxn"
  25.         String value = "wo is muxiaonong"
  26.         //創(chuàng)建Znode 
  27.         test.add(key,value); 
  28. //        獲取節(jié)點(diǎn)數(shù)據(jù) 
  29. //        test.get(key); 
  30.         //修改節(jié)點(diǎn)數(shù)據(jù) 
  31. //        test.modify(key,"wo is zhuzhuxia"); 
  32.         //刪除節(jié)點(diǎn) 
  33. //        test.delete(key); 
  34.  
  35.  
  36.     } 
  37.  
  38.     /** 
  39.      * @return 
  40.      * @Author mxn 
  41.      * @Description //TODO 獲取ZooKeeper連接 
  42.      * @Date 10:22 2021/9/29 
  43.      * @Param 
  44.      **/ 
  45.     public static ZooKeeper getConntection() { 
  46.         ZooKeeper zooKeeper = null
  47.         try { 
  48.             final CountDownLatch countDownLatch = new CountDownLatch(1); 
  49.             //watch機(jī)制(回調(diào)),監(jiān)聽(tīng)是否連接成功 
  50.             zooKeeper = new ZooKeeper(ipAddress, 5000, new Watcher() { 
  51.                 @Override 
  52.                 public void process(WatchedEvent watchedEvent) { 
  53.                     if (Event.KeeperState.SyncConnected == watchedEvent.getState()) { 
  54.                         //如果受收到了服務(wù)端的響應(yīng)事件,連接成功 
  55.                         countDownLatch.countDown(); 
  56.                     } 
  57.                 } 
  58.             }); 
  59.  
  60.             countDownLatch.await(); 
  61.             log.info("zookeeper狀態(tài):{}",zooKeeper.getState());//CONNECTED 
  62.  
  63.         } catch (IOException e) { 
  64.             e.printStackTrace(); 
  65.         } catch (InterruptedException e) { 
  66.             e.printStackTrace(); 
  67.         } 
  68.         return zooKeeper; 
  69.     } 
  70.  
  71.    /** @Author lyy 
  72.      * @Description //TODO 關(guān)閉ZooKeeper連接 
  73.      * @Date 14:57 2021/9/29 
  74.      * @Param  
  75.      * @return  
  76.     **/ 
  77.     public static void closeConnection(ZooKeeper zooKeeper) { 
  78.         try { 
  79. //            zooKeeper.close(); 
  80.         } catch (Exception e) { 
  81.             e.printStackTrace(); 
  82.         } 
  83.     } 
  84.  
  85.      
  86.     /** @Author lyy 
  87.       * @Description //TODO 添加節(jié)點(diǎn) 
  88.       * @Date 13:36 2021/9/29 
  89.       * @Param  
  90.       * @return  
  91.      **/ 
  92.     public void add(String key ,String value) { 
  93.         ZooKeeper zooKeeper = ZookeeperTest.getConntection(); 
  94.         try { 
  95.             //參數(shù)類(lèi)型 
  96.             //1.key 
  97.             //2.value 
  98.             //3.對(duì)應(yīng)的ACL,當(dāng)前節(jié)點(diǎn)的權(quán)限控制 
  99.             //4.設(shè)置當(dāng)前節(jié)點(diǎn)類(lèi)型 
  100.             zooKeeper.create(key, value.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 
  101.             ZookeeperTest.closeConnection(zooKeeper); 
  102.         } catch (KeeperException e) { 
  103.             e.printStackTrace(); 
  104.         } catch (InterruptedException e) { 
  105.             e.printStackTrace(); 
  106.         } 
  107.     } 
  108.  
  109.    /** @Author lyy 
  110.      * @Description //TODO 獲取節(jié)點(diǎn)信息 
  111.      * @Date 14:57 2021/9/29 
  112.      * @Param  
  113.      * @return  
  114.     **/ 
  115.     public void get(String key) { 
  116.         ZooKeeper zooKeeper = ZookeeperTest.getConntection(); 
  117.         Stat stat = new Stat(); 
  118.         String data = null
  119.         try { 
  120.             byte[] bytes = zooKeeper.getData(keynull, stat); 
  121.             data = new String(bytes, "gbk"); 
  122.             log.info("當(dāng)前節(jié)點(diǎn)信息:{}",data); 
  123.             ZookeeperTest.closeConnection(zooKeeper); 
  124.         } catch (KeeperException e) { 
  125.             e.printStackTrace(); 
  126.         } catch (InterruptedException e) { 
  127.             e.printStackTrace(); 
  128.         } catch (UnsupportedEncodingException e) { 
  129.             e.printStackTrace(); 
  130.         } 
  131.     } 
  132.  
  133.     /** @Author lyy 
  134.       * @Description //TODO 修改節(jié)點(diǎn)信息 
  135.       * @Date 14:57 2021/9/29 
  136.       * @Param  
  137.       * @return  
  138.      **/ 
  139.     public void modify(String key,String newValue) { 
  140.         ZooKeeper zooKeeper = ZookeeperTest.getConntection(); 
  141.         Stat stat = new Stat(); 
  142.         //version樂(lè)觀(guān)鎖概念,此處需要獲取version信息,則需要先get拿到節(jié)點(diǎn)信息 
  143.         try { 
  144.             //獲取節(jié)點(diǎn)(修改需要version信息) 
  145.             zooKeeper.getData(keynull, stat); 
  146.             //再修改 
  147.             zooKeeper.setData(key, newValue.getBytes(), stat.getVersion()); 
  148.             ZookeeperTest.closeConnection(zooKeeper); 
  149.         } catch (KeeperException e) { 
  150.             e.printStackTrace(); 
  151.         } catch (InterruptedException e) { 
  152.             e.printStackTrace(); 
  153.         } 
  154.     } 
  155.  
  156.    /** @Author lyy 
  157.      * @Description //TODO 刪除節(jié)點(diǎn) 
  158.      * @Date 14:57 2021/9/29 
  159.      * @Param  
  160.      * @return  
  161.     **/ 
  162.     public void delete(String key) { 
  163.         ZooKeeper zooKeeper = ZookeeperTest.getConntection(); 
  164.         Stat stat = new Stat(); 
  165.         try { 
  166.             //獲取節(jié)點(diǎn)(刪除需要version信息) 
  167.             zooKeeper.getData(keynull, stat); 
  168.             //刪除節(jié)點(diǎn) 
  169.             zooKeeper.delete(key, stat.getVersion()); 
  170.             ZookeeperTest.closeConnection(zooKeeper); 
  171.         } catch (KeeperException e) { 
  172.             e.printStackTrace(); 
  173.         } catch (InterruptedException e) { 
  174.             e.printStackTrace(); 
  175.         } 
  176.  
  177.     } 

總結(jié)

到這里我們對(duì)Zookeeper 大概有個(gè)入門(mén)級(jí)的了解了,不過(guò)Zookeeper遠(yuǎn)遠(yuǎn)比我們這里講述的功能多,如何用Zookeeper實(shí)現(xiàn)集群管理、分布式鎖,隊(duì)列等等,小農(nóng)會(huì)在后面的文章中進(jìn)行講解,關(guān)注我,后續(xù)精彩內(nèi)容第一時(shí)間推送。

 

責(zé)任編輯:姜華 來(lái)源: 牧小農(nóng)
相關(guān)推薦

2021-10-21 06:52:17

ZooKeeper分布式配置

2019-08-16 09:41:56

UDP協(xié)議TCP

2021-01-15 12:56:36

人工智能人工智能應(yīng)用

2020-12-09 08:01:38

Mybatis關(guān)系型數(shù)據(jù)庫(kù)

2021-05-07 07:52:51

Java并發(fā)編程

2022-03-29 08:23:56

項(xiàng)目數(shù)據(jù)SIEM

2024-08-27 11:00:56

單例池緩存bean

2017-03-30 22:41:55

虛擬化操作系統(tǒng)軟件

2025-02-14 08:53:24

2023-09-25 08:32:03

Redis數(shù)據(jù)結(jié)構(gòu)

2023-10-04 00:32:01

數(shù)據(jù)結(jié)構(gòu)Redis

2021-09-10 13:06:45

HDFS底層Hadoop

2023-11-07 07:46:02

GatewayKubernetes

2021-07-28 13:29:57

大數(shù)據(jù)PandasCSV

2021-04-11 08:30:40

VRAR虛擬現(xiàn)實(shí)技術(shù)

2023-12-07 09:07:58

2022-08-18 20:45:30

HTTP協(xié)議數(shù)據(jù)

2021-11-10 07:47:48

Traefik邊緣網(wǎng)關(guān)

2018-09-26 11:02:46

微服務(wù)架構(gòu)組件

2025-11-10 01:35:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

91午夜在线播放| 久久韩剧网电视剧| 男人女人黄一级| 免费看美女视频在线网站| 国产精品88av| 国产91精品视频在线观看| 国产美女网站视频| 国产在线播放精品| 欧美日韩一本到| 每日在线观看av| 伊人免费在线| 91网站最新网址| 91在线免费看网站| 亚洲GV成人无码久久精品 | 日韩欧美一级二级三级久久久| 无码日本精品xxxxxxxxx| 国产乱视频在线观看| 国产成人精品一区二区三区网站观看| 日韩美女视频免费看| 国产乱国产乱老熟300| 久久av综合| 亚洲二区在线播放视频| 国产女同无遮挡互慰高潮91| 欧美办公室脚交xxxx| 亚洲欧美日韩国产成人精品影院| 蜜桃传媒视频麻豆一区 | 毛片基地在线观看| 欧美精品网站| 久久精品99久久香蕉国产色戒| 国产麻豆天美果冻无码视频 | 欧美激情论坛| 亚洲av无码一区二区三区dv| 裸体在线国模精品偷拍| 国产成人精品免高潮在线观看| 欧美成人免费看| 一区二区在线| 久久精品99久久久久久久久| 最新中文字幕av| 国产区精品区| 亚洲欧美激情在线视频| 亚洲第九十七页| 欧美天堂社区| 日韩电影中文字幕av| 亚洲天堂av网站| 国产成人夜色高潮福利影视| 欧美一级高清片| www.成人黄色| 成人免费观看49www在线观看| 欧美三级日本三级少妇99| 妓院一钑片免看黄大片| 91精品影视| 欧美亚洲精品一区| 九九热99视频| 亚洲ww精品| 91精品欧美一区二区三区综合在| 亚洲a级黄色片| 成人免费观看49www在线观看| 欧美喷水一区二区| 最新av免费在线观看| 国产精品亚洲四区在线观看| 日韩视频免费直播| 逼特逼视频在线观看| 国产精品毛片av| 亚洲国产日韩一区| 亚欧洲乱码视频| 大片网站久久| 久久久精品亚洲| 久久综合亚洲色hezyo国产| 亚洲欧洲日本mm| 国产91精品高潮白浆喷水| 91精品国产高清一区二区三密臀| 日韩精品一区第一页| 国产精品午夜一区二区欲梦| 91影院在线播放| 国产福利精品导航| 精品无码久久久久久久动漫| 九色在线免费| 日韩毛片视频在线看| av片在线免费| 老司机成人影院| 91精品国产一区二区三区 | 国产三级一区二区三区| 亚洲综合网中心| 国产一线二线在线观看| 日本乱人伦aⅴ精品| 日本黄色福利视频| 91国内精品白嫩初高生| 亚洲欧洲一区二区三区久久| 色www亚洲国产阿娇yao| 欧美精品导航| 国产成人精品一区二区在线| 国产伦精品一区二区三区免.费| 丁香激情综合国产| 亚洲激情图片| 日韩伦理在线| 91精品国产91久久久久久最新毛片| 欧美极品jizzhd欧美仙踪林| 视频国产一区| 色综合老司机第九色激情| 日韩欧美在线观看免费| 国产成人在线网站| 日韩欧美视频一区二区三区四区| 18加网站在线| 欧美婷婷六月丁香综合色| 国产精品成人99一区无码 | 国产精品成人自拍| 色诱女教师一区二区三区| 日本少妇激情舌吻| 韩国v欧美v日本v亚洲v| 欧美一区二区三区四区在线观看地址 | 又大又硬又爽免费视频| 成人午夜亚洲| 亚洲欧美日韩一区二区三区在线| 国产免费无码一区二区视频| 日韩不卡一区二区三区| 国产一区在线免费观看| www免费视频观看在线| 欧美亚洲精品一区| 性欧美精品中出| 亚洲精品护士| 99视频网站| 黄色动漫在线观看| 欧美日韩综合在线免费观看| 精品人妻一区二区三区香蕉| 欧美亚韩一区| 99高清视频有精品视频| 精品美女在线观看视频在线观看| 91成人国产精品| 国内精品久久99人妻无码| 亚洲国产片色| 国产欧美综合精品一区二区| 性xxxxfjsxxxxx欧美| 欧美一区二区三区在线观看| 天堂网av2018| 久久精品国产色蜜蜜麻豆| 视频一区二区在线| 第四色男人最爱上成人网| 亚洲天堂开心观看| 国产真人无遮挡作爱免费视频| 久久美女高清视频| 男人舔女人下面高潮视频| 性人久久久久| 日韩免费av在线| 青青久在线视频| 色综合天天狠狠| 天堂久久精品忘忧草| 视频一区二区国产| 日韩亚洲不卡在线| jizz久久久久久| 中文字幕在线看视频国产欧美在线看完整 | 日本wwww色| 激情婷婷亚洲| 久久大香伊蕉在人线观看热2| 美女高潮视频在线看| 国产视频久久网| 69av视频在线观看| 国产精品卡一卡二卡三| 亚洲黄色av片| 海角社区69精品视频| 久久爱av电影| 日韩成人亚洲| 久久久精品在线| 亚洲欧美激情另类| 欧美日韩亚洲成人| 亚洲第一综合网| 精品在线观看视频| 2018国产在线| 国产一区二区三区四区大秀| 国产精品最新在线观看| 日本h片在线| 精品视频在线播放免| 欧美在线视频精品| 亚洲精品videosex极品| 日批在线观看视频| 热久久国产精品| 人人妻人人澡人人爽精品欧美一区| 秋霞一区二区三区| 26uuu亚洲伊人春色| eeuss影院www在线观看| 日韩免费在线观看| 丁香社区五月天| 综合精品久久久| 大尺度做爰床戏呻吟舒畅| 免费视频一区二区| www插插插无码免费视频网站| 日韩在线黄色| 91影视免费在线观看| 国产免费拔擦拔擦8x高清在线人| 亚洲天堂av女优| 亚洲欧美另类日韩| 欧美日韩免费一区二区三区 | 亚洲国产二区| 五月天婷亚洲天综合网鲁鲁鲁| 国产亚洲高清在线观看| 日本伊人精品一区二区三区介绍| 免费黄网在线观看| 亚洲精品福利在线| 国产精品无码一区二区桃花视频| 精品福利一区二区| 国产在线一卡二卡| 国产清纯美女被跳蛋高潮一区二区久久w| 九九九久久久久久久| 玖玖在线精品| www.av片| 国产精品啊啊啊| 亚洲国产精品综合| 西瓜成人精品人成网站| 亚洲一区二区三区在线视频| 不卡av播放| 97福利一区二区| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲无亚洲人成网站77777| 老司机午夜福利视频| 欧美一区二区三区的| 成年人视频免费| 欧美色视频日本高清在线观看| 无码人妻精品一区二区三区夜夜嗨| 国产日韩欧美a| wwwwww日本| 91在线国内视频| 欧类av怡春院| 国产大陆a不卡| 天天色天天干天天色| 青青草原综合久久大伊人精品优势| 久久99久久久久久| 国产精品久久久久无码av| 日韩福利视频| 九九免费精品视频在线观看| 国产一区二区久久久| 99re热精品视频| 1卡2卡3卡精品视频| 亚洲香蕉久久| 国产一区二区在线免费视频| 黄页免费欧美| 国产一区视频在线播放| 亚洲精品aa| 91视频免费网站| 国产麻豆精品| 不卡视频一区| silk一区二区三区精品视频| av一区二区三区免费| 涩爱av色老久久精品偷偷鲁| 亚洲综合在线中文字幕| 亚洲日本va中文字幕| 国产精品视频500部| 女仆av观看一区| 久久国产精品99久久久久久丝袜| 精品视频在线你懂得| 精品一区二区久久久久久久网站| 欧美在线关看| 欧美一级爽aaaaa大片| 欧美日韩性在线观看| 亚洲福利av在线| 97欧美在线视频| 成年人三级视频| 激情久久久久| 国产成人无码a区在线观看视频| 国产精品日本欧美一区二区三区| 欧美女人性生活视频| 日韩精品乱码免费| 亚洲 国产 图片| 福利电影一区二区三区| 喷水视频在线观看| 国产三级精品在线| 少妇高潮在线观看| 一区二区三区四区在线| 久久国产精品免费看| 91国产免费观看| 国产精品视频久久久久久| 精品国产乱码久久久久久老虎| 日韩中文字幕观看| 亚洲一级一级97网| 伊人在我在线看导航| 欧美有码在线观看视频| 精品女同一区二区三区在线观看| 亚洲中国色老太| 秋霞综合在线视频| 亚洲国产日韩美| 欧美三级网页| 国产精品wwwww| 韩国av一区二区三区| 美国黄色a级片| 亚洲女同一区二区| 四虎成人在线观看| 制服丝袜在线91| 青青九九免费视频在线| 久久好看免费视频| 日韩精品极品| 亚洲已满18点击进入在线看片| 国产精品白浆| 国产奶头好大揉着好爽视频| 国产欧美另类| 伊人免费视频二| 国产亚洲欧洲997久久综合| 久久精品一区二区三| 91国在线观看| 日日躁夜夜躁白天躁晚上躁91| 一区二区三区动漫| 黄色在线免费观看网站| 亚洲综合av影视| re久久精品视频| 国产午夜福利100集发布| 国内不卡的二区三区中文字幕| 国产又爽又黄无码无遮挡在线观看| 亚洲欧美色一区| 国产美女www| 精品亚洲永久免费精品| 男人添女人下部高潮视频在线观看| 国产精品毛片a∨一区二区三区|国| av一级亚洲| 一级特黄妇女高潮| 美女一区二区三区在线观看| 国产激情视频网站| 一区2区3区在线看| 国产又粗又猛视频免费| 亚洲社区在线观看| 成年人黄色大片在线| 51精品国产人成在线观看| 日本一本不卡| 青青草av网站| 久久久久久久综合色一本| 九九热国产视频| 精品日韩一区二区三区| 国产激情在线| 成人乱人伦精品视频在线观看| 精品一区av| 男人亚洲天堂网| 91老司机福利 在线| 日韩熟女精品一区二区三区| 精品国产乱码久久久久久久久 | 国产精品欧美日韩| 九九亚洲视频| 中国丰满人妻videoshd | 国产美女精品在线观看| 欧美成人精品| 韩国三级与黑人| 亚洲自拍与偷拍| 四虎免费在线观看| 午夜精品久久久久久99热| 久久视频在线观看| 国产毛片视频网站| 91视频.com| 手机av免费观看| 亚洲香蕉av在线一区二区三区| 成人香蕉视频| 天天综合狠狠精品| 另类欧美日韩国产在线| 久久午夜精品视频| 欧美裸体bbwbbwbbw| 超碰在线国产| 国产欧美日韩中文字幕在线| 99久久婷婷这里只有精品| 国产福利精品一区二区三区| 亚洲日本一区二区| 亚洲第一天堂网| 欧美一级视频一区二区| 欧美男gay| 午夜啪啪小视频| 亚洲黄色录像片| 天天干天天草天天射| 欧洲精品在线视频| 日韩欧美一区二区三区在线视频 | 亚洲天堂av资源在线观看| 日韩亚洲欧美视频| 久久久久久久久伊人| 中文字幕视频二区| 欧美另类极品videosbest最新版本| 成人av综合网| 国产视频一区二区三区在线播放| 中文字幕欧美国产| va视频在线观看| 欧美孕妇性xx| 911精品美国片911久久久| 日韩黄色一区二区| 色综合色狠狠天天综合色| 在线观看美女网站大全免费| 97超碰在线播放| 久久午夜精品| 欧美卡一卡二卡三| 日韩精品免费在线视频| 日本免费一区二区三区等视频| 免费看日b视频| 国产亚洲精品免费| 精品国产无码一区二区| 欧美一区二三区| 中文字幕一区二区三区在线视频 | 精品国产美女| 国产又粗又猛大又黄又爽| 狠狠色噜噜狠狠狠狠97| 天堂地址在线www| 精品网站在线看| 国产美女主播视频一区| 男人午夜免费视频| 欧美猛男性生活免费| 激情婷婷综合| 在线精品视频播放| 欧美美女一区二区在线观看| 精品丝袜在线| 看一级黄色录像| 国产午夜亚洲精品午夜鲁丝片|