1. 程式人生 > >修改Kafka topic的replication-factor

修改Kafka topic的replication-factor

叢集資訊

kafka叢集有三臺broker,id分別為:0,1,2

檢視topic的replication-factor資訊:

[root@ali-37 bin]# ./kafka-topics.sh --zookeeper localhost:2182 --describe --topic connect-configs
Topic:connect-configs   PartitionCount:1    ReplicationFactor:1 Configs:cleanup.policy=compact
    Topic: connect-configs  Partition
: 0 Leader: 2 Replicas: 2 Isr: 2 [root@ali-37 bin]#

可以看到ReplicationFactor為1,並且Leader、Replicas、Isr都在broker id=2的機器上。

編輯修改資訊json檔案

[root@ali-37 kafka_2.11-2.0.0]# cat increase-replication-factor.json 
{"version":1,
"partitions":[{"topic":"connect-configs","partition":0,"replicas":[0,1,2]}]
}
[root@ali
-37 kafka_2.11-2.0.0]#

由於connect-configs這個topic只有一個partition,檔案中指定了其partition 0的replicas在broker id = 0,1,2這三臺broker上。如果有多個partition,可以在partitions後面放一個數組,針對每一個partition進行修改副本數。

執行修改命令

[[email protected]37 kafka_2.11-2.0.0]# bin/kafka-reassign-partitions.sh --zookeeper localhost:2182 --reassignment-json-file increase-replication-factor.json --execute
Current partition replica assignment {"version":1,"partitions":[{"topic":"connect-configs","partition":0,"replicas":[2],"log_dirs":["any"]}]} Save this to use as the --reassignment-json-file option during rollback Successfully started reassignment of partitions. [[email protected]37 kafka_2.11-2.0.0]#

看到控制檯輸出成功開始partitions的再分配,但是分配結果如何,需要用下面的命令驗證一下。

驗證修改是否成功

[root@ali-37 kafka_2.11-2.0.0]# bin/kafka-reassign-partitions.sh --zookeeper localhost:2182 --reassignment-json-file increase-replication-factor.json --verify
Status of partition reassignment: 
Reassignment of partition connect-configs-0 completed successfully
[root@ali-37 kafka_2.11-2.0.0]# 

注意這兒驗證的json檔案和上一步的是同一個檔案,只是換成了--verify選項。可以看到再分配的狀態是成功的。

再檢視topic資訊

[root@ali-37 kafka_2.11-2.0.0]# bin/kafka-topics.sh --zookeeper localhost:2182 --topic connect-configs --describe
Topic:connect-configs   PartitionCount:1    ReplicationFactor:3 Configs:cleanup.policy=compact
    Topic: connect-configs  Partition: 0    Leader: 2   Replicas: 0,1,2 Isr: 2,0,1
[root@ali-37 kafka_2.11-2.0.0]# 

可以看到ReplicationFactor已經變成了3,Leader在broker id = 2的機器上,副本和同步副本都在broker id = 0,1,2這三臺機器上。整個修改過程完成。

參考Kafka官方網站:http://kafka.apache.org/documentation/#basic_ops_increase_replication_factor