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 进行提交
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐