raft和ZooKeeper选举的不同
kraft 算法参考Raft协议原理详解我这就摘抄一些当个笔记首先从kafka2.8开始,kraft就出现替代ZooKeeper的,但是实际上还不建议生产使用。但是要了解一下kraft和ZooKeeper的区别,慢慢以后缺少的补充1、选举的区别(1)kraft角色有三种:leader、candidate、follower,只有选举时才会出现candidate,当没leader时,所有的follow
·
kraft 算法参考Raft协议原理详解我这就摘抄一些当个笔记
首先从kafka2.8开始,raft
就出现替代ZooKeeper
的,但是实际上还不建议生产使用。但是要了解一下kraft和ZooKeeper的区别,慢慢以后缺少的补充
1、选举的区别
(1)raft
- 角色有三种:leader、candidate、follower,只有选举时才会出现candidate,当没leader时,所有的follower都是candidate,如果有leader后,其他的都是follower
- 选举leader的方式: 一样都是
多数同意提交
, - 如果选举失败:采用
时间轮
的方式重新选举,把时间划分为多个term,每个term都有一个timeout,是随机大小,如果timeout过期还没结果,会立马进行下一次选举,不会等待本轮的结果,并且每一个term编号递增(防止第三次选举接收第二次选举的结果)
详细的可以看Raft协议原理详解
(2)ZooKeeper
- 角色只有两种: leader 和follower
- 选举leader的方式:一样都是
多数同意提交
- 如果选举失败:第一次选举没成功(一般都投票自己),那后续会把选举结果发送到各个follower,follower根据结果重新选举(这时候各个follower会根据结果都投票server最大的那个follower成为leader)
详细的可以看这个【分布式】Zookeeper的Leader选举-选举过程介绍比较清晰
2、leader和follower如何同步命令
都是两阶段提交,但是有区别
(1)raft
- leader接收所有的客户端命令
- leader向follower发送执行命令的log,每一条log都有包含term的编号和顺序索引
- 超过半数follower收到log并保存后返回ACK后,leade接收到超过半数的ACK,leader就会执行命令
- 命令都是由leader执行,而follower的地位就相当于备份库
(2)ZooKeeper
- 首先客户端所有的写请求都由一个Leader接收,而其余的都是Follower(从者)
- Leader 负责将一个客户端事务请求,转换成一个 事务Proposal,并将该 Proposal 分发给集群中所有的 Follower(备份) ,也就是向所有 Follower 节点发送数据广播请求(或数据复制)记住这里发送给的不光是数据本身,还有其他的,相当于包装
- 分发之后Leader需要等待所有Follower的反馈(Ack请求),在Zab协议中,只要超过半数的Follower进行了正确的反馈后(也就是收到半数以上的Follower的Ack请求),那么 Leader 就会再次向所有的 Follower发送 Commit 消息,要求其将上一个 事务proposal 进行提交
更多推荐
已为社区贡献9条内容
所有评论(0)