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

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

你好,我是文强。
上节课我们讲完了 RabbitMQ,今天继续来看看同样是消息方向的 RocketMQ 在集群构建、部署形态、数据可靠性、安全控制、可观测性等五个方面的设计实现。

集群构建

首先,我们还是从元数据存储和节点发现两个方面来分析一下 RocketMQ 的集群构建。
在前面的课程中,我们知道 RocketMQ 的元数据是存储在 NameServer 中。严格意义上来说,这个说法是不对的。RocketMQ 的元数据实际是存储在 Broker 上,不是直接存储在 NameServer 中。NameServer 本身只是一个缓存服务,没有持久化存储的能力,先来看一张图示。
如上图所示,元数据信息实际存储在每台 Broker 上,每台 Broker 会在本节点维护持久化文件来存储元数据信息。这些元数据信息主要包括节点信息、节点上的 Topic、分区信息等等。在 Broker 启动时,会先连接 NameServer 注册节点信息,并将保存的元数据上报到所有 NameServer 节点中。此时所有 NameServer 节点就有全量的元数据信息了,从而完成了节点之间的发现。
从原理来看,RocketMQ 是基于第三方组件 NameServer 来完成节点发现的。即通过上报节点信息到一个中央存储,从而发现集群中的其他节点。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

RocketMQ的架构设计与实现从集群构建、部署形态、数据可靠性、安全控制、可观测性等五个方面展开讨论。在集群构建方面,RocketMQ的元数据实际存储在Broker上,而NameServer只是一个缓存服务。集群构建基于第三方组件NameServer完成节点发现,Broker和NameServer之间通过心跳探测确认节点运行正常。在部署模式方面,RocketMQ经历了多次升级,包括Master/Slave、DLedger和Controller三种部署模式。数据可靠性方面,RocketMQ通过多副本提高数据可靠性,不同部署模式下副本机制和数据一致性实现不同。在安全控制方面,RocketMQ提供传输安全、认证和鉴权功能。总体而言,RocketMQ的架构设计和实现充分考虑了集群构建、部署形态、数据可靠性和安全控制等方面,为消息方向的应用提供了可靠的技术支持。 RocketMQ Broker支持TLS加密传输,配置证书的相关信息即可实现。在认证方面,RocketMQ支持明文的用户名/密码认证方式,同时区分管理员账户和普通账户权限。在鉴权方面,RocketMQ支持Topic和Group两种资源的鉴权,包含拒绝、全部权限、发送、订阅四种权限,同时也支持IP白名单认证。 在可观测性方面,RocketMQ在5.0版本重构了指标模块,基于OpenTelemetry规范重新设计实现了指标模块,支持更多维度、更丰富的指标,并提供了Pull、Push、Export兼容三种方式。在消息轨迹方面,RocketMQ的生产端和消费端的SDK集成了轨迹信息上报模块,支持全链路的轨迹记录上报功能。 总体而言,RocketMQ通过支持多种部署模式、提高数据可靠性、加强安全控制和优化可观测性,为消息队列系统提供了全面的技术支持。

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

全部留言(2)

  • 最新
  • 精选
  • Geek_4c6cb8
    有一些疑问请教: 1.Dledger模式是多个独立的Master注册到NameServer,每个Master背后各自一个raft集群吗? 2.Controller模式,文中提到Controller之间选主节点,这是通过选择完整性最高的Controller,在某个Master不可用之后,由Controller选择新的Master吗?
    2024-01-01归属地:浙江
  • shan
    RocketMQ的三种部署模式 1. Master/Slave模式 分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会与Master节点建立连接,从Master节点同步消息数据(有同步复制和异步复制两种方式)。 消费者可以从Master节点拉取消息,也可以从Slave节点拉取消息。在RocketMQ 4.5版本之前,如果Master宕机,不支持自动将Slave切换为Master,需要人工介入。 优点 负载过高时,可以快速通过横向添加节点来扩容。 缺点 (1)Master节点宕机之后,不能自动将Slave节点切换为Master节点; (2)每个节点上都需要创建全量的Topic,存在性能瓶颈; 2. Dledger模式 为了解决主从架构下Slave不能自动切换为Master的问题,4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动从Slave节点中选举出新的Master进行切换。 存在问题 (1)根据Raft算法的多数原则,集群至少有三个节点以上,在消息写入时,也需要大多数的Follower节点响应成功才能认为消息写入成功; (2)存在两套HA复制流程(个人认为是主从模式下一套、Dledger模式下一套),Dledger模无法利用RocketMQ原生的存储和复制能力。 3. DLedger Controller模式 RocketMQ 5.0以后推出了DLedger Controller模式,支持独立部署,也可以嵌入在NameServer中,Broker通过与Controller交互完成Master的选举。 在DLedger Controller模式中,数据的一致性可以通过参数inSyncReplicas配置来配置,不用向Dledger模式一样,需要要过半的Follower节点响应才算写入成功。 关于DLedger Controller模式详细信息可以参考 https://github.com/apache/rocketmq/blob/develop/docs/cn/controller/design.md
    2023-09-22归属地:美国
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部