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;双向复制时必须排除心跳、检查点、位移等内部主题,否则会形成回环复制,流量被不断放大。
源集群的位移号不会直接映射到目标集群,切换消费组依赖位移同步机制;容灾演练必须包含切换验证,否则真正故障时容易出现大量重复或漏消费。