当前位置: 首页 > web >正文

RocketMQ 核心架构速览

 欢迎光临小站:致橡树

文章现有讲述比较简单,后续逐渐丰富各部分内容。

Apache RocketMQ 作为阿里巴巴开源的一款分布式消息中间件,凭借其高吞吐、低延迟、高可用等特性,成为金融级稳定性场景的首选解决方案。本文将深入剖析 RocketMQ 的架构设计,解读其核心组件、存储机制和高可用策略。

RocketMQ 核心架构

RocketMQ 采用经典的 发布-订阅模型,核心组件包括:

  • NameServer:轻量级注册中心,负责路由管理。

  • Broker:消息存储与转发核心节点。

  • Producer:消息生产者,支持同步/异步/单向发送。

  • Consumer:消息消费者,支持集群和广播消费模式。

核心组件详解

NameServer:无状态路由中枢

  • 去中心化设计:多个 NameServer 节点独立运行,无主从依赖。

  • 职责

    • 管理 Broker 地址列表与 Topic 路由信息。

    • 提供心跳检测机制,实时感知 Broker 存活状态。

  • 数据更新:Broker 每30秒上报元数据,NameServer 维护最终一致性。

Broker:消息存储引擎

  • 主从架构:Master 处理读写请求,Slave 提供数据备份和读负载均衡。

  • 核心模块

    • Remoting Module:处理客户端请求(生产/消费消息)。

    • Store Module:高效管理消息存储(CommitLog + 索引)。

    • HA Service:主从数据同步,保障高可用。

Producer & Consumer

  • Producer

    • 通过 Topic 发布消息,支持消息压缩、事务消息。

    • 自动选择 MessageQueue 实现负载均衡。

  • Consumer

    • 支持 Push/Pull 两种消费模式。

    • 集群模式下通过 Offset 管理消费进度。

消息存储机制:高性能的基石

存储结构设计

  • CommitLog:所有消息顺序写入日志文件,消除随机IO瓶颈。

  • ConsumeQueue:逻辑队列,记录消息在 CommitLog 的物理偏移。

  • IndexFile:基于 Key/时间戳的消息索引,支持快速查询。

CommitLog
├── 00000000000000000000
├── 00000000000000000001
└── ...ConsumeQueue
└── TopicA├── 0 (QueueID)│   ├── 00000000000000000000│   └── ...└── 1└── ...

刷盘机制

  • 同步刷盘(FLUSH_SYNC):消息写入 PageCache 后立即刷盘,数据零丢失。

  • 异步刷盘(FLUSH_ASYNC):依赖 OS 定期刷盘,吞吐量更高。

零拷贝技术

  • MappedFile:通过内存映射文件(MMAP)提升大文件读写效率。

  • Sendfile:消费时直接通过 DMA 传输数据,减少 CPU 拷贝开销。

高可用与负载均衡设计

Broker 主从同步

  • 同步复制(SYNC_MASTER):消息写入 Slave 成功后才返回 ACK。

  • 异步复制(ASYNC_MASTER):Master 写入后立即响应,异步同步到 Slave。

故障自动切换

  • DLedger 模式:基于 Raft 协议实现多副本强一致性,支持自动选主。

    • Dledger集群的选举是通过Raft协议进⾏的,Raft协议是⼀种多数同意机制。也就是每次选举需要有集群中超过

      半数的节点确认,才能形成整个集群的共同决定。同时,这也意味着在Dledger集群中,只要有超过半数的节点能

      够正常⼯作,那么整个集群就能正常⼯作。因此,在部署Dledger集群时,通常都是部署奇数台服务,这样可以让

      集群的容错性达到最⼤。

  • Consumer 重平衡:Broker 宕机时,Consumer 自动切换到其他可用节点。

负载均衡策略

  • Producer 侧:轮询/随机/Hash 算法分配 MessageQueue。

  • Consumer 侧

    • 平均分配(AllocateMessageQueueAveragely)

    • 一致性 Hash(AllocateMessageQueueConsistentHash)

最佳实践场景

  • 电商场景:订单超时取消(延时消息)

  • 日志采集:海量数据传输削峰填谷

  • 金融交易:跨系统事务最终一致性(事务消息)

总结

RocketMQ 通过分层架构设计,在存储效率、集群扩展性和数据可靠性之间实现完美平衡。其设计理念值得分布式系统开发者深入借鉴:

  1. 顺序写 + 零拷贝 → 极致 IO 性能

  2. 主从分离 + 多副本 → 金融级高可用

  3. 轻量级 NameServer → 避免单点瓶颈

http://www.xdnf.cn/news/1373.html

相关文章:

  • 45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?
  • Git技术详解:从核心原理到实际应用
  • 示波器探头干扰致晶振停振的机理与工程对策
  • 三星One UI安全漏洞:剪贴板数据明文存储且永不过期
  • CSS清楚默认样式
  • APK安装失败,提示-13的错误
  • 解耦旧系统的利器:Java 中的适配器模式(Adapter Pattern)实战解析
  • CSS 选择器介绍
  • 【Java学习笔记】random的使用
  • 软件测试之功能测试详解
  • 从零到精通:探索GoFrame框架中gcron的定时任务之道 —— 优势、实践与踩坑经验
  • STM32F103 单片机(基于 ARM Cortex-M3 内核)的启动过程涉及硬件初始化、固件配置和程序执行流程。
  • 【计算机视觉】CV项目实战- Florence-SAM 多模态视觉目标检测+图像分割
  • Java_day30-35
  • 5.2.3 WPF 中 XAML 文件 Converter 使用介绍
  • 私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档
  • 安装jdk报错2503、2502--右键msi文件没法管理员权限执行(Windows解决方案)
  • 栈和队列学习记录
  • 图聚类中的亲和力传播
  • 国产三维CAD皇冠CAD在机械及汽车零部件设计建模教程:斜滑动轴承
  • Python内置函数---bin()
  • 书籍推荐:《认知觉醒》一周岭
  • 单片机获取真实时间的实现方法
  • Windows 各版本查找计算机 IP 地址指南
  • 在Notepad++中使用NppAtyle插件格式化代码
  • 正则表达式的捕获组
  • 众趣科技X世界读书日丨数字孪生技术赋能图书馆空间智慧化运营
  • TCP四大特性面试回答引导
  • UniOcc:自动驾驶占用预测和预报的统一基准
  • 【华为】防火墙双击热备-之-主备模式-单外网线路