Mirror Maker 2:从Standby集群回切至Active集群的方案咨询
Kafka Active-Standby架构回切与数据一致性方案
问题1:Standby回切至Active并保留期间数据的操作流程
核心是先完成Standby到Active的反向数据同步,再切换业务流量,具体步骤如下:
- 恢复Active集群至可用状态:确保Active集群的所有broker、ZK(或KRaft)服务正常启动,集群元数据完整,无分区故障。
- 部署反向Mirror Maker 2(MM2):配置MM2从Standby集群同步数据到Active集群,重点同步Standby作为主期间新增的所有主题(包括业务主题和MM2自身的offset同步主题)。
- 关键配置片段:
clusters=active,standby active.bootstrap.servers=active-kafka-1:9092,active-kafka-2:9092 standby.bootstrap.servers=standby-kafka-1:9092,standby-kafka-2:9092 standby->active.enabled=true standby->active.topics=.* standby->active.groups=.*
- 关键配置片段:
- 验证数据一致性:对比Active和Standby集群的主题分区偏移量,确保所有业务主题的最新偏移量一致;同时检查消费者组的位移是否同步完成。
- 切换业务流量到Active集群:更新生产者、消费者的
bootstrap.servers配置指向Active集群,确保所有新的生产、消费请求都路由到Active。 - 停止反向MM2并恢复正向同步:待业务稳定运行在Active集群后,停止反向MM2,重新启动原有的正向MM2(Active到Standby),恢复主备复制架构。
问题2:是否需要反向运行MM2同步数据后再回切?
是的,必须完成反向同步后再执行回切。
Standby集群作为主集群期间,会产生新的业务数据、消费者位移变更,这些数据仅存在于Standby集群中。如果直接回切到Active,会导致这部分数据丢失,出现数据不一致。通过反向MM2可以将Standby的全量数据(包括故障期间新增的)同步到Active,保证两个集群数据完全一致后再切换,才能避免数据丢失。
如果你的MM2原本配置了双向同步(平时只启用正向,故障时临时启用反向),可以直接调整MM2的配置参数,无需重新部署实例。
问题3:如何停止生产者向Standby发送数据以保证复制无丢失?
可以通过以下几种可靠方式实现:
- 动态配置切换:如果生产者使用配置中心(如Nacos、Consul)管理
bootstrap.servers,直接推送更新后的配置(指向Active集群),生产者会自动热加载配置,停止向Standby发送数据。 - 应用优雅停机与重启:对于无动态配置的生产者,先优雅停机(确保当前生产请求全部提交完成),再修改配置指向Active后重启应用。
- 流量拦截:如果通过网关或负载均衡器路由Kafka流量,直接将Standby集群的Kafka服务从路由规则中移除,拦截所有新的生产请求。
- 验证停止状态:通过Kafka监控工具查看Standby集群的
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec指标,确认该指标持续为0,同时检查Standby集群的主题分区偏移量不再增长,确保没有新数据写入。
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

