mirrormaker 2.0 是 kafka 自带的双向同步工具,需配置命名隔离、offset 同步和网络互通;通过 kafka connect rest api 管理,java 可调用其接口或监控 jmx 指标实现运维自动化。

Java 中本身不直接“使用” MirrorMaker——它不是 Java API 库,而是 Kafka 自带的命令行工具(底层用 Java 编写)。实际操作中,你不需要写 Java 代码来调用 MirrorMaker,而是通过配置文件 + Shell 脚本启动它。但如果你在 Java 项目中需要集成或管理同步流程(比如启停、监控、动态配置),则可通过 REST API 或 JMX 与 MirrorMaker 2.0(MM2)交互。
用 MM2 实现跨机房双向同步的关键配置
MirrorMaker 2.0 基于 Kafka Connect,支持双向、自动发现、offset 同步和高可用。要稳定运行,必须做好三件事:命名隔离、offset 映射、网络互通。
-
给 topic 加数据中心前缀:比如 A 机房的
orders同步到 B 机房后变成dc-a.orders,B 机房的orders同步过去变成dc-b.orders。这样可避免 A→B 写入后又被 B→A 重复镜像,形成循环。 -
启用 offset 同步:在 MM2 配置里设
sync.group.offsets.enabled=true,并确保__checkpointtopic在目标集群存在且可写(需提前创建,replication.factor ≥ 2)。 -
双集群网络必须双向连通:MM2 进程要同时能访问源集群和目标集群的
bootstrap.servers,不能只单向打通。防火墙、ACL、SASL/SSL 认证都要配全。
MM2 启动方式(非 Java 编码,但可由 Java 程序触发)
你不用在 Java 里 new MirrorMaker 对象。标准做法是:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 写好
mirror-maker-config.properties,包含 source/target 别名、topic 正则、connector 类型等; - 用
connect-distributed.sh启动 Kafka Connect 集群; - 用 HTTP POST 提交 MM2 connector 配置(例如:
curl -X POST -H "Content-Type: application/json" --data @mm2-config.json http://connect:8083/connectors); - Java 服务可通过调用该 REST 接口完成 connector 的创建/暂停/删除,实现运维自动化。
为什么别用 MM1?
MM1 是简单 consumer-producer 模型,不支持 offset 同步、无高可用、无法热更新配置。若强行做双向,得部署两套独立实例(A→B 和 B→A),极易因 group.id 或 topic 名冲突导致消息无限循环。而 MM2 内置 MirrorSourceConnector、MirrorCheckpointConnector 和 MirrorHeartbeatConnector,天然适配双向场景,正则匹配新 topic 也不用重启。
Java 侧能做的实用增强
虽然 MirrorMaker 本身不靠 Java 调用,但 Java 服务可以:
- 监听 MM2 的 JMX 指标(如
kafka.connect:type=connector-metrics,connector=mm2-source-connector)做延迟告警; - 定期调用
kafka-consumer-groups.sh(或封装成 ProcessBuilder 执行)检查同步 lag; - 把业务 consumer 改为订阅带前缀的 topic(如
dc-a.orders),由应用层判断数据来源并路由逻辑,避免混淆原始与镜像数据; - 配合 Spring Boot Actuator + Prometheus,把 connector 状态、offset 差值等指标暴露为监控端点。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










