1. Broker 主从同步中 SYNC_MASTER/ASYNC_MASTER、同步双写与异步复制的数据安全边界
RocketMQ 的默认主从同步模式(SYNC_MASTER/ASYNC_MASTER)如何决定数据安全边界,同步双写与异步复制有何区别?
- SYNC_MASTER 与 ASYNC_MASTER 的区别
- 同步双写与异步复制的数据安全边界
- 主从切换时数据丢失可能性
RocketMQ 的 Broker 复制方式由 brokerRole 决定:SYNC_MASTER 表示主从同步复制,Master 收到消息后需由 Slave 确认写入成功才返回给生产者;ASYNC_MASTER 表示主从异步复制,Master 收到消息即返回,Slave 异步复制,主节点宕机时 Slave 可能丢失尚未复制的最新消息。数据安全边界取决于"同步复制 + 同步刷盘"的组合:SYNC_MASTER + SYNC_FLUSH 在 Master 与 Slave 都刷盘后才返回,可靠性最高;而 ASYNC_MASTER + ASYNC_FLUSH 在 Master 宕机时可能丢数据。运维上,对账务等强一致场景应选择 SYNC_MASTER,对吞吐优先场景可选 ASYNC_MASTER。
同步复制牺牲吞吐换取数据安全,异步复制反之。RocketMQ 的主从同步是"复制"层面,与刷盘(SYNC_FLUSH/ASYNC_FLUSH)是两个独立维度,需组合理解。主从切换时,若采用异步复制,丢失的是主节点尚未同步给从的消息,可通过业务重投或对账弥补。
# broker 配置主从复制模式
# brokerRole=SYNC_MASTER 或 ASYNC_MASTER
# 查看 broker 状态
sh mqadmin clusterList -n localhost:9876