raft和ZooKeeper选举的不同

kraft 算法参考Raft协议原理详解我这就摘抄一些当个笔记

首先从kafka2.8开始,raft就出现替代ZooKeeper的,但是实际上还不建议生产使用。但是要了解一下kraft和ZooKeeper的区别,慢慢以后缺少的补充

1、选举的区别

(1)raft

  1. 角色有三种:leader、candidate、follower,只有选举时才会出现candidate,当没leader时,所有的follower都是candidate,如果有leader后,其他的都是follower
  2. 选举leader的方式: 一样都是多数同意提交
  3. 如果选举失败:采用时间轮的方式重新选举,把时间划分为多个term,每个term都有一个timeout,是随机大小,如果timeout过期还没结果,会立马进行下一次选举,不会等待本轮的结果,并且每一个term编号递增(防止第三次选举接收第二次选举的结果)在这里插入图片描述

详细的可以看Raft协议原理详解

(2)ZooKeeper

  1. 角色只有两种: leader 和follower
  2. 选举leader的方式:一样都是多数同意提交
  3. 如果选举失败:第一次选举没成功(一般都投票自己),那后续会把选举结果发送到各个follower,follower根据结果重新选举(这时候各个follower会根据结果都投票server最大的那个follower成为leader)

详细的可以看这个【分布式】Zookeeper的Leader选举-选举过程介绍比较清晰

2、leader和follower如何同步命令

都是两阶段提交,但是有区别

(1)raft

在这里插入图片描述

  1. leader接收所有的客户端命令
  2. leader向follower发送执行命令的log,每一条log都有包含term的编号和顺序索引
  3. 超过半数follower收到log并保存后返回ACK后,leade接收到超过半数的ACK,leader就会执行命令
  4. 命令都是由leader执行,而follower的地位就相当于备份库

(2)ZooKeeper

在这里插入图片描述

  1. 首先客户端所有的写请求都由一个Leader接收,而其余的都是Follower(从者)
  2. Leader 负责将一个客户端事务请求,转换成一个 事务Proposal,并将该 Proposal 分发给集群中所有的 Follower(备份) ,也就是向所有 Follower 节点发送数据广播请求(或数据复制)记住这里发送给的不光是数据本身,还有其他的,相当于包装
  3. 分发之后Leader需要等待所有Follower的反馈(Ack请求),在Zab协议中,只要超过半数的Follower进行了正确的反馈后(也就是收到半数以上的Follower的Ack请求),那么 Leader 就会再次向所有的 Follower发送 Commit 消息,要求其将上一个 事务proposal 进行提交
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值