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

25|从集群角度拆解Kafka的架构设计与实现

你好,我是文强。
上节课讲完了 RocketMQ,这节课我们再来看一下流消息领域的消息队列 Kafka。
因为我们之前在第 16 讲已经详细描述了,基于 ZooKeeper 和 KRaft 来构建集群的两种方式,在这里就不再重复。这节课我们会详细分析 Kafka 副本之间的数据一致性、数据同步机制、Leader 切换、数据截断。

数据可靠性

我们知道,Kafka 集群维度的数据可靠性也是通过副本来实现的,而副本间数据一致性是通过 Kafka ISR 协议来保证的。ISR 协议是现有一致性协议的变种,它是参考业界主流的一致性协议,设计出来的符合流消息场景的一致性协议。
ISR 协议的核心思想是:通过副本拉取 Leader 数据、动态维护可用副本集合、控制 Leader 切换和数据截断 3 个方面,来提高性能和可用性。
参考图示,这是一个包含 1 个 Leader、2 个 Follower 的分区。如果是基于 Raft 协议或者多数原则实现的一致性算法,那么当 Leader 接收到数据后,就会直接分发给部分或全部副本。我们在前面两节课说到的 RabbitMQ 的镜像队列、仲裁队列和 RocketMQ 的 Master/Slave、Dledger 都是这么实现的。
这种机制在流消息队列的大吞吐场景中主要有两个缺点:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka的架构设计与实现是一篇深入探讨Kafka消息队列的文章。文章首先介绍了Kafka集群维度的数据可靠性,重点讨论了副本之间的数据一致性、数据同步机制、Leader切换和数据截断。通过ISR协议,Kafka实现了副本拉取Leader数据、动态维护可用副本集合和控制Leader切换和数据截断。文章还提到了Kafka的实现方式,包括数据写入成功的等待机制、副本异常判断策略以及处理Leader切换和数据截断的操作。整体而言,文章深入剖析了Kafka的架构设计和实现细节,对于想要深入了解Kafka消息队列的读者具有很高的参考价值。 在安全控制方面,Kafka支持多种认证方式和细粒度的权限管控,为数据传输提供了TLS/SSL加密支持,同时对来源IP进行限制,展现了其在安全性方面的细致性。 在可观测性方面,Kafka基于Yammer Metrics库实现了指标的定义,并通过JMX方式暴露指标。文章还提到了Kafka对消息轨迹的需求不高,内核不支持轨迹相关功能,但可以通过内核改造和SDK改造来支持消息轨迹。 总的来说,本文详细介绍了Kafka在集群构建、数据可靠性、安全控制和可观测性方面的特点和实现细节,为读者提供了全面了解Kafka消息队列的重要参考资料。

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

全部留言(1)

  • 最新
  • 精选
  • 林龍
    当配置最终一致(ACK=1),Leader 接收到数据成功写入应该就会告诉客户端写入成功把? 这里是不是想表达的是LEO的概念. 强一致性是需要所有follewer都收到了这个LEO写入时高水位+1,才返回 最终一致性是只要把这个LEO信息同步到follewer,不等待同步成功就返回。
    2023-08-17归属地:广东
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部