深入拆解消息队列 47 讲
许文强
前腾讯云 Kafka 技术负责人
5385 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
深入拆解消息队列 47 讲
15
15
1.0x
00:00/00:00
登录|注册

17|可靠性:分布式集群的数据一致性都有哪些实现方案?

你好,我是文强。
前两节我们讲完了消息队列集群的设计要点和思路,也讲到了在集群中引入副本的概念来实现数据的分布式可靠存储。这节课我们就来讲一下集群中数据的一致性,看看它是如何保证这些分布在多个节点上的副本上的数据是一致的。

分区、副本和数据倾斜

首先,我们来讲一下分区、副本和数据倾斜,这个是学习后面内容的一个基础。
前面我们讲过,副本之间一般都有主从的概念。为了达到容灾效果,主从副本需要分布在不同的物理节点上,来看一张图。
如上图所示,这是一个三副本的分片,Leader 和 Follower 会分布在三个节点上。控制副本分布的工作,就是由上节课讲到的控制器来完成的。控制器会根据当前的节点、Topic、分区、副本的分布信息,计算出新分区的分布情况,然后调用不同的 Broker 完成副本的创建(不同消息队列的具体流程可能不一样,但是运行原理是一致的)。
从功能上来看,在这种主从架构中,为了保证数据写入的顺序性,写入一般都是由 Leader 负责。因为组件功能特性和实现方式的不同, Follower 在功能上一般会分为这样两种情况。
只负责备份。即写入和读取都是在 Leader 完成的,平时 Follower 只负责数据备份。当 Leader 出现异常时,Follower 会提升为 Leader,继续负责读写。
负责备份也负责读取,不负责写入。即正常情况下,Leader 负责写入,Follower 负责读取和数据备份。当发生异常时,Follower 会提升为 Leader。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式集群数据一致性的挑战和解决方案,重点介绍了分区、副本和数据同步方式对数据一致性的重要性。首先强调了合理的分区和副本分布对数据一致性的重要性,然后详细讨论了副本之间的数据同步方式,包括同步复制和异步复制,以及各自的优缺点和主流消息队列的应用情况。回顾了CAP理论,强调了一致性、可用性和分区容忍性的重要性,以及分布式系统只能满足其中两个的限制。最后,介绍了一致性模型,包括强一致、弱一致和最终一致,并探讨了消息队列在一致性和可靠性上的实现方式。通过对ZooKeeper、Kafka和Pulsar的数据一致性和可靠性实现方式的介绍,读者可以深入了解不同消息队列的应用特点。文章内容涵盖了分布式数据一致性的关键概念和技术实现,为读者提供了全面的技术视角和实践经验。文章还提出了思考题,引发读者对RabbitMQ的一致性模型和可靠性的思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解消息队列 47 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 开发很忙
    “流方式的写入可以提高写入的性能。”想问一下老师,什么才是流方式的写入?

    作者回复: 我个人认为从技术上来看,流 = 长连接 + 批量读写,或者说流 = TCP 长连接 + 批量读写。 比如我们以 HTTP 协议往某个服务写入数据为例,每次建立连接再写入数据肯定不如长连接一直写入数据性能高,因为建立连接和关闭连接是需要花费时间的。 如果需要进一步提高性能,就需要在每次写入数据的时候,尽量写入更多的数据,这就是批量写入。 不管是 Kakfa 客户端批量写入语义,还是 Bookeeper 的 Ledger 写入的实现,都是遵照的这个逻辑来提高读写的性能。

    2023-10-07归属地:广东
  • Geek_d8f539
    数据的可靠性是指数据一致性和可用性么

    作者回复: 是的,是指消息数据的一致性和可靠性。指的是如何保证集群中数据的可靠存储,保证数据不丢失。

    2023-10-07归属地:广东
  • Alpha
    > 和 Kakfa 的区别在于,Kakfa 的一致性放到了服务端实现,让客户端的使用更加轻松。 这里有个笔误,Pulsar 的一致性放到了服务端实现

    作者回复: 非常感谢建议~,确实是笔误了

    2023-07-30归属地:日本
  • aoe
    学习后倍感要根据需求选择合适的一致性策略:强一致、弱一致、最终一致 强如 Kafka 遇到极端情况也可能丢失数据,在设计关键业务时一定要考虑到容错容灾

    作者回复: 是的,确实是这样子。 强一致性必定会导致性能下降,并且强一致在极端情况下也有可能会丢失数据。目前主流的选择都是最终一致,用来在性能和可靠性之间取得平衡。 所以在设计的时候,就需要先了解当前使用的一致性策略是什么。然后再从业务系统的角度去考虑容灾策略,比如跨集群、跨可用区、跨地域容灾等等。

    2023-07-30归属地:浙江
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部