ZooKeeper 命令行工具 zkCli.sh(Linux/Unix)和 zkCli.cmd(Windows)

以下是 ZooKeeper 命令行工具 zkCli.sh(Linux/Unix)和 zkCli.cmd(Windows) 的详细使用说明。该工具是 Apache ZooKeeper 自带的客户端命令行接口,用于连接 ZooKeeper 服务器并执行基本的 ZNode 操作。


🧩 一、什么是 zkCli?

  • zkCli.sh / zkCli.cmd 是 ZooKeeper 提供的轻量级命令行客户端。
  • 它允许用户连接到 ZooKeeper 集群,查看、创建、修改、删除节点(ZNode),以及监听事件。
  • 通常用于:
    • 调试 ZooKeeper 数据
    • 查看分布式系统的元数据(如 Kafka、HBase、Dubbo 等依赖 ZooKeeper 的系统)
    • 故障排查与手动维护

⚠️ 注意:不要在生产环境中随意修改 ZooKeeper 节点数据,可能导致系统异常。


🚀 二、启动 zkCli

1. 基本语法

# Linux / macOS
./zkCli.sh -server <host:port>

# Windows
zkCli.cmd -server <host:port>

2. 示例

# 连接本地 ZooKeeper 默认端口 2181
./zkCli.sh -server localhost:2181

# 连接远程 ZooKeeper
./zkCli.sh -server 192.168.1.100:2181

如果不指定 -server,默认连接 localhost:2181


📚 三、常用命令详解

进入 zkCli 后,可执行以下命令操作 ZNode。

命令语法说明
lsls <path>列出指定路径下的子节点
ls -Rls -R <path>递归列出所有子节点(ZooKeeper 3.5.3+)
createcreate <path> <data>创建持久节点
create -ecreate -e <path> <data>创建临时节点(会话结束自动删除)
create -screate -s <path> <data>创建顺序节点(自动添加 10 位数字序号)
create -e -screate -e -s <path> <data>创建临时顺序节点
getget <path>获取节点数据和状态信息(如版本、ACL、时间戳等)
setset <path> <data>更新节点数据
deletedelete <path>删除节点(仅当无子节点时)
deletealldeleteall <path>递归删除节点及其所有子节点(ZooKeeper 3.5.3+ 支持)
statstat <path>查看节点状态(等价于 get 不带数据输出)
closeclose关闭当前会话连接
quitquit退出 zkCli 客户端
historyhistory查看命令历史
printwatchesprintwatches on/off开启/关闭事件通知打印

🔧 四、命令使用示例

假设已连接 ZooKeeper:

Connecting to localhost:2181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

1. 查看根节点内容

ls /

输出示例:

[zookeeper, brokers, consumers, config]

2. 创建持久节点

create /my-node "hello zookeeper"

输出:

Created /my-node

3. 获取节点数据

get /my-node

输出:

hello zookeeper
cZxid = 0x10000000a
ctime = Mon Apr 05 10:00:00 CST 2025
mZxid = 0x10000000a
mtime = Mon Apr 05 10:00:00 CST 2025
...

4. 创建临时节点

create -e /temp-node "I am temporary"

断开连接后,该节点将自动删除。

5. 创建顺序节点

create -s /seq-node "sequence-"

输出:

Created /seq-node0000000001

6. 更新节点数据

set /my-node "updated data"

7. 删除节点

delete /my-node

要求节点无子节点。

8. 递归删除(推荐用于清理)

deleteall /test-path

会删除 /test-path 及其所有子节点。

9. 递归查看所有节点

ls -R /

输出所有层级的节点路径,便于审计或排查。


🛑 五、重要注意事项

  1. 禁止随意修改系统节点

    • /zookeeper/brokers/controller 等由 Kafka 或其他系统管理的路径。
    • 错误操作可能导致服务不可用。
  2. 临时节点(Ephemeral Node)

    • 会话断开后自动删除。
    • 常用于服务发现、领导者选举。
  3. 顺序节点(Sequential Node)

    • 自动生成唯一序号,适用于分布式锁、队列等场景。
  4. ZooKeeper 不适合存储大量数据

    • 单个节点数据建议小于 1MB,通常只存元数据。
  5. Watch 机制

    • getls 等操作可设置监听器,但是一次性的(触发一次后需重新注册)。

🔄 六、典型应用场景(结合 Kafka)

虽然现代 Kafka 已转向 KRaft 模式,但在旧版 Kafka 中,可通过 zkCli 查看元数据:

# 查看所有 Broker
ls /brokers/ids

# 查看某个 Broker 信息
get /brokers/ids/1001

# 查看所有主题
ls /brokers/topics

# 查看控制器(Controller)
get /controller

💡 提示:这些信息现在更推荐使用 Kafka 命令行工具查看,如:

kafka-broker-api-versions.sh --bootstrap-server localhost:9092
kafka-topics.sh --bootstrap-server localhost:9092 --list

🧱 七、ZooKeeper 数据模型简述

  • 树形结构:所有数据以 / 为根的路径组织。
  • ZNode 类型
    • 持久节点(Persistent)
    • 临时节点(Ephemeral)
    • 顺序节点(Sequential)
  • 版本控制:每个节点有 versioncZxidmZxid 等用于一致性控制。
  • ACL 支持:可设置访问控制列表(如 digest、ip、auth 等权限)。

🧰 八、实用技巧

1. 批量执行命令(脚本化)

echo "ls /" | ./zkCli.sh -server localhost:2181

2. 静默模式(不打印欢迎信息)

某些版本支持 -non-interactive 模式,适合自动化脚本。

3. 检查 ZooKeeper 是否健康

echo "ruok" | nc localhost 2181
# 返回 "imok"

📚 九、参考资料

  • ZooKeeper 官方文档:
    https://zookeeper.apache.org/doc/current/
  • ZooKeeper CLI 源码说明:
    https://github.com/apache/zookeeper/tree/main/bin
  • Kafka 与 ZooKeeper 关系(历史):
    https://kafka.apache.org/documentation/#zk

✅ 总结

功能推荐程度说明
查看 ZNode 数据安全,常用于调试
创建/删除测试节点仅限测试环境
修改系统节点极其危险
生产环境频繁使用⚠️建议通过 API 或管理工具操作
替代方案使用 zk-shellZooInspector 或 REST API

📌 最佳实践建议

使用 zkCli 仅用于只读查询测试环境调试,生产环境的操作应通过应用程序或管理平台完成,避免人为误操作。

如需更友好的界面工具,可考虑:

  • ZooInspector(图形化)
  • zk-shell(Python 工具,功能更强)
  • 第三方管理平台(如 Kafka Manager、Dubbo Admin 等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值