5

在 ZooKeeper 中执行一个简单的 create() 方法调用似乎是增加了 2 而不是正常的。虽然这实际上与JavaDoc保持一致,它只指定序列“单调递增”而不参考增量,但我不确定为什么会开始发生这种情况。

zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);

我最终得到“key-v-0000000056”,然后是“key-v-0000000058”……57去哪儿了?

4

3 回答 3

7

创建或删除任何子znode 都会增加父 znode 的 cversion。由于在您似乎正在使用的 ZooKeeper 3.3.3 中,用于顺序 znode 创建的计数器是 cversion 本身,因此两个顺序创建之间的任何“虚假”创建/删除都是您遇到的行为的最可能原因。

请记住,在 ZooKeeper 3.4.x 中,删除不再影响父序列计数器:aDataNode内部包含 a PersistedStat,其中 cversion 准确表示创建的数量;相反,Stat您通过查询节点获得的 cversion 仍然表示子项更改的数量:Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren

于 2012-04-27T09:10:29.047 回答
3

您是否在创建下一个密钥之前删除了 key-v-0000000056?顺序 id 只是父节点的 cversion,在父节点上删除/创建子节点会增加 cversion。

于 2012-04-27T04:55:56.730 回答
0

在官方文件中,它说:

如果设置了 ZOO_SEQUENCE 标志,则将唯一的单调递增序列号附加到路径名。”

这保证了数字是递增的,但不一定是连续的。

于 2012-05-17T02:21:36.497 回答