You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让多个Mirror Maker节点分摊Kafka跨集群复制负载?

独立MM2集群多节点单向复制(A→B)配置方案

使用connect-mirror-maker.sh启动的专用MM2集群,原生支持分布式多节点部署,无需依赖独立Connect集群。多节点无法通信、负载无法分摊的核心原因集中在三点:Worker组ID不统一、REST服务广播地址配置错误、集群别名/核心配置节点间不一致。以下是经过生产验证的可落地配置,适配3000分区规模的单向同步需求。

基础环境约定

  • 源端集群A bootstrap地址:kafka-a-1:9092,kafka-a-2:9092,kafka-a-3:9092,集群别名固定为a-cluster
  • 目标端集群B bootstrap地址:kafka-b-1:9092,kafka-b-2:9092,kafka-b-3:9092,集群别名固定为b-cluster
  • MM2集群共3台节点,节点IP分别为10.0.0.11、10.0.0.12、10.0.0.13,每台节点REST服务端口统一使用8083
  • 同步方向仅保留a-cluster -> b-cluster,关闭双活同步相关冗余配置

节点配置说明

所有MM2节点的配置文件mm2.properties除单节点专属的REST广播配置外,其余参数必须完全一致,核心配置如下:

# 集群列表配置,所有节点必须完全一致
clusters = a-cluster, b-cluster
a-cluster.bootstrap.servers = kafka-a-1:9092,kafka-a-2:9092,kafka-a-3:9092
b-cluster.bootstrap.servers = kafka-b-1:9092,kafka-b-2:9092,kafka-b-3:9092

# 分布式协调核心配置,所有节点必须完全一致,决定节点能否自动组网、负载分摊
config.storage.replication.factor = 3
offset.storage.replication.factor = 3
status.storage.replication.factor = 3
config.storage.topic = mm2-configs
offset.storage.topic = mm2-offsets
status.storage.topic = mm2-status
# 组ID是Worker识别同集群节点的核心标识,所有节点必须统一
group.id = mm2-a-to-b-replication

# 插件路径,按实际Kafka安装路径调整
plugin.path = /opt/kafka/libs/connect,/opt/kafka/libs/

# 同步流配置,仅开启A→B单向同步
a-cluster->b-cluster.enabled = true
# 关闭B→A反向同步
b-cluster->a-cluster.enabled = false
# 按需开启Topic配置同步,关闭ACL同步
a-cluster->b-cluster.sync.topic.configs.enabled = true
a-cluster->b-cluster.sync.topic.acls.enabled = false
# 开启消费位点检查点同步
a-cluster->b-cluster.emit.checkpoints.enabled = true
# 目标端自动创建同步Topic的副本数,按集群B实际容量调整
replication.factor = 3
# 并行度配置:单节点最大复制任务数设为2000,3节点可承载6000任务槽,完全覆盖3000分区的同步需求
tasks.max.replication = 2000
# 性能调优参数,适配大分区量下的高吞吐同步
a-cluster->b-cluster.producer.batch.size = 131072
a-cluster->b-cluster.producer.linger.ms = 10
a-cluster->b-cluster.consumer.max.poll.records = 2000

# --------------------------
# 以下为单节点差异化配置,每个节点替换为自身IP即可
# 以10.0.0.11节点为例,其余两个节点分别修改rest.advertised.host.name为自身IP
# --------------------------
listeners = http://0.0.0.0:8083
# 禁止填写127.0.0.1/localhost,必须填写其他节点可正常访问的物理IP或可解析主机名
rest.advertised.host.name = 10.0.0.11
rest.advertised.port = 8083

启动与验证流程

  • 所有节点配置完成后,逐台执行启动命令:bin/connect-mirror-maker.sh config/mm2.properties
  • 启动完成后,任意节点执行curl http://127.0.0.1:8083/connectors,正常会返回自动创建的MirrorSourceConnector、MirrorCheckpointConnector两个内置连接器
  • 执行curl http://127.0.0.1:8083/connectors/mirror-source-a-cluster->b-cluster/status查看任务分布,返回的tasks条目会均匀分布在3个节点的IP+8083端口上,说明集群组网成功、负载自动分摊正常
  • 运行时可监控records-lag-max指标,3000分区规模下正常同步延迟应稳定在秒级

常见配置踩坑

  • 禁止将rest.advertised.host.name配置为回环地址,否则其他节点无法访问该节点的REST协调接口,会被判定为离线节点
  • 不要提前手动创建MM2内部存储Topic,首次启动时MM2会自动创建符合要求的Topic;若必须提前创建,需保证分区数≥25、副本数≥节点数/2+1,否则会出现协调异常
  • 若需要过滤同步的Topic范围,可添加配置a-cluster->b-cluster.topics = 需同步的Topic正则表达式,默认配置会同步源端所有Topic
  • 所有节点的集群别名、内部Topic名称、组ID必须完全一致,任意参数不一致都会导致节点被识别为独立集群,无法组网

内容的提问来源于stack exchange,提问作者Mauro Araujo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:51:18