以下是 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。
| 命令 | 语法 | 说明 |
|---|---|---|
ls | ls <path> | 列出指定路径下的子节点 |
ls -R | ls -R <path> | 递归列出所有子节点(ZooKeeper 3.5.3+) |
create | create <path> <data> | 创建持久节点 |
create -e | create -e <path> <data> | 创建临时节点(会话结束自动删除) |
create -s | create -s <path> <data> | 创建顺序节点(自动添加 10 位数字序号) |
create -e -s | create -e -s <path> <data> | 创建临时顺序节点 |
get | get <path> | 获取节点数据和状态信息(如版本、ACL、时间戳等) |
set | set <path> <data> | 更新节点数据 |
delete | delete <path> | 删除节点(仅当无子节点时) |
deleteall | deleteall <path> | 递归删除节点及其所有子节点(ZooKeeper 3.5.3+ 支持) |
stat | stat <path> | 查看节点状态(等价于 get 不带数据输出) |
close | close | 关闭当前会话连接 |
quit | quit | 退出 zkCli 客户端 |
history | history | 查看命令历史 |
printwatches | printwatches 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 /
输出所有层级的节点路径,便于审计或排查。
🛑 五、重要注意事项
-
禁止随意修改系统节点
- 如
/zookeeper、/brokers、/controller等由 Kafka 或其他系统管理的路径。 - 错误操作可能导致服务不可用。
- 如
-
临时节点(Ephemeral Node)
- 会话断开后自动删除。
- 常用于服务发现、领导者选举。
-
顺序节点(Sequential Node)
- 自动生成唯一序号,适用于分布式锁、队列等场景。
-
ZooKeeper 不适合存储大量数据
- 单个节点数据建议小于 1MB,通常只存元数据。
-
Watch 机制
get、ls等操作可设置监听器,但是一次性的(触发一次后需重新注册)。
🔄 六、典型应用场景(结合 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)
- 版本控制:每个节点有
version、cZxid、mZxid等用于一致性控制。 - 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-shell、ZooInspector 或 REST API |
📌 最佳实践建议:
使用
zkCli仅用于只读查询或测试环境调试,生产环境的操作应通过应用程序或管理平台完成,避免人为误操作。
如需更友好的界面工具,可考虑:
- ZooInspector(图形化)
zk-shell(Python 工具,功能更强)- 第三方管理平台(如 Kafka Manager、Dubbo Admin 等)
1859

被折叠的 条评论
为什么被折叠?



