kafka的一致性为什么不替换成raft?


一:更早的起源时间
kafka是2011 年被捐献给 Apache 基金会 。而raft论文是2013年由斯坦福大学发表的《In Search of an Understandable Consensus Algorithm》 。kafka在raft之前诞生
二:更少的可容错副本数量 。raft当有1/3个节点数目不可用时 。服务不可用 。kafka中维护的ISR(in-sync-replica) 。即便副本均不可用 。只剩下Leader 。也可以对外提供服务
三:更大的数据吞吐量 。raft适合强一致性
其他观点:
首先我们要知道raft协议是什么 。raft分布式共识协议是由 Stanford University 的 Diego Ongaro 博士以及 John Ousterhout 教授提出的 。因其易于理解 。便于工程化实现等特点 。在金融、云服务、工业等领域得到了广 泛应用 。且其稳定性与高效也已得到业界的认可 。
任何分布式共识协议都要满足CAP理论 。即 。一个分布式系统最多同时满足 CAP 理论三条特点中的两条 。而另一 条无法完全满足 。
三条特点为:
可用性(Availability) & 分区容错性(Partition tolerance): 若只满足可用性与分区容错性 。会牺牲一致性特点 。因为若有网络分区存在 。部分分 区中的节点会导致客户端获取的数据不一致 。
一致性(Consistency) & 分区容错性(Partition tolerance): 若只满足一致性与分区容错性 。则会牺牲可用性特点 。因为要保证分区中的部分节点 与其他节点一致 。则部分客户端不能得到集群的响应 。
一致性(Consistency) &可用性( Availability): 满足一致性与可用性特点的系统往往运行在可靠性与准确性要求较高的场景下 。例如 金融环境下用户财产存储系统 。在此情况下 。需要对分区容错性(Partition tolerance)进行 处理 。Raft 一致性协议则是针对这种场景设计的 。
在Kafka使用场景下 。会有日志乱序抵达的问题 。raft协议无法解决 。或者高效解决日志乱序的问题 。这也就是为什么阿里巴巴自研数据库oceanbase使用的是paxos而不是raft协议了
参考文献:
[1] 曾诗钦. 北京邮电大学网络与交换国家重点实验室, 区块链技术研究综述:原理、进展与应用[J],2020.
[2] 王海勇; 郭凯璇; 潘启青. 南京邮电大学计算机学院, 基于投票机制的拜占庭容错共识算法[J], 2019.
[3] 阳振坤. 蚂蚁金融服务集团, 分布式关系数据库 OceanBase 的高可靠性[J], 2016.
[4] 苗凡;阎志远. 中国铁道科学研究院集团有限公司 。基于 Zookeeper 的配置管理中心设计与实现[J], 2018.
[5] 张仕将;柴晶. 太原理工大学 。中国科学与计算机网络信息中心 。基于 Gossip 协议的拜占庭共识算法 [J],2018.
[6] 郭奕庭. 东南大学, 基于 Node.js 与 Etcd 的轻量级微服务开发平台的设计与实现[D], 2018.
[7] Alibaba Ant Finanical Services Group. SOFAJRaft GitHub[CP]. https://github.com/sofastack/sofa-jraft 2019.
[8] LESLIE LAMPORT, Microsoft, Paxos Made Simple[J], 2001. [9] Diego Ongaro and John Ousterhout. Stanford University. In Search of an Understandable Consensus Algorithm[D], 2013.

kafka的一致性为什么不替换成raft?

文章插图
kafka的一致性为什么不替换成raft?

文章插图
kafka的一致性为什么不替换成raft?

文章插图
其他观点:
【kafka的一致性为什么不替换成raft?】和raft这类少数服从多数的一致性协议相比较 。kafka动态维护ISR集合的方式 。在能容忍相同节点数失败的情况下 。需要的节点数量更少 。所以在类似Kafka这样的数据存储应用中不太合适用raft 。因为raft需要更多的节点 。raft/zab 。更适合用在etcd/zookeeper中 。

    推荐阅读