Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么

本篇文章為大家展示了Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

在金東等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,金東網(wǎng)站建設(shè)費(fèi)用合理。

下面我們先對(duì)這些參數(shù)做一些講解。

1.1 參數(shù)解讀

Zookeeper中的配置文件zoo.cfg中參數(shù)含義解讀如下:

① tickTime =2000:通信心跳數(shù),Zookeeper服務(wù)器與客戶端心跳時(shí)間,單位毫秒

Zookeeper使用的基本時(shí)間,服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔,也就是每個(gè)tickTime時(shí)間就會(huì)發(fā)送一個(gè)心跳,時(shí)間單位為毫秒。它用于心跳機(jī)制,并且設(shè)置最小的session超時(shí)時(shí)間為兩倍心跳時(shí)間。(session的最小超時(shí)時(shí)間2*tickTime)

② initLimit =10:LF初始通信時(shí)限

集群中的Follower跟隨者服務(wù)器與Leader領(lǐng)導(dǎo)者服務(wù)器之間初始連接時(shí)能容忍的最多心跳數(shù)(tickTime的數(shù)量),用它來限定集群中的Zookeeper服務(wù)器連接到Leader的時(shí)限。

③ syncLimit =5:LF同步通信時(shí)限

集群中Leader與Follower之間的最大響應(yīng)時(shí)間單位,假如響應(yīng)超過syncLimit * tickTime,Leader認(rèn)為Follwer死掉,從服務(wù)器列表中刪除Follwer。

④ dataDir:數(shù)據(jù)文件目錄+數(shù)據(jù)持久化路徑

主要用于保存Zookeeper中的數(shù)據(jù)。

⑤ clientPort =2181:客戶端連接端口

監(jiān)聽客戶端連接的端口。

1.2 內(nèi)部原理

1.2.1 選舉機(jī)制

半數(shù)機(jī)制:集群中半數(shù)以上機(jī)器存活,集群可用。所以Zookeeper適合安裝奇數(shù)臺(tái)服務(wù)器。

Zookeeper雖然在配置文件中并沒有指定Master和Slave。但是,Zookeeper工作時(shí),是有一個(gè)節(jié)點(diǎn)為Leader,其他機(jī)器則為Follower,Leader是通過內(nèi)部的選舉機(jī)制臨時(shí)產(chǎn)生的。

下圖是由五臺(tái)服務(wù)器組成的ZK集群,它們的id從1-5,同時(shí)它們都是最新啟動(dòng)的,也就是沒有歷史數(shù)據(jù),在存放數(shù)據(jù)量這一點(diǎn)上,都是一樣的。假設(shè)這些服務(wù)器依序啟動(dòng),來看看會(huì)發(fā)生什么!

Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么

(1)服務(wù)器1啟動(dòng),此時(shí)只有它一臺(tái)服務(wù)器啟動(dòng)了,它發(fā)出去的報(bào)文沒有任何響應(yīng),所以它的選舉狀態(tài)一直是LOOKING狀態(tài);

(2)服務(wù)器2啟動(dòng),它與最開始啟動(dòng)的服務(wù)器1進(jìn)行通信,互相交換自己的選舉結(jié)果,由于兩者都沒有歷史數(shù)據(jù),所以id值較大的服務(wù)器2勝出,但是由于沒有達(dá)到超過半數(shù)以上的服務(wù)器都同意選舉它(這個(gè)例子中的半數(shù)以上是3),所以服務(wù)器1、2還是繼續(xù)保持LOOKING狀態(tài);

(3)服務(wù)器3啟動(dòng),根據(jù)前面的理論分析,服務(wù)器3成為服務(wù)器1、2、3中的老大,而與上面不同的是,此時(shí)有三臺(tái)服務(wù)器選舉了它,所以它成為了這次選舉的Leader;

(4)服務(wù)器4啟動(dòng),根據(jù)前面的分析,理論上服務(wù)器4應(yīng)該是服務(wù)器1、2、3、4中最大的,但是由于前面已經(jīng)有半數(shù)以上的服務(wù)器選舉了服務(wù)器3,所以它只能接收當(dāng)小弟的命了;

(5)服務(wù)器5啟動(dòng),同4一樣當(dāng)小弟。

1.2.2 節(jié)點(diǎn)類型

① Znode有兩種類型:

短暫(ephemeral):客戶端和服務(wù)器端斷開連接后,創(chuàng)建的節(jié)點(diǎn)自己刪除

持久(persistent):客戶端和服務(wù)器端斷開連接后,創(chuàng)建的節(jié)點(diǎn)不刪除

② Znode有四種形式的目錄節(jié)點(diǎn)(默認(rèn)是persistent )

第一、持久化目錄節(jié)點(diǎn)(PERSISTENT)

客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)依舊存在;

第二、持久化順序編號(hào)目錄節(jié)點(diǎn)(PERSISTENT_SEQUENTIAL)客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)依舊存在,只是Zookeeper給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào);

第三、臨時(shí)目錄節(jié)點(diǎn)(EPHEMERAL)

客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)被刪除;

第四、臨時(shí)順序編號(hào)目錄節(jié)點(diǎn)(EPHEMERAL_SEQUENTIAL)

客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)被刪除,只是Zookeeper給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào)。

1.2.3 監(jiān)聽原理

Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么

(1)在Zookeeper的API操作中,創(chuàng)建main()主方法即主線程;

(2)在main線程中創(chuàng)建Zookeeper客戶端(zkClient),這時(shí)會(huì)創(chuàng)建兩個(gè)線程:

線程connet負(fù)責(zé)網(wǎng)絡(luò)通信連接,連接服務(wù)器;

線程Listener負(fù)責(zé)監(jiān)聽;

(3)客戶端通過connet線程連接服務(wù)器,圖中g(shù)etChildren("/" , true) ," / "表示監(jiān)聽的是根目錄,true表示監(jiān)聽,不監(jiān)聽用false;

(4)在Zookeeper的注冊(cè)監(jiān)聽列表中將注冊(cè)的監(jiān)聽事件添加到列表中,表示這個(gè)服務(wù)器中的/path,即根目錄這個(gè)路徑被客戶端監(jiān)聽了;

(5)一旦被監(jiān)聽的服務(wù)器根目錄下,數(shù)據(jù)或路徑發(fā)生改變,Zookeeper就會(huì)將這個(gè)消息發(fā)送給Listener線程;

(6)Listener線程內(nèi)部調(diào)用process方法,采取相應(yīng)的措施,例如更新服務(wù)器列表等。

監(jiān)聽類型:

(1)監(jiān)聽節(jié)點(diǎn)數(shù)據(jù)的變化:get path [watch]

(2)監(jiān)聽子節(jié)點(diǎn)增減的變化:ls patch [watch]

1.2.4 數(shù)據(jù)寫入

Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么

(1)Client向Zookeeper的其中一個(gè)Server上寫數(shù)據(jù),發(fā)送一個(gè)寫請(qǐng)求;

(2)如果那個(gè)Server不是Leader,那么Server會(huì)把接收到的請(qǐng)求進(jìn)一步轉(zhuǎn)發(fā)給Leader,這個(gè)Leader會(huì)把寫請(qǐng)求廣播給各個(gè)server,各個(gè)Server寫成功后就會(huì)通知Leader;

(3)當(dāng)Leader收到大多數(shù)Server數(shù)據(jù)寫成功了,那么就說明數(shù)據(jù)寫成功了,比如三個(gè)節(jié)點(diǎn),只要兩個(gè)節(jié)點(diǎn)數(shù)據(jù)寫成功了,就認(rèn)為數(shù)據(jù)寫成功了;

(4)Server1會(huì)通知Client數(shù)據(jù)寫成功了,這時(shí)就認(rèn)為整個(gè)寫操作成功。

上述內(nèi)容就是Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:Java大數(shù)據(jù)開發(fā)中ZooKeeper的原理機(jī)制是什么
轉(zhuǎn)載來源:http://bm7419.com/article46/iippeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站營銷外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司虛擬主機(jī)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司