Apache zookeeper cxid在Zookeeper中用于什么

Apache zookeeper cxid在Zookeeper中用于什么,apache-zookeeper,Apache Zookeeper,在zookeeper日志和源代码中,我看到Request/Txn/Header中有一个名为cxid的字段 2018-06-24 02:28:55,003 [myid:1] - DEBUG [CommitProcessor:1:FinalRequestProcessor@88] - Processing request:: sessionid:0x1642e63d6060000 type:ping cxid:0xfffffffffffffffe zxid:0xfffffffffffffffe tx

在zookeeper日志和源代码中,我看到Request/Txn/Header中有一个名为
cxid
的字段

2018-06-24 02:28:55,003 [myid:1] - DEBUG [CommitProcessor:1:FinalRequestProcessor@88] - Processing request:: sessionid:0x1642e63d6060000 type:ping cxid:0xfffffffffffffffe zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a
我无法理解它的用途

zxid两部分:纪元和计数器。在我们的实施中 zxid是一个64位数字。我们将高阶32位用于 计数器的历元和低位32位。因为它有两个 部分以数字和一对整数的形式表示zxid, (纪元,伯爵)时代号代表领导层的变化。 每一次新领导人上台,都会有自己的时代 号码。我们有一个简单的算法将唯一的zxid分配给 建议:领导者只需增加zxid以获得唯一的 zxid适用于每个提案。激活领导力将确保 一个领导者使用给定的历元,因此我们的简单算法保证 每个提案都有一个唯一的id

ZooKeeper命名空间中的每个节点可以有与其关联的数据以及子节点。这就像有一个文件系统,允许一个文件也成为一个目录。我们使用术语znode来明确说明我们所说的是ZooKeeper数据节点

在描述ZooKeeper消息传递协议时,我们将讨论数据包、建议和消息:

数据包通过FIFO通道发送的字节序列

提案协议单位。提案通过与ZooKeeper服务器的法定人数交换数据包达成一致。大多数提案 包含消息,但新的_领导人提案就是一个示例 与消息不对应的建议

消息要自动广播到所有ZooKeeper服务器的字节序列。在提案中提出并达成一致的信息 在交付之前

如上所述,ZooKeeper保证消息的总顺序,同时也保证建议的总顺序。ZooKeeper使用ZooKeeper事务id(zxid)公开总订单。所有标书在提出时将加盖zxid印章,并准确反映总订单。提案将发送到所有ZooKeeper服务器,并在达到法定人数时提交。如果提案包含消息,则在提交提案时将传递该消息。确认表示服务器已将建议记录到永久存储中。我们的quorum要求任何一对quorum必须至少有一个公共服务器


cxid是在客户端向服务器发送数据包之前在客户端生成的一个单调递增的整数

下面是zookeeper日志的摘录,其中显示了三个不同会话的一些create命令。正如您在下面看到的,对于来自同一会话的每个新命令,
cxid
都在增加

7/2/18 10:52:06 PM IST session 0x1645c03e93f0004 cxid 0x0 zxid 0x100000021 createSession 30000

7/2/18 10:52:06 PM IST session 0x1645c03e93f0004 cxid 0x1 zxid 0x100000022 create '/data5,#74686973,v{s{31,s{'world,'anyone}}},F,5

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x2 zxid 0x100000023 create '/data5/path1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x3 zxid 0x100000024 create '/data5/path1/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x4 zxid 0x100000025 create '/data5/path1/child2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x5 zxid 0x100000026 create '/data5/path2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x6 zxid 0x100000027 create '/data5/path2/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:07 PM IST session 0x1645c03e93f0004 cxid 0x7 zxid 0x100000028 create '/data5/path2/child2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:07 PM IST session 0x1645c03e93f0005 cxid 0x0 zxid 0x100000029 createSession 30000

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x1 zxid 0x10000002a create '/data6,#74686973,v{s{31,s{'world,'anyone}}},F,6

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x2 zxid 0x10000002b create '/data6/path1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x3 zxid 0x10000002c create '/data6/path1/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x4 zxid 0x10000002d create '/data6/path1/child2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x5 zxid 0x10000002e create '/data6/path2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x6 zxid 0x10000002f create '/data6/path2/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:08 PM IST session 0x1645c03e93f0005 cxid 0x7 zxid 0x100000030 create '/data6/path2/child2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x0 zxid 0x100000031 createSession 30000

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x1 zxid 0x100000032 create '/data7,#74686973,v{s{31,s{'world,'anyone}}},F,7

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x2 zxid 0x100000033 create '/data7/path1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x3 zxid 0x100000034 create '/data7/path1/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x4 zxid 0x100000035 create '/data7/path1/child2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x5 zxid 0x100000036 create '/data7/path2,#74686973,v{s{31,s{'world,'anyone}}},F,2

7/2/18 10:52:09 PM IST session 0x1645c03e93f0006 cxid 0x6 zxid 0x100000037 create '/data7/path2/child1,#74686973,v{s{31,s{'world,'anyone}}},F,1
cxid
特定于连接,而不是会话。因此,如果客户机突然从服务器断开连接并重新连接上一个
sessionid
,我想
cxid
将再次启动。不确定这是否会导致任何问题


cxid
在类
org.apache.zookeeper.ClientCnxn
中生成,方法是
org.apache.zookeeper.ClientCnxn.getXid()

每当客户端连接到zookeeper服务器时,两者之间就会启动一组事务。这里有两个ID,分别是cxid和zxid

cxid是一个递增的数字序列,表示与客户机会话的起点

而zxid是zookeeper事务id,跟踪zookeeper处理的任何更改

cxid 0x0 zxid 0x20 createSession-这是客户端与zookeeper启动会话的时间

cxid 0x1 zxid 0x21错误

cxid 0x2 zxid 0x22错误

cxid 0x3 zxid 0x23错误

cxid 0x4 zxid 0x24错误

cxid 0x5 zxid 0x25错误

cxid 0x6 zxid 0x26错误

cxid 0x7 zxid 0x27错误

cxid 0x8 zxid 0x28错误

cxid 0x9 zxid 0x29错误

cxid 0xa zxid 0x2a错误

cxid 0xb zxid 0x2b错误

cxid 0xc zxid 0x2c错误 cxid 0xd zxid 0x2d错误

cxid 0x13 zxid 0x2e创建

cxid 0x16 zxid 0x2f创建

cxid 0x19 zxid 0x30设置数据

cxid 0x20 zxid 0x31 setData

cxid 0x2d zxid 0x32错误

cxid 0x2f zxid 0x33错误


cxid 0x38 zxid 0x34 closeSession-客户端已关闭会话

谢谢,我理解zxid。我的问题是关于cxid的,如上面的日志和zookeeper源代码中所示(对不起,我找不到关于cxid的更多信息,我能说的是它在datatxntree中使用)。我搜索了您面临的特定问题,发现主要问题是:在一个追随者的会话过期后,没有删除短暂的znode。(法定人数处于不一致状态)。有一个补丁可供使用,我正在与您共享。