15.4. トピックのレプリケーション係数の変更
kafka-reassign-partitions.sh
ツールを使用して、Kafka クラスター内のトピックのレプリケーション係数を変更します。これは、トピックのレプリカを変更する方法を記述する再割り当てファイルを使用して実行できます。
前提条件
- 既存の Kafka クラスター。
操作に含めるトピックを指定するための JSON ファイルを作成している。
この手順では、
my-topic
というトピックに 4 つのレプリカがあり、それを 3 つに減らしたいと考えています。topic.json
という名前の JSON ファイルはトピックを指定し、reassignment.json
ファイルの生成に使用されます。
my-topic
を指定する JSON ファイルの例
{ "version": 1, "topics": [ { "topic": "my-topic"} ] }
手順
まだ行っていない場合は、
kafka-reassign-partitions.sh
ツールを使用してreassignment.json
という名前の再割り当て JSON ファイルを生成します。再割り当て JSON ファイルを生成するコマンドの例
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \ 1 --broker-list 0,1,2,3,4 \ 2 --generate
現在のレプリカ割り当てと提案されたレプリカ割り当てを示す再割り当て JSON ファイルの例
Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}
後で変更を元に戻す必要がある場合に備えて、このファイルのコピーをローカルに保存します。
reassignment.json
を編集して、各パーティションからレプリカを削除します。たとえば、
jq
を使用して、トピックの各パーティションのリスト内の最後のレプリカを削除します。各パーティションの最後のトピックレプリカの削除
jq '.partitions[].replicas |= del(.[-1])' reassignment.json > reassignment.json
更新されたレプリカを示す再割り当てファイルの例
{"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any","any"]}]}
--execute
オプションを使用してトピックレプリカを変更します。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute
注記ブローカーからレプリカを削除する場合、ブローカー間のデータ移動は必要ないため、レプリケーションを調整する必要はありません。レプリカを追加している場合は、スロットルレートを変更することができます。
--verify
オプションを使用して、トピックレプリカへの変更が完了したことを確認します。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
--verify
コマンドによって、移動した各パーティションが正常に完了したことが報告されると、再割り当ては終了します。この最終的な--verify
によって、結果的に再割り当てスロットルも削除されます。--describe
オプションを指定してbin/kafka-topics.sh
コマンドを実行して、トピックへの変更の結果を確認します。/opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --describe
トピックのレプリカ数を削減した結果
my-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 my-topic Partition: 1 Leader: 2 Replicas: 1,2,3 Isr: 1,2,3 my-topic Partition: 2 Leader: 3 Replicas: 2,3,4 Isr: 2,3,4