Kafka MirrorMaker跨集群同步原理
请介绍Kafka MirrorMaker(MM1)的工作原理和架构。MirrorMaker如何进行跨集群的数据同步?如何处理Topic重命名、偏移量映射和消费组同步?存在哪些主要局限?
回答
Yahuda
1. 架构原理
MirrorMaker(MM1)本质是一个Kafka消费者+生产者管道:
- 从源集群消费消息
- 将消息生产到目标集群
- 每个MirrorMaker进程可启动多个Consumer/Producer线程
# 启动命令
bin/kafka-mirror-maker.sh \
--consumer.config consumer.properties \
--producer.config producer.properties \
--num.streams 8
2. 核心机制
Topic重命名
- 默认添加源集群别名前缀:
source.topic→src.topic - 通过
--whitelist/--blacklist过滤Topic - 可配置
--num.streams控制并行度
偏移量映射
- 源集群消费偏移量保存在
__consumer_offsets - 目标集群是从0开始的新偏移量
- 不维护源到目标偏移量映射关系
- 消费组在目标集群需重新设置偏移量
消费组同步
- MM1 不支持消费组偏移量同步
- 目标集群消费组需手动管理
- 需额外工具(如MirrorCheckPoint)同步消费进度
3. 主要局限
- 单点故障:MirrorMaker进程无HA机制
- 消费组不同步:灾难恢复需手动处理
- 无端到端Exactly-Once:至少一次语义
- 配置管理复杂:依赖文件配置,无REST API
- 延迟高:仅支持异步模式
- 不监控Topic配置变更:ACL、配置变更不同步
4. 适用场景
- 简单跨数据中心备份
- 同集群Topic复制
- MM1已逐步被MM2替代