麻花痒 发表于 3 天前

RocketMQ 核心架构速览

 接待光临小站:致橡树
文章现有讲述比力简单,后续逐渐丰富各部分内容。
Apache RocketMQ 作为阿里巴巴开源的一款分布式消息中间件,凭借其高吞吐、低延迟、高可用等特性,成为金融级稳定性场景的首选解决方案。本文将深入剖析 RocketMQ 的架构设计,解读其核心组件、存储机制和高可用策略。
RocketMQ 核心架构

https://i-blog.csdnimg.cn/direct/6b557d3d361049f9a2dd6bda4ddd04fa.png
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 通过分层架构设计,在存储效率、集群扩展性和数据可靠性之间实现完善平衡。其设计理念值得分布式系统开发者深入借鉴:

[*] 次序写 + 零拷贝 → 极致 IO 性能
[*] 主从分离 + 多副本 → 金融级高可用
[*] 轻量级 NameServer → 避免单点瓶颈


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: RocketMQ 核心架构速览