20.4. ブローカーの削除前のパーティションの再割り当て


Kafka クラスター内のブローカーの数を減らす前に、kafka-reassign-partitions.sh ツールによって生成された再割り当てファイルを使用してパーティションを再割り当てします。再割り当てファイルでは、Kafka クラスターの残りのブローカーにパーティションを再割り当てする方法を記述する必要があります。ファイルで指定された再割り当てをブローカーに適用し、新しいパーティションの割り当てを確認します。最も番号の大きい Pod のブローカーが最初に削除されます。

この手順では、TLS を使用するセキュアなスケーリングプロセスについて説明します。TLS 暗号化と mTLS 認証を使用する Kafka クラスターが必要です。

kafka-reassign-partitions.sh ツールは、クラスターを通じてすべてのノードを管理しているか、クラスター内のノードグループを管理するためにノードプールを使用しているかに関係なく、Kafka クラスター内のパーティションを再割り当てするために使用できます。

注記

kafka-reassign-partitions.sh ツールを使用することもできますが、パーティション再割り当てとクラスターの再バランシングを自動化 するには、Cruise Control の使用を推奨します。Cruise Control は、ダウンタイムなしでトピックをあるブローカーから別のブローカーに移動でき、パーティションを再割り当てする最も効率的な方法です。

前提条件

  • 内部 TLS 暗号化と mTLS 認証で設定された Kafka リソースに基づいて実行中の Kafka クラスターがあります。
  • reassignment.json という名前の 再割り当て JSON ファイルを生成 している。
  • 実行中の Kafka ブローカーに接続されている対話型 Pod コンテナーを実行している。
  • KafkaUserとして接続されている。このユーザーは、Kafka クラスターとそのトピックの管理権限を指定する ACL ルールで設定されている。

手順

  1. まだ確認していない場合には、インタラクティブな Pod コンテナーを実行 して reassignment.json という名前の再割り当てJSONファイルを生成します。
  2. reassignment.json ファイルを対話型 Pod コンテナーにコピーします。

    oc cp reassignment.json <interactive_pod_name>:/tmp/reassignment.json

    <interactive_pod_name> は Pod の名前に置き換えます。

  3. インタラクティブな Pod コンテナーでシェルプロセスを開始します。

    oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash

    <namespace> を Pod が実行されている OpenShift namespace に置き換えます。

  4. インタラクティブな Pod コンテナーから kafka-reassign-partitions.sh スクリプトを使用して、パーティション再割り当てを実行します。

    bin/kafka-reassign-partitions.sh --bootstrap-server
     <cluster_name>-kafka-bootstrap:9093 \
     --command-config /tmp/config.properties \
     --reassignment-json-file /tmp/reassignment.json \
     --execute

    <cluster_name> は、独自の Kafka クラスターの名前に置き換えます。例: my-cluster-kafka-bootstrap:9093

    レプリケーションにスロットリングを適用する場合、--throttle とブローカー間のスロットル率 (バイト/秒単位) を渡すこともできます。以下に例を示します。

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --throttle 5000000 \
      --execute

    このコマンドは、2 つの再割り当て JSON オブジェクトを出力します。最初の JSON オブジェクトには、移動されたパーティションの現在の割り当てが記録されます。後で再割り当てを元に戻す必要がある場合に備え、この値をローカルファイル (Pod のファイル以外) に保存します。2 つ目の JSON オブジェクトは、再割り当て JSON ファイルに渡したターゲットの再割り当てです。

    再割り当ての最中にスロットルを変更する必要がある場合は、同じコマンドに別のスロットル率を指定して実行します。以下に例を示します。

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --throttle 10000000 \
      --execute
  5. ブローカー Pod のいずれかから kafka-reassign-partitions.sh コマンドラインツールを使用して、再割り当てが完了したかどうかを確認します。これは先ほどの手順と同じコマンドですが、--verify オプションの代わりに --execute オプションを使用します。

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --verify

    --verify コマンドによって、移動した各パーティションが正常に完了したことが報告されると、再割り当ては終了します。この最終的な --verify によって、結果的に再割り当てスロットルも削除されます。

  6. 割り当てを元のブローカーに戻すために JSON ファイルを保存した場合は、ここでそのファイルを削除できます。
  7. すべてのパーティション再割り当てが終了すると、削除されるブローカーはクラスター内のいずれのパーティションにも対応しないはずです。これは、ブローカーのデータログディレクトリーにライブパーティションのログが含まれていないことを確認すると検証できます。ブローカのログディレクトリーに、拡張正規表現 \.[a-z0-9]-delete$ に一致しないディレクトリーが含まれている場合、ブローカには、まだライブパーティションがあるため、停止しないでください。

    これを確認するには、以下のコマンドを実行します。

    oc exec my-cluster-kafka-0 -c kafka -it -- \
      /bin/bash -c \
      "ls -l /var/lib/kafka/kafka-log_<n>_ | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'"

    n は削除された Pod の数に置き換えます。

    上記のコマンドによって出力が生成される場合、ブローカーにはライブパーティションがあります。この場合、再割り当てが終了していないか、再割り当て JSON ファイルが適切ではありません。

  8. ブローカーにライブパーティションがないことを確認できたら、Kafka リソースの Kafka.spec.kafka.replicas プロパティーを編集してブローカーの数を減らすことができます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.