kafka broker迁移

原来有一个5台的kafka集群,现在需要用一台新的服务器替换原先的一台broker,所以需要将这个broker上所有partition的数据都迁移过去。

我的kafka是0.8.2.1的版本,其本身提供了一个kafka-reassign-partitions.sh工具帮助完成这个工作。


首先,需要在新的机器上启动kafka进程。然后,需要到老的broker上查看其本身包含哪些topic的partition数据。当然,你可以写个程序到zookeeper上遍历所有topic的partition分布情况,然后找出需要下线机器相关的信息。我比较懒,手动登录到老broker上,进入kafka-logs目录,就会看到很多类似与

topic1-0
topic2-1
topic2-4
这样的子目录。topic1,topic2是topic名称,-后面的就是partition编号。


知道了老broker上有哪些数据就可以编写迁移文件了。

reassignment.json

{
    "version": 1,
    "partitions": [
        {
            "topic": "topic1",
            "partition": 0,
            "replicas": [
                6
            ]
        },
        {
            "topic": "topic2",
            "partition": 1,
            "replicas": [
                6
            ]
        },
        {
            "topic": "topic2",
            "partition": 4,
            "replicas": [
                6
            ]
        }
    ]
}
文件里分别写上老机器上包含的topic和对应的partition,replicas就是新机器的地址。


随后,在老机器上运行

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

你就会看到,老机器上kafka-logs下的子目录一个一个消失了。消失的目录就是已经迁移完成的topic-partition


最后,可以通过

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

查看reassign的进度,是否全部完成了。等数据全部迁走了,就可以下线老broker机器了。



你可能感兴趣的:(kafka)