15.3. ブローカーの削除前のパーティションの再割り当て
Kafka クラスター内のブローカーの数を減らす前に、kafka-reassign-partitions.sh ツールによって生成された再割り当てファイルを使用してパーティションを再割り当てします。再割り当てファイルでは、Kafka クラスターの残りのブローカーにパーティションを再割り当てする方法を記述する必要があります。ファイルで指定された再割り当てをブローカーに適用し、新しいパーティションの割り当てを確認します。最も番号の大きい Pod のブローカーが最初に削除されます。
この手順では、TLS を使用するセキュアなスケーリングプロセスを説明します。TLS 暗号化と mTLS 認証を使用する Kafka クラスターが必要です。
kafka-reassign-partitions.sh ツールを使用することもできますが、パーティション再割り当てとクラスターの再バランシングを自動化 するには、Cruise Control の使用を推奨します。Cruise Control は、ダウンタイムなしでトピックをあるブローカーから別のブローカーに移動でき、パーティションを再割り当てする最も効率的な方法です。
前提条件
- 既存の Kafka クラスター。
縮小されたクラスター内のブローカーにパーティションを再割り当てする方法を指定する JSON ファイルを作成している。
この手順では、
my-topicというトピックのすべてのパーティションを再割り当てします。topic.jsonという名前の JSON ファイルはトピックを指定し、reassignment.jsonファイルの生成に使用されます。
my-topic を指定する JSON ファイルの例
手順
まだ行っていない場合は、
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 \ --broker-list 0,1,2,3 \ --generate
/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 \2 --generateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在のレプリカ割り当てと提案されたレプリカ割り当てを示す再割り当て 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],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}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],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 後で変更を元に戻す必要がある場合に備えて、このファイルのコピーをローカルに保存します。
--executeオプションを使用してパーティションの再割り当てを実行します。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow レプリケーションをスロットルで調整する場合、
--throttleとブローカー間のスロットル率 (バイト/秒単位) を渡すこともできます。以下に例を示します。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --execute
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --executeCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verifyオプションを使用して、再割り当てが完了したことを確認します。/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow --verifyコマンドによって、移動した各パーティションが正常に完了したことが報告されると、再割り当ては終了します。この最終的な--verifyによって、結果的に再割り当てスロットルも削除されます。削除する各ブローカーに、ログ (
log.dirs) にライブパーティションがないことを確認します。ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'
ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログディレクトリーが正規表現 (
\.[a-z0-9]-delete$) と一致しない場合は、アクティブなパーティションが存在します。アクティブなパーティションがある場合は、再割り当てが完了したどうか、あるいは、再割り当て JSON ファイルの設定を確認します。再割り当てはもう一度実行できます。次のステップに進む前に、アクティブなパーティションが存在しないことを確認します。ブローカーを停止します。
su - kafka /opt/kafka/bin/kafka-server-stop.sh
su - kafka /opt/kafka/bin/kafka-server-stop.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka ブローカーが停止していることを確認します。
jcmd | grep kafka
jcmd | grep kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow