#作者:张桐瑞
文章目录
- [3 MirrorMaker2配置说明](#3 MirrorMaker2配置说明)
- [4 迁移方案](#4 迁移方案)
3 MirrorMaker2配置说明
3.1核心配置参数详解
# properties
# 定义集群别名和连接地址
clusters = cluster-A, cluster-B
cluster-A.bootstrap.servers = kafka-a-1:9092,kafka-a-2:9092
cluster-B.bootstrap.servers = kafka-b-1:9092,kafka-b-2:9092
# 启用从 A 到 B 的复制
cluster-A->cluster-B.enabled = true
# 要复制的 Topic (支持正则表达式)
cluster-A->cluster-B.topics = .*
# 是否同步 Topic 的配置 (分区数、副本数等)
sync.topic.configs.enabled = true
# 是否同步消费组位移
sync.group.offsets.enabled = true
# 远程主题的命名规则策略
replication.policy.class = org.apache.kafka.connect.mirror.DefaultReplicationPolicy
# **权限与刷新相关**
sync.topic.acls.enabled = true # 同步 Topic ACL
refresh.topics.interval.seconds = 60 # 定时刷新 Topic 信息
refresh.groups.interval.seconds = 60 # 定时刷新 Group 信息
refresh.cluster.configs.interval.seconds = 300# 定时刷新集群级配置
# MM2 内部 Topic 的副本数,生产环境务必设置为 >= 3
checkpoints.topic.replication.factor = 3
heartbeats.topic.replication.factor = 3
offset-syncs.topic.replication.factor = 3
# 单节点测试时需
replication.factor = 1
config.storage.replication.factor = 1
offset.storage.replication.factor = 1
status.storage.replication.factor = 1
3.2重点参数说明
- clusters: 这是给你的 Kafka 集群起个别名,方便在后续配置中引用。
- source->target.enabled: 这是一个方向性的配置,cluster-A->cluster-B.enabled = true 表示启用从 A 到 B 的数据同步。如果想实现双向同步,再加一条 cluster-B->cluster-A.enabled = true 即可。
- topics: 控制需要同步的 Topic 列表,支持正则表达式,非常灵活。.* 表示同步所有。
- sync.group.offsets.enabled: 是否开启消费组位移同步,如果你的消费者应用需要做容灾切换,这个必须开启。
- sync.topic.acls.enabled: 是否同步 Topic 级 ACL,双活或灾备场景通常需要打开。
- refresh.*.interval.seconds: 控制 Topic / Group / Cluster 配置的刷新频率;当源端动态扩容分区或变更 ACL 时,确保目标端能及时跟进。
- replication.policy.class: 定义远程主题的命名规则,默认就是 源集群名.Topic名 的策略。一般不需要修改。
注:MirrorMaker 使用复制策略来确定远程主题的名称。默认复制策略会将源集群别名作为前缀添加到远程主题中。
MirrorMaker 还有另一种复制策略,可以保留主题名称,它被称为IdentityReplicationPolicy。
要使用它,您需要replication.policy.class在 MirrorMaker 配置中设置该选项org.apache.kafka.connect.mirror.IdentityReplicationPolicy。
- 内部 Topic 的副本数: MM2 会创建一些内部 Topic 来存储心跳和检查点信息。在生产环境中,为了保证 MM2 自身的高可用,这些内部 Topic 的副本数(replication.factor)一定要设置为一个安全的值(比如 3)。
- ByteArrayConverter:若希望消息"按字节"无损复制,请在 Worker 级别设置 key.converter / value.converter 为 org.apache.kafka.connect.converters.ByteArrayConverter。
3.3简单配置示例
# 指定两个集群,以及对应的host
clusters = s,d
s.bootstrap.servers = xxxx:9092
d.bootstrap.servers = yyyy:9092
# 指定同步备份的topic & consumer group,支持正则
s->d.topics = topictest
s->d.groups = .*
# 指定复制链条,可以是双向的
s->d.enabled = true
# us-east->us-west.enabled = true # 双向,符合条件的两个集群的topic会相互备份
3.4任务执行方式
使用 connect-mirror-maker.sh Kafka 发行版中包含的脚本:
./bin/connect-mirror-maker.sh ./config/mirror-maker.properties
4 迁移方案
4.1集群配置
4.1.1记录参数配置
主题配置:确保目标集群中的主题配置(如分区数、副本数、保留策略等)与源集群一致,或根据业务需求进行调整。
Broker 配置:检查每个 broker 的配置参数,确保两者之间的兼容性。
4.1.2数据分布与负载
分区分布:了解源集群中各主题的分区分布情况,以便在目标集群中合理安排分区。
负载评估:分析源集群的负载,确保目标集群有足够的能力来处理迁移后的数据流。
4.1.3安全性和权限
认证与授权:检查源集群和目标集群的安全设置,确保数据迁移过程中涉及的用户和角色具有适当的权限。
4.1.4兼容性和版本
Kafka 版本:确保两个集群的 Kafka 版本兼容,特别是在使用特性时,避免因版本差异引发的问题。
消息格式:验证消息格式和序列化机制在两个集群中的一致性。
4.2创建测试topic
# 根据目标集群与业务需求进行调整目标topic副本与分区数,测试不做要求
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topictest --replication-factor 3

4.3生产消息

bash-5.0$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topictest
>1
>2
>3
>4
>5
>6
>7
>8
>
4.4记录偏移量
记录 Kafka 主题的偏移量信息

4.5执行迁移进程
bash-5.0$ ./bin/connect-mirror-maker.sh mm2.properties

4.6验证数据同步

./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic s.topictest --time -1

与源集群偏移量相同,消费消息正常

确认消息偏移量,保证数据一致性。
[root@bogon /tmp/kraft-data/Bkafka]# /opt/kafkacluster/Akafka/bin/kafka-dump-log.sh --files /tmp/kraft-data/Bkafka/mm2-offsets.s.internal-1/00000000000000000000.log --print-data-log