Zookeeper 命令使用和数据说明

文章目录

    • 一、概述
    • 二、命令使用
      • [2.1 登录 ZooKeeper](#2.1 登录 ZooKeeper)
      • [2.2 ls 命令,查看目录树(节点)](#2.2 ls 命令,查看目录树(节点))
      • [2.3 create 命令,创建节点](#2.3 create 命令,创建节点)
      • [2.4 delete 命令,删除节点](#2.4 delete 命令,删除节点)
      • [2.5 set 命令,设置节点数据](#2.5 set 命令,设置节点数据)
      • [2.6 get 命令,获取节点数据](#2.6 get 命令,获取节点数据)
    • 三、数据解析

一、概述

  • ZooKeeper是一个开源的、分布式的协调服务,它主要用于分布式系统中的数据管理和协调任务。它提供了一个具有高可用性的分布式环境,用于存储和管理小规模数据,例如配置信息、命名服务、分布式锁等。

  • ZooKeeper的数据模型基于树形结构,类似于文件系统的目录结构。每个节点(Node)都可以存储一个小的数据块,称为节点数据(Node Data)。每个节点都有一个唯一的路径标识符,称为节点路径(Node Path)。节点路径使用斜杠(/)进行分隔,类似于文件系统的路径。

  • ZooKeeper的数据具有以下特点:

    1. 层次结构:ZooKeeper的数据以树形结构组织 ,类似于文件系统的目录结构。每个节点可以包含子节点,形成层次结构。(基于内存的,默认最大1MB)
    2. 有序性:ZooKeeper对创建和修改节点的顺序进行严格的有序性保证。每个写操作都会分配一个全局唯一的递增编号(称为ZXID),这样可以对操作进行排序和重放,确保数据的一致性。
    3. 临时节点:ZooKeeper支持创建临时节点。当创建临时节点的客户端与ZooKeeper失去连接时,该节点会被自动删除。这对于实现临时性的任务分配和会话管理 非常有用。(这点很重要:基于会话(Session)管理数据)
    4. 通知机制:ZooKeeper提供了通知机制,可以让客户端在节点数据发生变化时得到通知。通过注册监听器,客户端可以接收到节点的创建、删除和修改事件,从而实现对数据的实时监控和及时响应。
    5. 高可用性:ZooKeeper的设计目标之一是高可用性 。它使用了多数投票算法来实现主节点的选举,当集群中的节点发生故障时,可以自动选择新的主节点,保证系统的可用性。(节点可用性是通过选举超半数机制,数据可用性是广播半数以上成功算成功)
  • 在ZooKeeper集群中,每个节点都可以连接到其他节点,建立相互之间的通信和数据同步。通过这些连接,集群中的节点可以相互通知和同步数据的变化,以实现数据的一致性和高可用性。

  • 如果您还不会安装 ZooKeeper,请看这里 ZooKeeper 安装说明

  • Zookeeper 数据示意图

二、命令使用

2.1 登录 ZooKeeper

  • 使用 zkCli.sh 进入 ZooKeeper

    bash 复制代码
    zkCli.sh
    • 查看可使用的指令帮助

      zk: localhost:2181(CONNECTED) 0\] help ZooKeeper -server host:port -client-configuration properties-file cmd args addWatch \[-m mode\] path # optional mode is one of \[PERSISTENT, PERSISTEN T_RECURSIVE\] - default is PERSISTENT_RECURSIVE addauth scheme auth close config \[-c\] \[-w\] \[-s

      connect host:port

      create [-s] [-e] [-c] [-t ttl] path [data] [acl]

      delete [-v version] path

      deleteall path [-b batch size]

      delquota [-n|-b|-N|-B] path

      get [-s] [-w] path

      getAcl [-s] path

      getAllChildrenNumber path

      getEphemerals path

      history

      listquota path

      ls [-s] [-w] [-R] path

      printwatches on|off

      quit

      reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1 :port2;port3[,...]]] | [-add serverId=host:port1:port2;port3[,...]] [-remove s erverId[,...]*]

      redo cmdno

      removewatches path [-c|-d|-a] [-l]

      set [-s] [-v version] path data

      setAcl [-s] [-v version] [-R] path acl

      setquota -n|-b|-N|-B val path

      stat [-w] path

      sync path

      version

      whoami

      Command not found: Command not found help

      zk: localhost:2181(CONNECTED) 1

2.2 ls 命令,查看目录树(节点)

  • 如查看根节点下的所有节点

    bash 复制代码
    ls /

    zk: localhost:2181(CONNECTED) 2\] ls / \[zookeeper

    zk: localhost:2181(CONNECTED) 3

2.3 create 命令,创建节点

  • 选项说明

    • -s 创建会话唯一节点,创建会话唯一节点会在节点名称后加会话ID。
    • -e 创建临时节点,临时节点会话结束会消失。
  • 创建节点 aaa

    bash 复制代码
    create /aaa

zk: localhost:2181(CONNECTED) 3\] create /aaa Created /aaa \[zk: localhost:2181(CONNECTED) 4

  • 创建临时子节点 aaa/bbb 同时设置数据 222

    bash 复制代码
    create -e  /aaa/bbb "222"

    zk: localhost:2181(CONNECTED) 5\] create -e /aaa/bbb "222" Created /aaa/bbb \[zk: localhost:2181(CONNECTED) 6

  • 创建会话唯一节点 ccc

    bash 复制代码
    create -s /ccc "3333"

    zk: localhost:2181(CONNECTED) 23\] create -s /ccc "3333" Created /ccc0000000001 \[zk: localhost:2181(CONNECTED) 24

2.4 delete 命令,删除节点

  • 如下删除节点 a1

    bash 复制代码
    delete /a1

    zk: localhost:2181(CONNECTED) 24\] create /a1 "123" Created /a1 \[zk: localhost:2181(CONNECTED) 25\] ls / \[a1, aaa, ccc0000000001, zookeeper

    zk: localhost:2181(CONNECTED) 26\] delete /a1 \[zk: localhost:2181(CONNECTED) 27

2.5 set 命令,设置节点数据

  • 设置节点 aaa 数据 111

    bash 复制代码
    set /aaa "1111"

    zk: localhost:2181(CONNECTED) 6\] set /aaa "1111" \[zk: localhost:2181(CONNECTED) 7

2.6 get 命令,获取节点数据

  • 选项说明

    • -s 可以查看更多信息
  • 获取节点 aaa 和 aaa/bbb 的数据

    bash 复制代码
    get /aaa
    get /aaa/bbb
    get -s /aaa

zk: localhost:2181(CONNECTED) 7\] get /aaa 1111 \[zk: localhost:2181(CONNECTED) 8\] get /aaa/bbb 222 \[zk: localhost:2181(CONNECTED) 9

zk: localhost:2181(CONNECTED) 14\] get -s /aaa 111 cZxid = 0x100000004 ctime = Wed Oct 18 15:24:33 CST 2023 mZxid = 0x100000009 mtime = Wed Oct 18 15:35:46 CST 2023 pZxid = 0x100000006 cversion = 1 dataVersion = 3 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1

三、数据解析

  • 以上面返回数据为例进行解析,如下

zk: localhost:2181(CONNECTED) 14\] get -s /aaa 111 cZxid = 0x100000004 ctime = Wed Oct 18 15:24:33 CST 2023 mZxid = 0x100000009 mtime = Wed Oct 18 15:35:46 CST 2023 pZxid = 0x100000006 cversion = 1 dataVersion = 3 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1

  • 111:这是节点 /aaa 中的数据。get 命令执行后,它返回了节点 /aaa 的数据,这里是字符串 "111"。

  • cZxid = 0x100000004:这是有关节点的 ZooKeeper 事务 ID,用于标识节点的创建。cZxid 表示 "create ZooKeeper transaction ID"。

  • ctime = Wed Oct 18 15:24:33 CST 2023:这是节点的创建时间。ctime 表示 "creation time"。

  • mZxid = 0x100000009:这是有关节点的 ZooKeeper 事务 ID,用于标识节点的修改。mZxid 表示 "modify ZooKeeper transaction ID"。

  • mtime = Wed Oct 18 15:35:46 CST 2023:这是节点的修改时间。mtime 表示 "modification time"。

  • pZxid = 0x100000006:这是有关节点的 ZooKeeper 事务 ID,用于标识节点的父节点。pZxid 表示 "parent ZooKeeper transaction ID"。

  • cversion = 1:这是节点的子节点版本号,表示有多少子节点。在这种情况下,/aaa 节点有一个子节点。

  • dataVersion = 3:这是节点的数据版本号,表示数据被修改的次数。在这种情况下,数据已被修改 3 次。

  • aclVersion = 0:这是节点的 ACL(访问控制列表)版本号,表示节点的权限配置。在这里,版本号为 0。

  • ephemeralOwner = 0x0:这是有关节点的临时节点所有者的信息。在这里,节点不是临时节点,所以值为 0。

  • dataLength = 3:这是节点数据的长度,表示数据的字节数。在这里,数据长度为 3 字节。

  • numChildren = 1:这是节点的子节点数量,表示 /aaa 节点下有 1 个子节点。

相关推荐
死磕java的孤行者1 小时前
Redis 分布式锁
数据库·redis·分布式
潘多编程3 小时前
Spring Boot分布式项目重试实战:九种失效场景与正确打开方式
spring boot·分布式·后端
加油,旭杏6 小时前
【Redis】服务端高并发分布式结构
数据库·redis·分布式
信徒_9 小时前
Kafka 回溯消费
分布式·kafka
郭涤生12 小时前
Chapter 11: Stream Processing_《Designing Data-Intensive Application》
笔记·分布式
东阳马生架构15 小时前
zk基础—5.Curator的使用与剖析
zookeeper
惊醒幡然116 小时前
消息队列之-Kafka
分布式·kafka
kill bert17 小时前
第30周Java分布式入门 消息队列 RabbitMQ
java·分布式·java-rabbitmq