RocketMQ 的集群模式主要针对 Broker 集群的部署架构设计,目的是实现高可用、高性能和数据的可靠性。以下是 RocketMQ 常见的几种集群模式及其特点:
1. 单 Master 模式(Single Master)
- 架构:仅部署一个 Broker 节点(单 Master,无 Slave)。
- 特点 :
- 简单:适合本地测试或开发环境。
- 风险高:单点故障,一旦 Broker 宕机,整个服务不可用。
- 数据不可靠:未配置主从复制,数据可能丢失。
- 适用场景 :
- 非生产环境,如功能验证或开发调试。
2. 多 Master 模式(Multi-Master)
-
架构:部署多个 Broker 节点,所有节点均为 Master,无 Slave。
-
特点 :
- 高性能:所有节点独立处理读写请求,无主从复制开销。
- 高可用:某个 Master 宕机不影响其他节点。
- 数据可靠性低:单个 Master 宕机时,未被消费的消息可能丢失(依赖刷盘策略)。
-
适用场景 :
- 对消息可靠性要求不高,但需要高吞吐量的场景(如日志收集)。
-
配置示例 :
properties# Broker 配置文件中指定集群名称(需一致) brokerClusterName=MyCluster brokerName=broker-a brokerId=0 # Master 的 brokerId 固定为 0
3. 多 Master 多 Slave 异步复制模式(Async Replication)
- 架构 :
- 每个 Master 节点配置一个或多个 Slave 节点。
- 数据同步方式:Slave 异步从 Master 复制数据。
- 特点 :
- 高可用 :Master 宕机后,消费者可从 Slave 读取数据(需配置
consumerFromWhere=CONSUME_FROM_LAST_OFFSET
)。 - 性能较高:异步复制对主节点性能影响小。
- 数据可能丢失:若 Master 宕机且未完成数据同步,Slave 可能缺失部分数据。
- 高可用 :Master 宕机后,消费者可从 Slave 读取数据(需配置
- 适用场景 :
- 对消息可靠性有一定要求,且允许少量数据丢失的场景(如订单状态异步通知)。
4. 多 Master 多 Slave 同步双写模式(Sync Double Write)
- 架构 :
- 每个 Master 节点配置一个或多个 Slave 节点。
- 数据同步方式:Master 将消息同步写入 Slave 后,才向生产者返回成功。
- 特点 :
- 数据高可靠:主从数据强一致,Master 宕机后 Slave 数据完整。
- 性能较低:同步双写增加网络延迟,吞吐量下降。
- 高可用:支持故障自动切换(需依赖 RocketMQ 的 DLedger 组件或外部协调服务)。
- 适用场景 :
- 对数据可靠性要求极高的场景(如金融交易核心链路)。
5. Dledger 模式(基于 Raft 协议)
- 架构 :
- 使用 RocketMQ 的 Dledger 组件(基于 Raft 协议实现多副本一致性)。
- 每个 Broker 组包含多个节点(如 3 节点),自动选举 Leader。
- 特点 :
- 强一致性:数据通过 Raft 协议保证多副本一致性。
- 自动故障转移:Leader 宕机后自动选举新 Leader。
- 部署复杂:需要至少 3 节点形成 Quorum。
- 适用场景 :
- 需要强一致性和自动容灾的高要求场景。
对比总结
集群模式 | 性能 | 可靠性 | 复杂度 | 适用场景 |
---|---|---|---|---|
单 Master | 高 | 低 | 低 | 本地测试 |
多 Master | 最高 | 中 | 中 | 高吞吐、容忍少量丢失 |
多 Master 多 Slave 异步 | 高 | 中高 | 中高 | 一般生产环境 |
多 Master 多 Slave 同步 | 中 | 高 | 高 | 金融级可靠性 |
Dledger 模式 | 中低 | 最高 | 最高 | 强一致性、自动容灾 |
选择建议
- 测试环境:单 Master 或 多 Master。
- 高吞吐场景:多 Master 模式(容忍少量数据丢失)。
- 一般生产环境:多 Master 多 Slave 异步复制。
- 金融级场景:多 Master 多 Slave 同步双写 或 Dledger 模式。
配置关键点
- Broker 角色 :通过
brokerId
区分 Master(0
)和 Slave(非0
)。 - 刷盘策略 :同步刷盘(
flushDiskType=SYNC_FLUSH
)提高可靠性,但降低性能。 - 主从复制 :通过
brokerRole=SYNC_MASTER
(同步)或ASYNC_MASTER
(异步)配置。
通过合理选择集群模式,可以平衡 RocketMQ 的性能、可靠性和复杂度,满足不同业务场景的需求。