首页/数据/数据工程与 ETL 速查/MirrorMaker 2 跨集群复制
Kafka64 条

MirrorMaker 2 跨集群复制

MirrorMaker 2 基于 Kafka Connect 实现集群间数据复制:自动同步主题内容与部分元数据,支持单向与双向拓扑,常用于机房容灾与数据汇聚。

MirrorMaker 2 是什么

MirrorMaker 2(MM2)基于 Kafka Connect 框架实现集群间复制:从源集群读取主题数据写入目标集群,同时同步消费组位移、心跳和主题配置等元数据,并默认给复制后的主题加上源集群前缀以避免命名冲突。常见用途是机房容灾、数据汇聚与集群迁移。因为它跑在 Connect 之上,扩缩容、监控与故障排查都沿用 Connect 的运维方式。

基本信息

形态Connect 框架上的 Connector,通常运行在目标集群侧
主题命名默认加源集群前缀,避免与目标集群同名主题冲突
元数据同步消费组位移、心跳、主题配置自动同步
关键配置clusters、各集群 bootstrap.servers、<src>-><dst> 方向开关

典型使用场景

  • 同城双机房容灾:主集群故障后切换到备集群继续消费
  • 数据汇聚:把多个业务集群数据复制到统一的大数据集群
  • 集群迁移:新老集群并行复制一段时间后再切流
  • 跨地域分发:一份数据复制到不同区域供当地应用消费
  • 读写分离:把读负载引到副本集群,减轻主集群压力

mm2.properties 关键片段

mm2.properties 关键片段
clusters = src, dst                          # 参与复制的集群别名
src.bootstrap.servers = kafka-src:9092       # 源集群入口
dst.bootstrap.servers = kafka-dst:9092       # 目标集群入口
src->dst.enabled = true                      # 开启源到目标的复制方向
src->dst.topics = orders.*                   # 只复制匹配的主题,避免全量搬运
replication.factor = 3                       # 复制后主题的副本数
checkpoints.topic.replication.factor = 3     # 检查点主题副本数
heartbeats.topic.replication.factor = 3      # 心跳主题副本数

启动与查看

启动与查看
connect-mirror-maker.sh config/mm2.properties   # 启动 MM2
# 复制进度可在 Connect REST API 或心跳主题中查看

配置要点读法

配置含义忽略后的表现
clusters集群别名列表别名不一致会导致配置无法解析
<src>-><dst>.enabled复制方向开关未开启则完全不复制数据
topics 过滤复制范围白名单全量复制会把内部主题一起搬运
replication.factor复制后主题副本数目标集群副本不足,失去冗余
refresh.topics.interval.seconds新主题发现周期新主题要等很久才被复制
每个集群要设置唯一的 cluster alias;双向复制时必须排除心跳、检查点、位移等内部主题,否则会形成回环复制,流量被不断放大。
源集群的位移号不会直接映射到目标集群,切换消费组依赖位移同步机制;容灾演练必须包含切换验证,否则真正故障时容易出现大量重复或漏消费。

易错点

  • 双向复制未排除心跳、检查点等内部主题,产生循环复制并持续放大流量
  • 以为目标集群副本配置会自动跟随源集群,实际副本数不足,容灾时失去冗余能力
  • 新主题依赖刷新周期才被发现,要求当天可用的主题会延迟很久才完成复制
  • 切流前未演练位移同步,切换后消费组从错误位置开始,产生大量重复数据

数据来源与参考

  • Apache Kafka 官方文档:Geo-Replication 与 MirrorMaker 2
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌