[zookeeper] zab协议

一、描述

zab(ZooKeeper Atomic Broadcast原子消息广播协议),是zookeeper一致性协议,zab协议主要包括两种模式,消息广播和奔溃恢复


二、角色

zookeeper中主要的两种角色,leader和follower,这两种角色都有投票权


三、消息广播

1.follower收到prosoal等写事务的提议

2.follower会发送给leader

3.leader会为每个follower建立一个队列,以tcp方式保证消息的fifo特性,以保证消息的顺序

4.当收到超过半数的ack的follower的回复后,会想每个follower发送commit请求


这与2pc(两阶段提交)相似,当时区别在于1.zab不需要等待全部follower的ack才进行下一步commit操作。2.zab简化了逻辑,移除了中断逻辑

但是这样还是无法解决类似2pc提交时候,如leader接受到足够的ack后,发送commit后,只有一部分follower收到了,而另一部分没有收到commit,

这时候leader奔溃退出,这样会导致数据不一致情况,这样就需要奔溃恢复来解决这个问题


四、奔溃恢复

当zookeeper的leader奔溃后,zookeeper集群需要从奔溃中恢复,这样需要选举出新的leader,而新leader被选举出来,该leader的事务id时最大的,

以保证当前的leader包含最新的提交的数据,这样后续其follower与leader数据同步的时候,可以知道哪些数据时需要提交的,哪些数据是需要丢弃的



发布了140 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_16097611/article/details/79948808