修改Kafka Topic的分割槽副本數
阿新 • • 發佈:2018-12-12
說明
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: |
準備一些資料,放在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數量等場景下,也可以用來調整各個分割槽在各個節點上的分佈。