Kafka MirrorMaker 2 架构与特性
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定期将源消费组偏移量写入目标集群的heartbeatTopic- 目标集群可基于此从断点继续消费
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:偏移量同步Topicemit.checkpoints.interval.ms:Checkpoint间隔
5. 限制
- 不支持Exactly-Once端到端(at-least-once为主)
- 双向同步需防死循环(通过心跳避免)
- 大规模集群需合理分配Connector任务数