当 leader 接收到消息请求生成 proposal 后就挂了,其他 follower 并没有收到此 proposal,因此经过恢复模式重新选了 leader 后,这条消息是被跳过的。 此时,之前挂了的 leader 重新启动并注册成了 follower,他保留了被跳过消息的proposal 状态,与整个系统的状态是不一致的,需要将其删除。

ZAB协议需要满足上面两种情况,就必须要设计一个leader选举算法:能够确保已经被leader提交的事务Proposal能够提交、同时丢弃已经被跳过的事务Proposal。

针对这个要求

1. 如果leader选举算法能够保证新选举出来的Leader服务器拥有集群中所有机器最高编号(ZXID最大)的事务Proposal,那么就可以保证这个新选举出来的Leader一定具有已经提交的提案。因为所有提案被 COMMIT 之前必须有超过半数的 follower ACK,即必须有超过半数节点的服务器的事务日志上有该提案的 proposal,因此,只要有合法数量的节点正常工作,就必然有一个节点保存了所有被 COMMIT 消息的 proposal 状态

2. 另外一个,zxid是64位,高32位是epoch编号,每经过一次Leader选举产生一个新的leader,新的leader会将epoch号+1,低32位是消息计数器,每接收到一条消息这个值+1,新leader选举后这个值重置为0.这样设计的好处在于老的leader挂了以后重启,它不会被选举为leader,因此此时它的zxid肯定小于当前新的leader。当老的leader作为follower接入新的leader后,新的leader会让它将所有的拥有旧的 epoch 号的未被 COMMIT 的 proposal 清除

被丢弃的消息不能再次出现相关推荐

  1. 关于Zookeeper

    数据访问: zookeeper节点上的数据都是以原子的方式读取和写入的.读取时获取节点下的所有数据,写入将替换节点下的所有数据.每个节点都有一个访问控制列表,控制谁可以做什么 zookeeper会话安 ...

  2. ZAB协议选主过程详解

    说明 ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的一致性协议.基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性. ZAB ...

  3. ZAB(Zookeeper Atomic Broadcast)协议详解

    一.什么是 Zab协议 ZAB( Zookeeper Atomic Broadcast:Zookeeper原子广播)Zookeeper 通过 ZAB 协议保证分布式事务的最终一致性. [1]ZAB协议 ...

  4. java zookeeper 主从热备_zookeeper 核心原理

    zookeeper 核心原理 1.了解zookeeper的设计 2.zookeeper集群角色 3.深入分析ZAB协议 4.从源码层面分析leader选举的实现过程 5.关于zookeeper的数据存 ...

  5. zk选举机制和分布式一致性原理

    CAP定理 CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性: 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生 ...

  6. zookeeper介绍

    zookeeper | 介绍 开源的分布式协调服务,雅虎创建,基于google chubby. 可以解决的问题 数据的发布/订阅(配置中心:disconf) 负载均衡(dubbo利用了zookeepe ...

  7. Zookeeper的架构设计及原理分析

    1. Zookeeper 设计猜想 Zookeeper 作为一个分布式协调组件,很多应用系统都会依赖Zookeeper来实现相关业务的处理. 前面我们一直在提到,在分布式架构中任何节点都不能以单点状态 ...

  8. 2PC/3PC、paxos与ZAB协议

    为什么80%的码农都做不了架构师?>>>    2PC 即Two-phase Commit,参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还 ...

  9. websphere mq 查看队列中是否有数据_全网最全的 “消息队列”

    消息队列的使用场景 以下介绍消息队列在实际应用常用的使用场景.异步处理.应用解耦.流量削锋和消息通讯四个场景. 1]异步处理:场景说明:用户注册后,需要发注册邮件和注册短信. 引入消息队列后架构如下: ...

最新文章

  1. 限制TensorFlow只在CPU上运行的方法
  2. OpenCv java 颜色空间(9)
  3. 干货丨一文介绍机器学习中基本的数学符号
  4. 百度前端技术学院Task20 笔记
  5. python 命令行参数-Python处理命令行参数
  6. 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )
  7. 容器持久化存储训练营”启动倒计时!3天攻破K8s难点
  8. linux系统程序设计
  9. 7.4.5 鲁棒主成分分析 PCA
  10. c++排序算法ppt_C/C++学习教程:C语言排序算法—插入排序算法
  11. 小程序 长按api_微信小程序API相关知识科普
  12. 如何快速准备高质量的AI数据?
  13. MySQL5.7--项目数据库不同出现的问题
  14. Windows 键盘快捷键 : Windows 快捷键
  15. javascript案例---简单的视觉效应
  16. Dell安装Ubuntu教程
  17. Linux如何恢复初始PS1,ps界面怎么恢复默认设置
  18. centos7 文件系统修复
  19. 用户登录模块---Druid+JDBC+Servlet
  20. 1227. 飞机座位分配概率

热门文章

  1. 基于OpenGL的三种直线生成算法
  2. .net Core 相关问题
  3. consul之:ACL配置使用
  4. ES6重点--笔记(转)
  5. ClickHouse之集群搭建以及数据复制
  6. 异常记录与处理-Cannot find class [org.apache.commons.dbcp.BasicDataSource]
  7. 视图view的生命周期的一点见解
  8. 依赖注入及AOP简述(六)——字符串请求模式 .
  9. Android学习第二天-android常用命令
  10. Jenkins+Gradle+Git自动打apk包,并上传到ftp