91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java大數據開發中ZooKeeper的原理機制是什么

發布時間:2021-12-03 16:00:33 來源:億速云 閱讀:163 作者:柒染 欄目:大數據

本篇文章為大家展示了Java大數據開發中ZooKeeper的原理機制是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

下面我們先對這些參數做一些講解。

1.1 參數解讀

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


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


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


② initLimit =10:LF初始通信時限


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


③ syncLimit =5:LF同步通信時限


集群中Leader與Follower之間的最大響應時間單位,假如響應超過syncLimit * tickTime,Leader認為Follwer死掉,從服務器列表中刪除Follwer。


④ dataDir:數據文件目錄+數據持久化路徑

主要用于保存Zookeeper中的數據。


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

監聽客戶端連接的端口。


1.2 內部原理


1.2.1 選舉機制


半數機制:集群中半數以上機器存活,集群可用。所以Zookeeper適合安裝奇數臺服務器。


Zookeeper雖然在配置文件中并沒有指定Master和Slave。但是,Zookeeper工作時,是有一個節點為Leader,其他機器則為Follower,Leader是通過內部的選舉機制臨時產生的。


下圖是由五臺服務器組成的ZK集群,它們的id從1-5,同時它們都是最新啟動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的。假設這些服務器依序啟動,來看看會發生什么!

Java大數據開發中ZooKeeper的原理機制是什么

(1)服務器1啟動,此時只有它一臺服務器啟動了,它發出去的報文沒有任何響應,所以它的選舉狀態一直是LOOKING狀態;


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


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


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


(5)服務器5啟動,同4一樣當小弟。


1.2.2 節點類型


① Znode有兩種類型:


短暫(ephemeral):客戶端和服務器端斷開連接后,創建的節點自己刪除

持久(persistent):客戶端和服務器端斷開連接后,創建的節點不刪除


② Znode有四種形式的目錄節點(默認是persistent )


第一、持久化目錄節點(PERSISTENT)

客戶端與zookeeper斷開連接后,該節點依舊存在;


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


第三、臨時目錄節點(EPHEMERAL)

客戶端與zookeeper斷開連接后,該節點被刪除;


第四、臨時順序編號目錄節點(EPHEMERAL_SEQUENTIAL)

客戶端與zookeeper斷開連接后,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號。


1.2.3 監聽原理

Java大數據開發中ZooKeeper的原理機制是什么

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


(2)在main線程中創建Zookeeper客戶端(zkClient),這時會創建兩個線程:

線程connet負責網絡通信連接,連接服務器;

線程Listener負責監聽;


(3)客戶端通過connet線程連接服務器,圖中getChildren("/" , true) ," / "表示監聽的是根目錄,true表示監聽,不監聽用false;


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


(5)一旦被監聽的服務器根目錄下,數據或路徑發生改變,Zookeeper就會將這個消息發送給Listener線程;


(6)Listener線程內部調用process方法,采取相應的措施,例如更新服務器列表等。


監聽類型:

(1)監聽節點數據的變化:get path [watch]

(2)監聽子節點增減的變化:ls patch [watch]


1.2.4 數據寫入


Java大數據開發中ZooKeeper的原理機制是什么

(1)Client向Zookeeper的其中一個Server上寫數據,發送一個寫請求;


(2)如果那個Server不是Leader,那么Server會把接收到的請求進一步轉發給Leader,這個Leader會把寫請求廣播給各個server,各個Server寫成功后就會通知Leader;


(3)當Leader收到大多數Server數據寫成功了,那么就說明數據寫成功了,比如三個節點,只要兩個節點數據寫成功了,就認為數據寫成功了;


(4)Server1會通知Client數據寫成功了,這時就認為整個寫操作成功。

上述內容就是Java大數據開發中ZooKeeper的原理機制是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵南县| 西藏| 琼海市| 韶关市| 临湘市| 华安县| 手游| 敖汉旗| 肇源县| 灵寿县| 陇川县| 田林县| 辛集市| 江门市| 黄浦区| 潮安县| 鲜城| 长岛县| 三穗县| 鲁山县| 岗巴县| 临猗县| 靖安县| 湘阴县| 武功县| 渭源县| 莎车县| 科技| 涿州市| 安泽县| 白银市| 阿克陶县| 辛集市| 绿春县| 苗栗市| 屯门区| 岳阳县| 马鞍山市| 开封县| 延川县| 厦门市|