Rocketmq 的多主多从架构中的 从节点的作用是什么? 生产者发消息都是master的broker接受的对吧?那么消费者读 具体是读到 master的broker 还是selve 的broker 有什么规则呢?
当每个broker 增加了如下的配置
enableSlaveActingMaster=true RocketMQ 4.9.3 或以上版本(推荐 5.x)
某个 master 挂了 会有什么具体的体现? master恢复以后呢?
RocketMQ 多 Master-Slave 模式(异步/同步复制)高可用架构下, Master 节点挂了以后,该集群无法继续执行写操作, 即:
RocketMQ 的 Slave 在 Master 宕机期间,不能接收 Producer 发来的消息。(即不能发送消息到 Slave)
🚧 当 Master 挂掉时会发生什么?
NameServer 中该 Topic 的路由信息仍然指向挂掉的 Master;
Producer 会尝试连接 Master 写入消息,连接失败;
Producer 会报错:No route info for this topic 或 Send failed;
🚫 RocketMQ 没有内建自动将 Producer 的写路由重定向到 Slave 的能力。
✅ 原因解析
RocketMQ 的 Master-Slave 模式是典型的 “主写从读” 架构:
🔁 解决方案建议
要实现更高的可用性和写容忍性,可考虑以下方案:
✅ 方案一:部署多 Master 模式(多主多从)
每个 Broker 是一个独立的 Master;
容错性高,某个 Master 挂了不会影响其他;
推荐生产使用,需搭配多个 NameServer。
✅ 方案二:RocketMQ 5.x + Proxy 网关模式(未来趋势)
使用 Proxy 统一接收 Producer 消息,代理转发;
能隐藏 Broker 状态,提高写入可用性;
✅ 一、从节点的作用是什么?
在 RocketMQ 中,多主多从(Master-Slave)结构的从节点主要起 备份和容灾 作用:
✅ 二、消息的发送与消费的路由规则?
1. 消息发送(Producer ➝ Broker)
默认行为是:
只发往 Master 节点
取决于 Topic 在哪些 Master 上创建,Producer 会向这些 Master 轮询或顺序发消息(或使用 MessageQueueSelector 取模)
🚫 Producer 不会主动发消息到 Slave 节点!
2. 消息消费(Consumer ➝ Broker)
RocketMQ 支持 Consumer 从 Master 和 Slave 中读取消息,但行为取决于以下配置:
具体规则总结如下:
✅ 三、设置 enableSlaveActingMaster=true 后的行为变化?
RocketMQ 4.5+ 开始支持
➤ 作用:
当某个 Master Broker 宕机后,其绑定的 Slave 节点自动“代理”Master 角色:
✅ 四、Master 恢复上线以后:
当重新启动挂掉的 Master 后,Acting Master 角色自动取消,主节点重新接收写/读请求,Slave 恢复为只读备份行为取决于 你使用的是哪种主从同步模式:
✅ 异步复制(ASYNC_MASTER,默认)
Slave 在 Master 宕机期间接收到的消息(通过 Consumer 消费)不会同步回 Master;
Master 启动后仍是 Master,不会自动补齐数据;
存在消息不一致、数据丢失风险。
✅ 同步复制(SYNC_MASTER)
每条消息都必须在 Master 和 Slave 都写入成功才算成功;
Master 恢复后仍保持与 Slave 同步;
数据一致性强,不丢消息;
但性能略低。
✅ 五、具体行为总结:
✅ 可视化示意图(变化流程)
💥 Master 宕机前:
Producer --> Master-A
Consumer --> Master-A
Slave-A <- 实时复制 Master-A 数据
💡 Master 宕机 + enableSlaveActingMaster=true:
Producer --> Slave-A(Acting Master)
Consumer --> Slave-A(Acting Master)
🔁 Master 恢复后:
Producer --> Master-A(恢复)
Consumer --> Master-A(恢复)
Slave-A <-- 恢复为只读从节点
✅ 建议实践方式:
如果追求 高可用、写服务不中断,在所有 Slave 的配置中 开启 enableSlaveActingMaster=true
如果你使用异步复制(ASYNC_SLAVE),即使 Acting Master 期间可能丢少量数据,也能接受
如果要求高一致性,请考虑 DLedger(同步复制 + Raft 协议)-5.X 版本
评论区