bigywater.tech
ZooKeeper · 6

ZooKeeper 命令行基础操作

zkCli 是学 ZooKeeper 的第一个工具。这篇用官方的 ZooKeeperMain 类把基础命令挨个执行一遍,把每条命令的真实输出和各种错误信息记下来,方便以后对照。

get -s
一条命令同时得到数据和完整的 stat
delete 只能删叶子
非空节点报 Node not empty,要用 deleteall
CLI 退出 ≠ 会话结束
临时节点在下一次命令里还看得到

增删改查

实测 · 本机执行输出
  [zk] create /app hello
      Created /app
  [zk] get /app
      hello
  [zk] set /app world
      (无输出)
  [zk] get -s /app
      world
      cZxid = 0x2
      ctime = Thu Oct 01 09:09:01 CST 2026
      mZxid = 0x5
      mtime = Thu Oct 01 09:09:02 CST 2026
      pZxid = 0x2
      cversion = 0
      dataVersion = 1
      aclVersion = 0
      ephemeralOwner = 0x0
      dataLength = 5
      numChildren = 0
  [zk] ls /
      [app, zookeeper]

子节点与递归

实测 · 本机执行输出
  [zk] create /app/a 1
      Created /app/a
  [zk] create /app/b 2
      Created /app/b
  [zk] ls -R /app
      /app
      /app/a
      /app/b
  [zk] delete /app
      Node not empty: /app
      Exiting JVM with code 1
  [zk] deleteall /app
      (无输出)
  [zk] ls /
      [zookeeper]

版本号与错误信息

实测 · 本机执行输出
  [zk] create /v x
      Created /v
  [zk] set -v 5 /v y
      version No is not valid : /v
      Exiting JVM with code 1
  [zk] set -v 0 /v y
      (无输出)
  [zk] get /nope
      Node does not exist: /nope
      Exiting JVM with code 1
  [zk] create /v dup
      Node already exists: /v
      Exiting JVM with code 1
  [zk] create /a/b/c x
      Node does not exist: /a/b/c
      Exiting JVM with code 1

失败命令的最后一行是 Exiting JVM with code 1,这是 ZooKeeperMain 在命令行模式下的行为:命令失败就以退出码 1 结束,写脚本时可以直接用退出码判断。

临时节点与顺序节点

实测 · 本机执行输出
  [zk] create -e /tmp1 data
      Created /tmp1
  [zk] ls /
      [tmp1, v, zookeeper]
  [zk] create -s /job- x
      Created /job-0000000003
  [zk] create -s /job- x
      Created /job-0000000004
  [zk] ls /
      [job-0000000003, job-0000000004, tmp1, v, zookeeper]

其它命令

实测 · 本机执行输出
  [zk] getAllChildrenNumber /
      7
  [zk] ls -s /
      [job-0000000003, job-0000000004, tmp1, v, zookeeper]
      cZxid = 0x0
      ctime = Thu Jan 01 08:00:00 CST 1970
      mZxid = 0x0
      mtime = Thu Jan 01 08:00:00 CST 1970
      pZxid = 0x23
      cversion = 5
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x0
      dataLength = 0
      numChildren = 5
  [zk] whoami
      Auth scheme: User
      ip: 127.0.0.1
   ZooKeeper -server host:port -client-configuration properties-file cmd args
   	addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_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] [-b] [-x] path
   	getAcl [-s] path
   	getAllChildrenNumber path

分步演示

zkCli 命令
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。命令用 java -cp … org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:7300 <命令> 执行,每条命令一次连接(交互式 shell 里的 watch、会话内的临时节点行为与此不同);输出中的连接日志与空行已被去掉
    • 没有验证:交互式 zkCli.sh 的 tab 补全与历史、addauth / setAcl(第 71 篇)、config / reconfig(第 50 篇)、addWatch(第 15 篇)、quota 命令
    京ICP备2026067502号-1京公网安备11010502063487号