CodeWalk

Kafka MirrorMaker 2 架构与特性

作者:我还是少年 · 2026-05-30 12:55

Kafka MirrorMaker 2(MM2)相比MM1有哪些重大改进?请说明MM2的内部架构,包括Connector机制、消费组同步、Topic配置自动同步、Exactly-Once语义支持等核心特性。如何配置MM2实现双向同步?

回答

我还是少年

1. MM2架构改进

MM2基于Kafka Connect框架,不再是独立的消费者-生产者模型:

  • 每个集群方向运行一个 MirrorSourceConnector
  • 内部使用 MirrorCheckpointConnector 同步消费组偏移量
  • 使用 MirrorHeartbeatConnector 做健康检测

2. 核心特性

消费组同步

// 自动在目标集群创建同名消费组
// 偏移量映射:源集群offset → 目标集群对应offset
// consumer.offset.sync.enable=true
  • MirrorCheckpointConnector 定期将源消费组偏移量写入目标集群的 heartbeat Topic
  • 目标集群可基于此从断点继续消费

Topic配置自动同步

  • 源集群的Topic配置(分区数、副本数、配置项)自动同步到目标集群
  • sync.topic.configs.enable=true
  • 自动同步Topic ACL(需配置)

Exactly-Once语义

// producer.enable.idempotence=true
// transactional.id 机制保证跨分区一致性
// 注意:非严格Exactly-Once,需配合幂等性生产者

3. 双向同步配置示例

{
  "clusters": "A,B",
  "A.bootstrap.servers": "host1:9092",
  "B.bootstrap.servers": "host2:9092",
  "A->B.enabled": true,
  "B->A.enabled": true,
  "replication.policy.separator": "."
}

4. 关键配置

  • replication.factor:目标集群副本数
  • heartbeats.interval.ms:心跳间隔(默认5000ms)
  • offset-syncs.topic.replication.factor:偏移量同步Topic
  • emit.checkpoints.interval.ms:Checkpoint间隔

5. 限制

  • 不支持Exactly-Once端到端(at-least-once为主)
  • 双向同步需防死循环(通过心跳避免)
  • 大规模集群需合理分配Connector任务数