前言

一个系统随着用户数增加,那么推送到kafka服务器的数据流量会增加。很有可能原有的服务器数量无法支撑更多的流量,接着就需要增加更多的服务来分摊流量。本篇接下来就会介绍,如何操作kafka数据在服务器之间迁移。

方法一:通过增加partition数量

通过增加partition数量的方式来迁移数据的方式是非常简单的,因为新建的partition肯定会均匀的分配到多节点上。首先准备三个kafka broker,创建一个topic,名称为demo1,partition为1,复制数为1,那么这个parition肯定在基本一台broker上。

kafka topic的备份数据 kafka topic迁移_大数据


一个topic使用一台服务器。如果我们想利用三台服务器来分摊原有的一台服务器,就需要先增加topic的partition数量。需要注意的是partition的数量只能增加,不能减少。

kafka-topics.sh --zookeeper localhost:2181 --alter --topic demo1 --partitions 3

kafka topic的备份数据 kafka topic迁移_大数据_02


可以看到kafka帮我们很顺利的,增加了partition数,并平均到了三台broker节点上。

方法二:通过重新分配partition

这次我们只开启一台broker,创建topic分配3个partition和一个复制数。

kafka-topics.sh --zookeeper localhost:2181 --create --topic demo2 --partitions 3 --replication-factor 1

kafka topic的备份数据 kafka topic迁移_kafka_03


可以看到3个partition全部在broker 0上。

kafka topic的备份数据 kafka topic迁移_kafka topic的备份数据_04

生成partition配置文件

这里我们需要先添加一个文件topics.json,里面存放你需要重新分配的partition,注意格式一定要规范

kafka topic的备份数据 kafka topic迁移_kafka topic的备份数据_05


接着输入以下命令,生成partition的配置文件

kafka-reassign-partitions.sh --zookeeper localhost:2181 --generate --broker-list 0,1,2 --topics-to-move-json-file topics.json

kafka topic的备份数据 kafka topic迁移_大数据_06


这里生成的分配方案是kafka建议的,我们可以调整一下broker id 和 partition id,修改成我们需要的方案

重新分配partition

将上面的生成的分配方案保存在reassignment.json文件中,这里我调整了一下broker id和partition id

kafka topic的备份数据 kafka topic迁移_zookeeper_07


执行下面命令后,开始对topic的partition进行重新分配,如果数据量比较大,会很慢。

kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassignment-json-file reassignment.json

kafka topic的备份数据 kafka topic迁移_大数据_08

查看任务状态

检查partition的再分配任务是否完成,如果完成,会显示成功。成功后,查看partition情况。

kafka-reassign-partitions.sh --zookeeper localhost:2181 --verify --reassignment-json-file reassignment.json

kafka topic的备份数据 kafka topic迁移_kafka_09

方法三:通过kafka manager进行分配

kafka manager 是yahoo的一个免费开源软件,它提供了一个web端,帮助我们很方便的查看kafka的基本信息和对kafka的一些基本操作
下载地址:https://github.com/yahoo/kafka-manager/releases 上面提供了release的zip包,我没有验证过不同操作系统和kafka版本的兼容性。如果出现兼容性问题,可以下载源代码,自行编译打包。本人在MacOS操作系统上,是自己通过源代码打包的方式安装的。

启动kafka manager

kafka topic的备份数据 kafka topic迁移_json_10

访问kafka manager页面

kafka topic的备份数据 kafka topic迁移_zookeeper_11

配置kafka参数

kafka topic的备份数据 kafka topic迁移_kafka topic的备份数据_12

查看kafka信息

kafka topic的备份数据 kafka topic迁移_zookeeper_13

点击一个topic,进入详情

kafka topic的备份数据 kafka topic迁移_zookeeper_14


这里我们就可以通过鼠标,很容易的操作topic的partition了。操作很简单,Manual Partition Assignments和Generate Partition Assignment都可以生成partition分配计划配置。然后,通过Reassign partitions来执行分配。

Generate Partition Assignments

kafka topic的备份数据 kafka topic迁移_大数据_15

Manual Partition Assignments

kafka topic的备份数据 kafka topic迁移_kafka topic的备份数据_16

Reassign partitions

点击Reassign partitions按钮,就会执行你刚才配置的partition计划

总结

文章提供了三种迁移kafka数据的方法,使用kafka manager会比较容易,原理其实也就是我们在方法二使用的几个命令,生成和执行分配partition计划。