Kafka在Ubuntu上的数据迁移方法及步骤
当需要在同一个Kafka集群内调整分区分布(如Broker扩容、下线或负载均衡)时,可使用kafka-reassign-partitions.sh工具。以下是详细步骤:
创建JSON文件(如topics-to-move.json),指定需要迁移的Topic列表。例如:
{"topics": [{"topic": "your_topic_name"}], "version": 1}
执行以下命令,生成当前分区副本分布和建议的重新分配方案(需替换zookeeper_host:port和broker_list为实际值):
kafka-reassign-partitions.sh --zookeeper zookeeper_host:2181 \
--topics-to-move-json-file topics-to-move.json \
--broker-list "new_broker1,new_broker2,new_broker3" --generate
输出结果包含两部分:Current partition replica assignment(当前副本分布)和Proposed partition reassignment configuration(建议的迁移计划)。
将建议的迁移计划保存为新JSON文件(如reassignment-plan.json),然后执行迁移:
kafka-reassign-partitions.sh --zookeeper zookeeper_host:2181 \
--reassignment-json-file reassignment-plan.json --execute
执行以下命令检查迁移进度,直到所有分区完成迁移:
kafka-reassign-partitions.sh --zookeeper zookeeper_host:2181 \
--reassignment-json-file reassignment-plan.json --verify
也可通过kafka-topics.sh查看Topic的副本分布,确认新Broker是否包含目标分区:
kafka-topics.sh --zookeeper zookeeper_host:2181 --describe --topic your_topic_name
当需要将数据从一个Kafka集群迁移到另一个集群(如升级集群、更换云服务商)时,常用MirrorMaker或MirrorMaker2工具。
MirrorMaker通过消费源集群消息并生产到目标集群实现数据同步。步骤如下:
mirror-maker.properties)# 源集群配置
consumer.bootstrap.servers=source_cluster:9092
# 目标集群配置
producer.bootstrap.servers=target_cluster:9092
# 需要同步的Topic(支持正则,如"topic.*")
whitelist=your_topic_name
# 消费者组ID
group.id=mirror-maker-group
kafka-run-class.sh kafka.tools.MirrorMaker \
--consumer.config mirror-maker.properties \
--producer.config mirror-maker.properties \
--whitelist your_topic_name
MirrorMaker2是Confluent提供的增强版工具,支持双向同步、增量同步和更好的容错性。步骤如下:
从Confluent官网下载MirrorMaker2,解压后修改config/connect-mirror-maker.properties:
# 源集群配置
clusters.source.bootstrap.servers=source_cluster:9092
clusters.target.bootstrap.servers=target_cluster:9092
# 集群别名
clusters.source.cluster.alias=source
clusters.target.cluster.alias=target
# 同步策略(all表示同步所有Topic)
topics=.*
# 同步模式(incremental表示增量同步)
sync.group.offsets.enabled=true
bin/connect-mirror-maker.sh config/connect-mirror-maker.properties
无论选择哪种迁移方式,均需完成以下步骤以确保数据安全:
kafka-dump或kafka-backup工具备份源集群数据(如全量备份到本地目录)。kafka-topics.sh、kafka-consumer-groups.sh工具,或Prometheus+Grafana监控目标集群的吞吐量、延迟、分区Leader分布等指标。通过以上步骤,可在Ubuntu环境下安全、高效地完成Kafka数据迁移。迁移过程中需注意避免业务高峰期操作,并保留足够的回滚空间(如保留源集群数据至迁移完成)。