持久节点(PERSISTENT)
znode在创建之后即使发生ZooKeeper集群宕机或者client宕机也不会丢失
临时节点(EPHEMERAL )
client宕机或者client在指定的timeout时间内没有给ZooKeeper集群发消息,这样的znode就会消失
持久顺序节点(PERSISTENT_SEQUENTIAL)
znode除了具备持久性znode的特点之外,znode的名字具备顺序性
临时顺序节点(EPHEMERAL_SEQUENTIAL)
znode除了具备临时性znode的特点之外,zorde的名字具备顺序性
Container节点
Container容器节点,当容器中没有任何子节点,该容器节点会被zk定期删除(定时任务默认60s 检查一次)
ZK 服务端启动后,会有一个单独的线程去扫描,所有的容器节点,当发现容器节点的子节点数量为 0 时,会自动删除该节点。可以用于 leader 或者锁的场景中
TTL节点
带过期时间节点,默认禁用,需要在zoo.cfg中添加 extendedTypesEnabled=true 开启
ttl不能用于临时节点
节点状态信息
cZxid :Znode创建的事务id
ctime:节点创建时的时间戳
mZxid :Znode被修改的事务id,即每次对znode的修改都会更新mZxid<br>
对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id),通过zxid,可以确定更新操作的先后顺序
例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生,zxid对于整个zk都是唯一的,即使操作的是不同的znode
pZxid: 表示该节点的子节点列表最后一次修改的事务ID
添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID
注意: 只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid
mtime:节点最新一次更新发生时的时间戳
cversion :子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1
dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据)
可有效避免了数据更新时出现的先后顺序问题
ephemeralOwner:如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id
如果不是, ephemeralOwner值为0(持久节点)<br>
Zookeeper 节点特性总结
同一级节点 key 名称是唯一的
已存在/lock节点,再次创建会提示已经存在
创建节点时,必须要带上全路径
session 关闭,临时节点清除
自动创建顺序节点
watch 机制,监听节点变化
delete 命令只能一层一层删除。提示:新版本可以通过 deleteall 命令递归删除