rocketmq 刷盘机制 与同步机制区别
RocketMQ 刷盘机制与同步机制的区别
RocketMQ 的刷盘机制和同步机制是两个不同层面的概念,分别处理不同的问题:
刷盘机制 (Flush Mechanism)
作用:解决消息从内存持久化到磁盘的问题
流程:内存(PageCache) → 磁盘文件
两种模式:
同步刷盘 (SYNC_FLUSH)
消息写入内存后,立即调用fsync强制刷盘
确保消息写入磁盘后才返回成功响应
可靠性高,但性能较低
异步刷盘 (ASYNC_FLUSH)
消息写入内存后立即返回成功
由后台线程定期(默认500ms)批量刷盘
性能高,但极端情况下可能丢失少量未刷盘的消息
同步机制 (Replication Mechanism)
作用:解决主从Broker之间的数据同步问题
流程:主Broker → 从Broker
两种模式:
同步复制 (SYNC_MASTER)
主节点等待从节点存储成功后才返回写入成功
保证主从数据强一致
性能较低,但可靠性高
异步复制 (ASYNC_MASTER)
主节点写入成功后立即返回,不等待从节点
性能高,但主从数据有短暂不一致可能
关键区别
维度 | 刷盘机制 | 同步机制 |
---|---|---|
作用范围 | 单机内部(内存到磁盘) | 主从Broker之间 |
主要目的 | 数据持久化 | 数据冗余和高可用 |
影响层面 | 存储层 | 复制层 |
配置参数 | flushDiskType | brokerRole |
实际生产环境中,通常会根据业务需求组合使用这两种机制的不同模式,例如:
高可靠性场景:同步刷盘+同步复制
高性能场景:异步刷盘+异步复制
平衡场景:同步刷盘+异步复制 或 异步刷盘+同步复制