4、MirrorMaker 2.0安装:下载与解压、配置文件详解(mm2.properties)、启动与验证
好,到了真正动手的环节了。前面聊了那么多架构和原理,说白了都是为了这一刻——把 MirrorMaker 2.0 跑起来。我刚开始接触 MM2 的时候,觉得不就是个数据同步工具嘛,下载解压就能用。结果第一次配置就踩了坑,折腾了大半天。今天我把这些经验都揉碎了讲给你听,保证你少走弯路。
4.1 下载与解压:别选错版本
MirrorMaker 2.0 从 Apache Kafka 2.4.0 开始内置,所以你不必单独下载一个叫 "mirror-maker-2.0.tar.gz" 的东西。它就在 Kafka 的发布包里,路径是 ./libs/connect-mirror-client-*.jar。
我个人习惯去 Apache Kafka 官网 下载最新的稳定版。这里有个坑——千万别用 2.4.0 之前的版本,那些压根没有 MM2。我建议直接用 3.x 系列,功能更稳定,bug 也少很多。
下载解压的步骤很简单,我直接贴命令:
# 下载 Kafka(以 3.5.0 为例)
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz
# 解压
tar -xzf kafka_2.13-3.5.0.tgz
cd kafka_2.13-3.5.0
# 确认 MM2 相关 jar 包存在
ls libs/ | grep connect-mirror
# 应该能看到类似 connect-mirror-client-3.5.0.jar 的文件
嗯,这里要注意:解压后别急着跑,先检查一下 libs/ 目录下有没有 connect-mirror 开头的 jar 包。如果没有,说明你下载的版本不对,或者包不完整。我曾经有一次下载了源码包而不是二进制包,折腾了半天才发现。
4.2 配置文件详解:mm2.properties 是核心
MM2 的灵魂就是 mm2.properties 配置文件。说白了,你告诉它「从哪读数据、写到哪去、同步哪些 topic、怎么处理冲突」,它就照做。我第一次看这个配置文件时觉得挺复杂,其实拆开来看就几个部分。
先看一个完整的示例配置,我拿实际项目里用过的改了一下:
# ========== 集群别名定义 ==========
clusters = source-cluster, target-cluster
# ========== 源集群连接信息 ==========
source-cluster.bootstrap.servers = 192.168.1.10:9092,192.168.1.11:9092
source-cluster.security.protocol = SASL_PLAINTEXT
source-cluster.sasl.mechanism = PLAIN
source-cluster.sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="admin-secret";
# ========== 目标集群连接信息 ==========
target-cluster.bootstrap.servers = 192.168.2.10:9092,192.168.2.11:9092
target-cluster.security.protocol = SSL
target-cluster.ssl.truststore.location = /etc/kafka/truststore.jks
target-cluster.ssl.truststore.password = changeit
# ========== 同步哪些 topic ==========
topics = .*
# 排除内部 topic
topics.exclude = __consumer_offsets, __transaction_state
# ========== 同步配置 ==========
source->target.enabled = true
target->source.enabled = false
# ========== 复制策略 ==========
replication.policy.class = org.apache.kafka.connect.mirror.DefaultReplicationPolicy
# ========== 心跳检测 ==========
heartbeats.interval.seconds = 5
# ========== 偏移量同步 ==========
sync.topic.acls.enabled = false
sync.topic.configs.enabled = true
sync.topic.offsets.enabled = true
# ========== 消费者/生产者配置 ==========
source-cluster.consumer.max.poll.records = 500
target-cluster.producer.compression.type = snappy
这个配置看起来长,其实核心就几块。我画了个图帮你理解:
配置里最关键的几个参数,我单独拎出来说说:
| 参数 | 作用 | 我的建议 |
|---|---|---|
clusters |
定义集群别名,多个用逗号分隔 | 别名别用特殊字符,我习惯用 src 和 dst |
topics |
正则匹配要同步的 topic | 刚开始用 .* 测试,上线前一定要加白名单 |
source->target.enabled |
控制同步方向 | 双向同步要谨慎,我曾经遇到过数据回环 |
replication.policy.class |
topic 命名策略 | 默认策略会在目标集群给 topic 加后缀,比如 orders 变成 orders.source-cluster |
heartbeats.interval.seconds |
心跳检测间隔 | 默认 5 秒够用,别设太短,会增加网络开销 |
4.3 启动与验证:三步走
配置写好了,怎么启动?其实就一条命令。但我建议你分三步走,每一步都验证一下,别一股脑全跑起来再排查。
第一步:检查配置
启动前先做一次「语法检查」。我个人习惯用 kafka-configs.sh 或者直接写个脚本校验配置文件的格式:
# 检查配置文件是否有明显的语法错误
# 比如等号两边有没有空格、引号是否成对
grep -n "=" mm2.properties | grep -v "^#" | head -20
# 检查必填项是否缺失
grep -E "^(clusters|topics|.*bootstrap.servers)" mm2.properties
嗯,这里要注意:mm2.properties 里等号两边不要加空格,比如 clusters = source, target 虽然也能解析,但有些旧版本会报错。我统一写成 clusters=source,target,省心。
第二步:启动 MirrorMaker 2.0
启动命令很简单,但参数别搞错:
# 启动 MM2(在 Kafka 目录下执行)
./bin/connect-mirror-maker.sh mm2.properties
# 如果想后台运行,加 nohup
nohup ./bin/connect-mirror-maker.sh mm2.properties > mm2.log 2>&1 &
启动后,日志会输出到控制台或者 mm2.log。我建议你盯着日志看 10 秒钟,确认没有 ERROR 级别的报错。常见的启动错误有:
- ClassNotFoundException:缺 jar 包,检查
libs/目录 - TimeoutException:连不上 Kafka 集群,检查网络和端口
- ConfigException:配置项写错了,仔细检查
mm2.properties
Connection to node -1 could not be established,查了半天发现是 bootstrap.servers 的端口写成了 9093,但集群实际用的是 9092。这种低级错误最浪费时间,所以启动前一定 double-check 连接信息。
第三步:验证同步是否正常
启动成功了,怎么知道数据有没有同步过去?我一般用三个方法验证:
- 看心跳 topic:MM2 会在目标集群自动创建
heartbeat开头的 topic,比如heartbeat.source-cluster。如果这个 topic 有数据,说明连接正常。 - 手动生产消费测试:在源集群生产一条消息,然后在目标集群消费,看能不能收到。
- 检查偏移量同步:查看目标集群的
mm2-offset-syncstopic,里面有偏移量同步的记录。
具体命令:
# 1. 查看心跳 topic
./bin/kafka-topics.sh --bootstrap-server target-cluster:9092 --list | grep heartbeat
# 2. 在源集群生产消息
echo "test-message" | ./bin/kafka-console-producer.sh --bootstrap-server source-cluster:9092 --topic test-topic
# 3. 在目标集群消费消息(注意 topic 名可能被重命名)
./bin/kafka-console-consumer.sh --bootstrap-server target-cluster:9092 --topic test-topic.source-cluster --from-beginning
如果消费端能收到 test-message,恭喜你,MM2 配置成功了!
test-2024-01-15-10:30:00,这样在目标集群消费时一眼就能看出是不是刚同步过来的数据。
好了,安装和配置就这些。说白了,MM2 的安装不复杂,复杂的是配置细节和排错。你只要把 mm2.properties 里的集群信息、同步方向、topic 过滤这三个核心部分写对,基本就能跑起来。剩下的那些参数,比如 consumer.max.poll.records、producer.compression.type,都是优化项,等跑通了再慢慢调。