ZooKeeper的持久化节点如何操作
导读:ZooKeeper 持久化节点操作指南 一 概念与特点 持久化节点 Persistent:默认创建的节点类型,创建后不会随会话结束而删除,需要显式删除。 持久有序节点 Persistent Sequential:在节点名后自动追加自增序号...
ZooKeeper 持久化节点操作指南
一 概念与特点
- 持久化节点 Persistent:默认创建的节点类型,创建后不会随会话结束而删除,需要显式删除。
- 持久有序节点 Persistent Sequential:在节点名后自动追加自增序号,用于排序、队列等场景。
- 与之对比:临时节点 Ephemeral 会在会话过期/关闭时自动删除,且不能创建子节点。
- 常用命令前缀:
create [-s] [-e] path data(不带 -e 即为持久节点;带 -s 为有序)。
二 Shell 常用操作
- 连接客户端
- 启动服务:
zkServer.sh start(集群可用status查看状态) - 连接:
zkCli.sh -server < host:2181>
- 启动服务:
- 创建
- 持久节点:
create /app "hello" - 持久有序节点:
create -s /app/seq "item"(生成如 /app/seq0000000001)
- 持久节点:
- 读取
- 查看数据:
get /app - 查看元数据:
get -s /app(含 cZxid、ctime、mZxid、mtime、dataVersion、cversion、numChildren 等) - 查看子节点:
ls /app;递归查看:ls -R /app
- 查看数据:
- 更新
- 普通更新:
set /app "world" - 乐观锁更新:
set /app "world" < version>(使用get -s获取当前 dataVersion)
- 普通更新:
- 删除
- 删除单个节点:
delete /app/seq0000000001 - 递归删除:
deleteall /app(新版中rmr已被弃用,建议使用deleteall)
- 删除单个节点:
- 监听
- 子节点变化:
ls -w /app - 节点数据变化:
get -w /app
- 子节点变化:
- 退出:
quit
以上命令均为 zkCli 常用语法,含创建、查看、更新、删除与监听等核心操作。
三 Java API 示例
- 依赖(Maven)
- groupId:org.apache.zookeeper,artifactId:zookeeper,version:3.6.3(可按需调整)
- 创建持久节点
- 代码示例:
zk.create("/myNode", "My data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- 代码示例:
- 读取与更新
- 读取:
zk.getData("/myNode", false, stat) - 更新(带版本控制):
zk.setData("/myNode", "updated".getBytes(), stat.getVersion());
- 读取:
- 说明
- 持久节点使用 CreateMode.PERSISTENT;临时节点使用 CreateMode.EPHEMERAL。
- 更新时的 version 来自
exists或getData返回的 Stat,用于实现乐观锁。
四 注意事项
- 临时节点不能创建子节点,否则会报错 “Ephemerals cannot have children”。
- 删除非空节点需先删除子节点,或使用
deleteall递归删除。 - 使用
set path data [version]时,若指定了 version,需与服务器当前 dataVersion 一致,否则更新失败(乐观锁)。 - 观察子节点变化可用
ls -w,观察数据变化可用get -w;事件触发一次后即失效,需要重新注册。 - 在 zkCli 中,
ls2已被弃用,建议使用ls -s path查看详细信息。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ZooKeeper的持久化节点如何操作
本文地址: https://pptw.com/jishu/768902.html
