Kafka MirrorMaker2无相关消费者组却能复制数据的原理疑问
MirrorMaker2 MirrorSourceConnector 工作机制与疑问解答
配置与现状
已向Connect集群添加MirrorMaker2的MirrorSourceConnector,配置如下:
{ "name": "test_mirror", "config": { "connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector", "tasks.max": 1, "source.cluster.alias": "thirdparty", "target.cluster.alias": "kafka", "source.cluster.bootstrap.servers": "thirdparty:9092", "target.cluster.bootstrap.servers": "kafka:9092", "topics": "test", "sync.topic.acls.enabled": false, "refresh.topics.enabled": false, "refresh.groups.enabled": false, "offset-syncs.topic.replication.factor": 1, "replication.factor": 1 } }
该连接器可正常工作,能在本地集群消费thirdparty.test主题,但执行以下命令检查两个集群时,未发现任何与镜像相关的消费者组:
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --all-groups --describe
核心工作机制
MirrorSourceConnector 基于 Kafka Connect 框架实现数据镜像,核心流程如下:
- 源端数据拉取:它并非使用独立的 Kafka 消费者实例,而是通过 Kafka 底层的消息读取逻辑直接获取源集群指定主题的分区数据,不需要注册外部消费者组。
- 偏移量自主维护:复制进度的偏移量不会依赖源或目标集群的消费者组存储,而是保存在 Connect 集群内部的
connect-offsets主题中,由 Connect 框架统一管理任务的偏移提交与恢复。 - 目标端消息写入:拉取到的消息会按照配置的规则(比如添加源集群别名前缀),通过 Kafka Producer 客户端写入目标集群的对应主题,完成数据镜像。
为何无可见消费者组
- Connect 框架替代了消费者组的核心功能:标准 Kafka 消费者组的作用是管理分区分配和偏移跟踪,但 Connect 框架本身已经内置了任务分配、偏移量持久化的机制,无需依赖外部消费者组。
- 偏移存储位置不同:MirrorSourceConnector 的复制偏移量存储在 Connect 专属的
connect-offsets主题里,而不是源集群的消费者组偏移存储中,因此用kafka-consumer-groups.sh无法查询到相关组信息。 - 任务运行方式特殊:MirrorSourceConnector 的任务是作为 Connect Worker 的子进程运行的,并非独立的消费者进程,不会在 Kafka 集群中注册出独立的消费者组实体。
内容的提问来源于stack exchange,提问作者The Fool
相关产品推荐
相关产品推荐

