Apache zookeeper zookeeper leader崩溃后状态不一致?

Apache zookeeper zookeeper leader崩溃后状态不一致?,apache-zookeeper,distributed-system,consensus,raft,Apache Zookeeper,Distributed System,Consensus,Raft,我想了解动物园管理员的内心世界 假设一个3服务器zookeeper集群,领导者服务器向两个追随者发送一个提议(比如setdata:foo=1),然后崩溃,但至少有一个追随者将该提议记录到其事务日志文件中。根据《Zab报》的报道,另外两名服务器仍然可以组成有效的法定人数并选举新的领导人。新领导人仍然可以提出并提交这一建议(setdata:foo=1) 我的问题是,在这种情况下,客户机认为这个请求没有完成(因为leader崩溃、没有响应或客户机超时),但实际上在zookeeper集群中仍然成功。这是

我想了解动物园管理员的内心世界

假设一个3服务器zookeeper集群,领导者服务器向两个追随者发送一个提议(比如setdata:foo=1),然后崩溃,但至少有一个追随者将该提议记录到其事务日志文件中。根据《Zab报》的报道,另外两名服务器仍然可以组成有效的法定人数并选举新的领导人。新领导人仍然可以提出并提交这一建议(setdata:foo=1)


我的问题是,在这种情况下,客户机认为这个请求没有完成(因为leader崩溃、没有响应或客户机超时),但实际上在zookeeper集群中仍然成功。这是不一致的吗?

事实上这是不一致的,但这不是问题。
在zookeeper中,有一行:

如果客户机获得成功的返回代码,则已应用更新。对于某些故障(通信错误、超时等),客户端将不知道是否应用了更新。我们采取措施尽量减少故障,但唯一的保证是只有成功返回代码。(这在Paxos中称为单调性条件。)

这意味着当您获得一个成功的返回代码时,您知道更新成功,但当您没有收到返回代码时,您不知道更新是否成功

但这不是问题,当您的更新因leader崩溃而失败时,您可以重试更新操作。这次您的更新将失败,因为您指定的版本落后于实际版本号,您将收到通知。然后可以调用get方法来检索数据,以查看数据是否等于指定的值