在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
我无法理解它的用途。
答案 0 :(得分:0)
zxid 有两个部分:纪元和计数器。在我们的实施中 zxid是一个64位数字。我们使用高阶32位 纪元和计数器的低位32位。因为它有两个 parts表示zxid既是数字又是一对整数, (epoch,count)。 时代号表示领导层的变化。 每当一位新领导人掌权时,它就会有自己的时代 数。我们有一个简单的算法来为a分配唯一的zxid 建议:领导者只需递增zxid即可获得唯一的 每个提案的zxid。领导激活只会确保 一个领导者使用给定的时代,所以我们的简单算法保证了这一点 每个提案都有一个唯一的ID。
ZooKeeper命名空间中的每个节点都可以包含与之关联的数据以及子节点。这就像拥有一个允许文件也是目录的文件系统。我们使用术语 znode 来清楚地表明我们正在谈论 ZooKeeper数据节点 。
在描述ZooKeeper消息传递协议时,我们将讨论数据包,提议和消息:
数据包通过FIFO通道发送的字节序列
提案协议单位。通过与法定数量的ZooKeeper服务器交换数据包来商定提案。大多数提案 包含消息,但NEW_LEADER提议是一个例子 与消息不对应的提案。
消息要以原子方式广播到所有ZooKeeper服务器的字节序列。在提案中提出并同意的消息 在它交付之前。
如上所述,ZooKeeper保证了消息的总顺序,并且它还保证了提议的总顺序。 ZooKeeper使用ZooKeeper事务id(zxid)公开总排序。所有提案在提议时都会加盖zxid,并准确反映总排序。提案将发送到所有ZooKeeper服务器,并在法定人数确认提案时提交。如果提案包含消息,则在提交提案时将传递消息。确认意味着服务器已将提议记录到持久存储。我们的法定人数要求任何一对仲裁必须至少有一个共同的服务器。
答案 1 :(得分:0)
cxid
是在客户端将数据包发送到服务器之前在客户端生成的单调递增整数。
以下是zookeeper日志的摘录,它显示了三个不同会话的一些创建命令。如下所示,来自同一会话的每个新命令的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()
中生成
答案 2 :(得分:0)
每当客户端与Zookeeper服务器建立连接时,两者之间就会启动一组事务。在这里,两个ID保持为cxid和zxid。
cxid是一个递增的数字序列,代表与客户端进行会话的起点。
zxid是动物园管理员的交易ID,并跟踪动物园管理员处理的任何更改。
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 setData
cxid 0x20 zxid 0x31 setData
cxid 0x2d zxid 0x32错误
cxid 0x2f zxid 0x33错误
cxid 0x38 zxid 0x34 closeSession-客户端关闭了会话