1. 程式人生 > >修改Kafka Topic的分割槽副本數

修改Kafka Topic的分割槽副本數

說明

Kafka提供了一個工具,用於調整Topic中各個分割槽的複本資料。工具名稱叫 kafka-reassign-partitions.sh 。

過程

建立一個Topic,共2個分割槽,副本數為2(共2份,含原始資料):

1 /opt/kafka/bin/kafka-topics.sh--zookeeperdata01:2181,data02:2181,data03:2181/kafka--create--replication-factor2--partitions2--topictestTopic1

檢視該Topic。分割槽0的Leader是1,分割槽1的Leader是2:

12345 [root@data01bin]#/opt/kafka/bin/kafka-topics.sh--describe--zookeeperdata01:2181,data02:2181,data03:2181/kafka--topictestTopic1Topic:testTopic1PartitionCount:2ReplicationFactor:2Configs:Topic:testTopic1Partition:0Leader:1Replicas:1,2Isr:1,2Topic:testTopic1Partition:
1Leader:2Replicas:2,3Isr:2,3[root@data01bin]#

準備一些資料,放在data.file中,然後將資料灌入Kakfa Topic:

1 /opt/kafka/bin/kafka-console-producer.sh--broker-listdata01:9092,data02:9092,data03:9092--topictestTopic1< data.file

在各broker的資料目錄下,可以看到當前對應的Topic分割槽目錄:

123456 [root@cheyotmp]#dsh-gkafka-c"du -sh /opt/kafka/kafka-logs/testTopic*"data01:44K/opt/kafka/kafka-logs/testTopic1-0data02:44K/opt/kafka/kafka-logs/testTopic1-0data02:4.0K/opt/kafka/kafka-logs/testTopic1-1data03:4.0K/opt/kafka/kafka-logs/testTopic1-1[root@cheyotmp]#

調整副本資料的配置是以json檔案描述的,然後json檔案作為引數傳遞給相關工具。json檔案中描述了各個分割槽的複本如何放置。這裡,我們分別為testTopic1的兩個分割槽在原來的基礎上新增加了第3個分割槽。

replication.json:

1234567891011121314151617181920212223 {"version":1,"partitions":[{"topic":"testTopic1","partition":0,"replicas":[1,2,3]},{"topic":"testTopic1","partition":1,"replicas":[2,3,1]}]}

執行更新複本操作

12 /opt/kafka/bin/kafka-reassign-partitions.sh--zookeeperdata01:2181,data02:2181,data03:2181/kafka\--reassignment-json-filereplication.json--execute

這個操作需要一些時間,我們可以通過如下命令檢視進度(將上述命令中的 execute 引數改為 verify 引數:

12 /opt/kafka/bin/kafka-reassign-partitions.sh--zookeeperdata01:2181,data02:2181,data03:2181/kafka\--reassignment-json-filereplication.json--verify

檢查

操作完成後,再次檢視topic的詳細資訊,可以看到相應的分割槽已經增加:

12345 [root@data01test]#/opt/kafka/bin/kafka-topics.sh--describe--zookeeperdata01:2181,data02:2181,data03:2181/kafka--topictestTopic1Topic:testTopic1PartitionCount:2ReplicationFactor:3Configs:Topic:testTopic1Partition:0Leader:1Replicas:1,2,3Isr:1,2,3Topic:testTopic1Partition:1Leader:2Replicas:2,3,1Isr:2,3,1[root@data01test]#

相應的資料目錄也已經增加:

12345678 [root@cheyotmp]#dsh-gkafka-c"du -sh /opt/kafka/kafka-logs/testTopic*"data01:44K/opt/kafka/kafka-logs/testTopic1-0data01:4.0K/opt/kafka/kafka-logs/testTopic1-1data03:40K/opt/kafka/kafka-logs/testTopic1-0data03:4.0K/opt/kafka/kafka-logs/testTopic1-1data02:44K/opt/kafka/kafka-logs/testTopic1-0data02:4.0K/opt/kafka/kafka-logs/testTopic1-1[root@cheyotmp]#

工具/kafka-reassign-partitions.sh說明

這個工具有三種引數:

1、帶 generate 引數:生成建議的分割槽重分佈方案

2、帶 execute 引數:根據指定的分割槽重分佈方案執行分割槽調整動作

3、帶 verify 引數:檢視 exceute 操作的結果。

本文件中使用了2和3兩個引數。

補充

按這個用法,這個工具不僅可以用來增加分割槽數,在擴容broker數量等場景下,也可以用來調整各個分割槽在各個節點上的分佈。

參考文件