主页

索引

模块索引

搜索页面

kafka-reassign-partitions.sh

场景:

将一些topic上的分区从当前所在broker移到其他比如新增的broker上。
假设有个名为ORDER-DETAIL的topic,在broker.id为2的broker上:
Topic:ORDER-DETAIL  PartitionCount:1    ReplicationFactor:1 Configs:
Topic: ORDER-DETAIL Partition: 0    Leader: 2   Replicas: 2 Isr: 2

现在想要把它移动到broker.id为1的broker上,执行脚本:

bin/kafka-reassign-partitions.sh \
    --zookeeper 10.0.55.208:2181/wallet,10.0.55.209:2181/wallet,10.0.55.210:2181/wallet \
    --topics-to-move-json-file move.json --broker-list "1" --generate

–generate参数表示生成一个分区再分配配置,并不会真正的执行,命令执行结果如下:

Current partition replica assignment
{"version":1,"partitions":[{"topic":"ORDER-DETAIL","partition":0,"replicas":[2],"log_dirs":["any"]}]}

Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"ORDER-DETAIL","partition":0,"replicas":[1],"log_dirs":["any"]}]}

我们只需要把第二段json内容保存到一个新建的final.json文件中(如果知道如何编写这段json内容,那么也可以不执行第一条命令),然后执行命令:

bin/kafka-reassign-partitions.sh \
--zookeeper 10.0.55.208:2181/wallet,10.0.55.209:2181/wallet,10.0.55.210:2181/wallet \
--reassignment-json-file move_final.json --execute

注: 此次执行的命令带有--execute参数,说明是真正的执行分区重分配。

通过这个命令还可以给某个topic增加副本,例如有一个名为ORDER-DETAIL的topic,有3个分区,但是只有1个副本,为了高可用,需要将副本数增加到2,那么编写replica.json文本内容如下:

{
    "version": 1,
    "partitions": [{
        "topic": "ORDER-DETAIL",
        "partition": 0,
        "replicas": [1, 2]
    },
    {
        "topic": "ORDER-DETAIL",
        "partition": 1,
        "replicas": [0, 2]
    },
    {
        "topic": "ORDER-DETAIL",
        "partition": 2,
        "replicas": [1, 0]
    }]
}

然后执行命令即可:

bin/kafka-reassign-partitions.sh \
    --zookeeper 10.0.55.208:2181/wallet,10.0.55.209:2181/wallet,10.0.55.210:2181/wallet \
    --reassignment-json-file replica.json

主页

索引

模块索引

搜索页面