在ZooKeeper中执行简单的create()方法调用似乎是递增2而不是正常的。虽然这实际上与JavaDoc保持一致,{{3}}仅指定序列“单调增加”而不参考增量,但我不确定为什么会开始发生这种情况。
zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
我最终得到了“key-v-0000000056”,然后是“key-v-0000000058”...... 57在哪里?
答案 0 :(得分:6)
创建或删除任何子znode会增加父znode的cversion。因为在看起来你正在使用的ZooKeeper 3.3.3中,用于顺序znode创建的计数器本身就是cversion,两个连续创建之间的任何“虚假”创建/删除都是你遇到的行为的最可能原因。
请记住,在ZooKeeper 3.4.x中,删除不再影响父序列计数器:DataNode
内部保存PersistedStat
,其中cversion完全代表创建的数量;相反,通过查询节点获得的Stat
的反转仍然表示子项更改的数量:Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren
。
答案 1 :(得分:3)
您是否在创建下一个密钥之前删除了key-v-0000000056?顺序id只是父节点的cversion,删除/创建父节点上的子节点会增加cversion。
答案 2 :(得分:0)
在官方文件中,它说:
如果设置了ZOO_SEQUENCE标志,则会将唯一的单调递增序列号附加到路径名称。“
这保证了数字的增加顺序,但不一定是连续的。