作者回复: 好的,多谢您的建议
作者回复: 如果在节点A和ZooKeeper集群之间发生了网络分区,节点A会收到Disconnected的WatchedEvent, 节点A要在收到这个event之后停止执行主节点的功能。
作者回复: ZooKeeper使用WatchedEvent(https://zookeeper.apache.org/doc/r3.5.5/api/org/apache/zookeeper/WatchedEvent.html)来表示session的状态变化和znode的变化。WatchedEvent的Watcher.Event.KeeperState对应session的变化,WatchedEvent的Watcher.Event.EventType对应znode的变化。 关于KeeperState和EventType的取值,参见https://zookeeper.apache.org/doc/r3.5.5/api/org/apache/zookeeper/Watcher.Event.html。 如果EventType是None,WatchedEvent代表的就是session的状态变化,否则代表的是znode的变化。 KeeperException表示ZooKeeper的各种出错情况,其中需要特别注意的是KeeperException.ConnectionLossException 。我们可能需要在遇到KeeperException.ConnectionLossException时进行重试。
作者回复: > 有点浅,还是理解的有问题zk选主使用的是ZAB协议 Zab协议不涉及leader的选举。 > 这里讲的是连接ZK的客户端那个可以作为主嘛? 所有的节点都可能被选为leader。
作者回复: 既然A的znode编号是1那就说明ZooKeeper首先为A的创建请求分配的zxid。你说的延迟应该是说ZooKeeper给A返回的响应延迟了,这个不影响zxid的大小。A还是leader。