Kafka集群数据迁移方案:基于MirrorMaker2的集群迁移实施步骤

#作者:张桐瑞

文章目录

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重点参数说明

  1. clusters: 这是给你的 Kafka 集群起个别名,方便在后续配置中引用。
  2. source->target.enabled: 这是一个方向性的配置,cluster-A->cluster-B.enabled = true 表示启用从 A 到 B 的数据同步。如果想实现双向同步,再加一条 cluster-B->cluster-A.enabled = true 即可。
  3. topics: 控制需要同步的 Topic 列表,支持正则表达式,非常灵活。.* 表示同步所有。
  4. sync.group.offsets.enabled: 是否开启消费组位移同步,如果你的消费者应用需要做容灾切换,这个必须开启。
  5. sync.topic.acls.enabled: 是否同步 Topic 级 ACL,双活或灾备场景通常需要打开。
  6. refresh.*.interval.seconds: 控制 Topic / Group / Cluster 配置的刷新频率;当源端动态扩容分区或变更 ACL 时,确保目标端能及时跟进。
  7. replication.policy.class: 定义远程主题的命名规则,默认就是 源集群名.Topic名 的策略。一般不需要修改。

注:MirrorMaker 使用复制策略来确定远程主题的名称。默认复制策略会将源集群别名作为前缀添加到远程主题中。

MirrorMaker 还有另一种复制策略,可以保留主题名称,它被称为IdentityReplicationPolicy。

要使用它,您需要replication.policy.class在 MirrorMaker 配置中设置该选项org.apache.kafka.connect.mirror.IdentityReplicationPolicy。

  1. 内部 Topic 的副本数: MM2 会创建一些内部 Topic 来存储心跳和检查点信息。在生产环境中,为了保证 MM2 自身的高可用,这些内部 Topic 的副本数(replication.factor)一定要设置为一个安全的值(比如 3)。
  2. 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
相关推荐
yatum_20143 小时前
Hadoop 三种核心运行模式(伪分布式/分布式/混合模式)全总结
hadoop·分布式·wpf
小巫程序Demo日记3 小时前
什么是Kafka?
分布式·kafka
luckyzlb4 小时前
02-kafka(01润色版)
java·中间件·kafka
番茄去哪了5 小时前
黑马点评实战篇千字总结
java·分布式·面向对象编程
zzz84155 小时前
集成RabbitMQ+MQ常用操作
分布式·rabbitmq
ErizJ6 小时前
面试 | Kafka
面试·kafka
龙门吹雪6 小时前
消息队列RabbitMQ的配置操作及使用
分布式·rabbitmq
future02106 小时前
Kafka分区策略:高频问题全解析
分布式·kafka
Mr.朱鹏6 小时前
分布式-redis集群架构
java·redis·分布式·后端·spring·缓存·架构