日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache ZooKeeper - ZK的基本特性与节点应用场景一览

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache ZooKeeper - ZK的基本特性与节点应用场景一览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • ZK產生的背景
  • 安裝
    • JDK依賴
    • 下載
    • 解壓
    • 修改配置文件
    • 啟動 / 停止
    • 連接服務器
  • 配置文件說明
  • ZK 核心概念 (文件系統數據結構+監聽通知機制)
    • 文件系統數據結構
    • 6種Node類型
    • 監聽通知機制
  • ZK的應用場景


概述

說點正確的廢話

zookeeper是一個分布式協調框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。

ZK由JAVA編寫,支持JAVA 和C兩種語言的客戶端。


ZK產生的背景

通常情況下,單個物理節點很容易達到性能,計算或者容量的瓶頸,所以這個時候就需要多個物理節點來共同完成某項任務,一個分布式系統的本質是分布在不同網絡或計算機上的程序組件,彼此通過信息傳遞來協同工作的系統,而Zookeeper正是一個分布式應用協調框架,在分布式系統架構中有廣泛的應用場景。

項目從單體到分布式轉變之后,將會產生多個節點之間協同的問題

  • 每天的定時任務由誰哪個節點來執行
  • RPC調用時的服務發現
  • 如何保證并發請求的冪等
  • 這些問題可以統一歸納為多節點協調問題,如果靠節點自身進行協調這是非常不可靠的,性能上也不可取。必須由一個獨立的服務做協調工作,它必須可靠,而且保證性能。


    安裝

    JDK依賴

    Java編寫,依賴JDK, JDK Version >=8


    下載

    官網下載: https://zookeeper.apache.org/releases.html#download

    當然了,國內也有鏡像可以下載,比如

    3.5.8 版本

    [root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

    3.6.2 版本

    [root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

    這里我們選用3.5.8的版本


    解壓

    [root@localhost ~]# tar -xvzf apache-zookeeper-3.5.8-bin.tar.gz

    修改配置文件

    cd {zookeeper_home}/conf # 按實際路徑調整 cp zoo_sample.cfg zoo.cfg

    啟動 / 停止

    {zookeeper_home}/bin/zkServer.sh # 按實際路徑調整,查看啟動支持哪些參數[root@localhost bin]# ./zkServer.sh /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd} [root@localhost bin]#

    啟動,采用默認的配置文件

    [root@localhost bin]# ./zkServer.sh start /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@localhost bin]#

    停止

    [root@localhost bin]# ./zkServer.sh stop /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED [root@localhost bin]#

    也可以指定配置文件,不指定的話默認使用 conf/zoo.cfg

    [root@localhost bin]# ./zkServer.sh start ../conf/zoo.cfg

    連接服務器

    bin/zkCli.sh ‐server ip:port

    例子

    [root@localhost bin]# ./zkCli.sh -server 192.168.126.129:2181 /usr/bin/java Connecting to 192.168.126.129:2181 2020-11-15 23:43:05,472 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT ........ ........ ........ Welcome to ZooKeeper!........ ........ ........WATCHER::WatchedEvent state:SyncConnected type:None path:null [zk: 192.168.126.129:2181(CONNECTED) 0]

    配置文件說明

    # zookeeper時間配置中的基本單位 (毫秒) tickTime=2000 # 允許follower初始化連接到leader最大時長,它表示tickTime時間倍數 即:initLimit*tickTime initLimit=10 # 允許follower與leader數據同步最大時長,它表示tickTime時間倍數 syncLimit=5 #zookeper 數據存儲目錄 dataDir=/tmp/zookeeper #對客戶端提供的端口號 clientPort=2181 #單個客戶端與zookeeper最大并發連接數 maxClientCnxns=60 # 保存的數據快照數量,之外的將會被清除 autopurge.snapRetainCount=3 #自動觸發清除任務時間間隔,小時為單位。默認為0,表示不自動清除。 autopurge.purgeInterval=1

    ZK 核心概念 (文件系統數據結構+監聽通知機制)

    可以先把Zookeeper 理解為 是一個用于存儲少量數據的基于內存的數據庫,主要有如下兩個核心的概念:文件系統數據結構+監聽通知機制


    文件系統數據結構

    Zookeeper維護一個類似文件系統的數據結構

    每個子目錄項都被稱作為 znode(目錄節點),和文件系統類似,可以自由的增加、刪除znode,在一個znode下增加、刪除子znode。


    6種Node類型

    • PERSISTENT-持久化目錄節點

    客戶端與zookeeper斷開連接后,該節點依舊存在,只要不手動刪除該節點,永遠存在


    • PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點

    客戶端與zookeeper斷開連接后,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號 ,非常適合用于分布式鎖、分布式選舉等場景


    • EPHEMERAL-臨時目錄節點

    客戶端與zookeeper斷開連接后,該節點被刪除 適用于心跳,服務發現等場景。


    • EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點

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


    • Container 節點

    3.5.3 版本新增,如果Container節點下面沒有子節點,則Container節點在未來會被Zookeeper自動清除,定時任務默認60s 檢查一次


    • TTL 節點 (Time To Life)

    默認禁用,只能通過系統配置 zookeeper.extendedTypesEnabled=true 開啟,不穩定



    監聽通知機制

    客戶端注冊監聽它關心的任意節點,或者目錄節點及遞歸子目錄節點

  • 如果注冊的是對某個節點的監聽,則當這個節點被刪除,或者被修改時,對應的客戶端將被通知

  • 如果注冊的是對某個目錄的監聽,則當這個目錄有子節點被創建,或者有子節點被刪除,對應的客戶端將被通知

  • 如果注冊的是對某個目錄的遞歸子節點進行監聽,則當這個目錄下面的任意子節點有目錄結構的變化(有子節點被創建,或被刪除)或者根節點有數據變化時,對應的客戶端將被通知。

  • 注意:

  • 所有的通知都是一次性的,及無論是對節點還是對目錄進行的監聽,一旦觸發,對應的監聽即被移除。
  • 遞歸子節點,監聽是對所有子節點的,所以,每個子節點下面的事件同樣只會被觸發一次。

  • ZK的應用場景

  • 分布式配置中心
  • 分布式注冊中心
  • 分布式鎖
  • 分布式隊列
  • 集群選舉
  • 分布式屏障
  • 發布/訂閱
  • 總結

    以上是生活随笔為你收集整理的Apache ZooKeeper - ZK的基本特性与节点应用场景一览的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。