我对Zookeeper如何处理写入失败有疑问。让我们假设有3个节点,并且写入在1上成功但在2上失败,我知道zookeeper将返回错误。但是在一个节点上成功写入会发生什么?是回滚还是保留更改,并期望最终最终复制到其他节点?
答案 0 :(得分:0)
Zookeeper使用原子消息传递系统。在以下article中对此进行了很好的解释:
ZooKeeper使用两阶段提交协议的变体将事务复制到跟随者。领导者收到客户的变更更新后,会生成续集编号c和领导者纪元e的交易,并将交易发送给所有关注者。追随者将事务添加到其历史队列中,并将ACK发送给领导者。领导者从法定人数收到ACK时,将发送该交易的法定人数COMMIT。除非c大于其历史队列中的任何序列号,否则接受COMMIT的追随者将提交此事务。在提交之前,它将等待所有早期交易(未完成的交易)收到COMMIT的信息。
official documentation也可能非常有用。