ZooKeeper中的数据同步
数据同步 的过程就是Leader服务器将那些没有在Learner服务器上提交过的事物请求同步给Learner服务器。 ZooKeeper集群数据同步通常分为四类,分别是 直接差异化同步(DIFF同步)、先回滚再差异化同步(TRUNC + DIFF同步)、仅回滚同步(TRUNC同步)和全量同步(SNAP同步) 。 peerLastZxid :该Learner服务器最后处理的ZXID。 minCommittedLog :Leader服务器提议缓存队列committedLog中的最下ZXID。 maxCommittedLog :Leader服务器提议缓存队列committedLog中的最大ZXID。 1、直接差异化同步(DIFF同步) 场景: peerLastZxid介于minCommittedLog和maxCommittedLog之间。 Leader服务器会首先向Learner发送一个DIFF指令。然后,在Proposal同步过程中,针对每个Proposal,Leader服务器都会通过发送两个数据包来完成,分别是PROPOSAL内容数据包和COMMIT指令数据包——这和ZooKeeper运行时Leader和Follower之间的事物请求的提交过程是一致的。在发送完差异化数据之后,将Learner加入到forwardingFollowers或observingLearners队列中