第21章 Cruise Control を使用したクラスターのリバランス


Cruise Control は、Kafka と並行して実行するように設計されたオープンソースアプリケーションであり、次の操作を実行してクラスターリソースの使用を最適化します。

  • クラスターワークロードのモニタリング
  • 事前定義された制約に基づいたパーティションのリバランス

Cruise Control 操作は、ブローカーをより効率的に使用する、よりバランスの取れた Kafka クラスターの実行に役立ちます。

Kafka クラスターが進化するにつれて、一部のブローカーが過負荷になり、他のブローカーは十分に活用されない可能性があります。Cruise Control は、CPU、ディスク、ネットワーク負荷などのレプリカレベルでのリソース使用率をモデル化し、設定可能な最適化ゴールに基づいてバランスの取れたパーティション割り当ての最適化プロポーザル (承認または拒否可能) を生成することで、この不均衡に対処します。

最適化プロポーザルは、KafkaRebalance リソースを使用して設定および生成されます。最適化プロポーザルが自動または手動で承認されるように、アノテーションを使用してリソースを設定できます。

注記

Streams for Apache Kafka には、Cruise Control のサンプル設定ファイル があります。

21.1. Cruise Control のコンポーネントと機能

Cruise Control は 4 つの主要コンポーネントで構成されています。

負荷モニター
ロードモニターはメトリクスを収集し、クラスターのワークロードデータを分析します。
アナライザー
アナライザーは、収集されたデータと設定されたゴールに基づいて最適化のプロポーザルを生成します。
Anomaly Detector
Anomaly Detector は、クラスターの動作における異常を識別して報告します。
エグゼキューター (Executor)
エグゼキューターは、承認された最適化プロポーザルをクラスターに適用します。
REST API

Cruise Control はクライアントとのやり取りのための REST API を提供しており、Streams for Apache Kafka はこれを使用して次の機能をサポートします。

  • 最適化ゴールからの最適化プロポーザルの生成
  • 最適化プロポーザルに基づいた Kafka クラスターのリバランス
  • トピックレプリケーション係数の変更
  • JBOD ディスク間のパーティションの再割り当て
注記

Cruise Control 自己修復はサポートされていません。通知およびカスタムの目標は、カスタマイズで追加できます。たとえば、Streams for Apache Kafka のイメージに基づいてカスタムイメージに適切な JAR ファイルを含めることで、異常通知機能またはカスタムゴールを追加できます。

21.1.1. 最適化ゴール

最適化ゴールは、トピックのレプリカをブローカー間で均等に分散するなど、リバランス調整の目的を定義します。

それらは次のように分類されます。

  • サポートされているゴール は、Cruise Control インスタンスによってサポートされ、その操作で使用できるゴールのリストです。デフォルトでは、このリストには Cruise Control に含まれるすべてのゴールが含まれます。ゴールをデフォルトゴールやハードゴールなどの他のカテゴリーで使用するには、最初にサポートされているゴールにリストされている必要があります。ゴールの使用を防ぐには、このリストからゴールを削除します。
  • ハードゴール が事前に設定されており、プロポーザルが成功するにはそのゴールを満たす必要があります。
  • ソフトゴール は、すべてのハードゴールが満たされた場合でもプロポーザルの作成を妨げることなく、最適化中に可能な限り優先される目的を持つ事前設定されたゴールです。
  • デフォルトゴール は、プロポーザルを生成するときにデフォルトで使用されるゴールを指します。ユーザーが特に設定しない限り、サポートされているゴールと一致します。
  • プロポーザル固有のゴール は、特定のプロポーザル用に設定されたサポートされているゴールのサブセットです。

Kafka および KafkaRebalance カスタムリソースで最適化ゴールを設定します。

  • サポートされている、デフォルトのハードゴールのための Kafka リソース。

    • サポートされているゴール: Kafka.spec.cruiseControl.config.goals
    • ハードゴール: Kafka.spec.cruiseControl.config.hard.goals
    • デフォルトゴール: Kafka.spec.cruiseControl.config.default.goals
  • プロポーザル固有ゴールのための KafkaRebalance リソース。

    • プロポーザル固有ゴール: KafkaRebalance.spec.goals

21.1.1.1. サポートされているゴール

サポートされているゴールは事前に定義されており、Cruise Control 最適化プロポーザルの生成に使用できます。サポートされているゴールとしてリストされていないゴールは、Cruise Control 操作では使用できません。サポートされているゴールの一部は、ハードゴールとして事前設定されています。

Kafka.spec.cruiseControl.config.goals でサポートされているゴールを設定します。

  • 継承したサポートされているゴールを受け入れるには、goals プロパティーを省略します。
  • サポートされているゴールを変更するには、goals プロパティーで目標を優先順位の降順で指定します。

21.1.1.2. ハードゴールとソフトゴール

最適化プロポーザルを生成するには、ハードゴールを満たす必要があります。ソフトゴールは、すべてのハードゴールが満たされた後に Cruise Control が達成しようとするベストエフォートゴールです。ハードゴールとソフトゴールの分類は、Cruise Control コードで固定されており、変更できません。

Cruise Control は、まずハードゴールの達成を優先し、次にリストされている順序に従ってソフトゴールに取り組みます。すべてのハードゴールを満たすプロポーザルは、たとえソフトゴールの一部に違反していたとしても有効です。

たとえば、ソフトゴールとしては、トピックのレプリカを均等に分散することが考えられます。Cruise Control は、ソフトゴールが完全に満たされていない場合でも、最適化プロポーザルを生成し続けます。

Kafka.spec.cruiseControl.config.hard.goals を使用して、Cruise Control デプロイメントでハードゴールを設定します。

  • すべてのハードゴールを強制するには、hard.goals プロパティーを省略します。
  • ハードゴールを指定するには、hard.goals にリストします。
  • ハードゴールを除外するには、そのゴールが default.goals または hard.goals のどちらにも含まれていないことを確認します。

ハードゴールの数を増やすと、Cruise Control が最適化プロポーザルを生成する可能性が低くなります。

21.1.1.3. デフォルトゴール

Cruise Control はデフォルトゴールを使用して最適化プロポーザルを生成します。

Cruise Control デプロイメント設定で default.goals が指定されていない場合、Streams for Apache Kafka は、goals で指定されたサポートされているゴールのリストに default.goals を設定します。

このサポートされているゴールリストに基づく最適化プロポーザルがその後生成され、キャッシュされます。

Kafka.spec.cruiseControl.config.default.goals でデフォルトゴールを設定します。

  • サポートされているゴールをデフォルトとして使用するには、default.goals プロパティーを省略します。
  • デフォルトゴールを変更するには、default.goals プロパティーでサポートされているゴールのサブセットを指定します。
    デフォルトゴールの設定で優先順位を調整できます。

21.1.1.4. プロポーザル固有のゴール

プロポーザル固有の最適化ゴールは、特定のゴールリストに基づいた最適化プロポーザルの作成をサポートします。KafkaRebalance リソースにプロポーザル固有ゴールが設定されていない場合は、デフォルトゴールが使用されます。

KafkaRebalance.spec.goals でプロポーザル固有ゴールを設定し、サポートされている最適化ゴールのサブセットをカスタマイズ用に指定します。

たとえば、単一のプロポーザル固有のゴールを定義することで、ディスク容量や使用率を考慮せずに、Kafka クラスター全体でトピックリーダーレプリカの分散を最適化できます。

21.1.1.5. 優先度によるゴールの順序

Cruise Control の デプロイメント設定 を変更しない限り、Streams for Apache Kafka は Cruise Control からゴールを優先度の降順で継承します。

次のリストは、Streams for Apache Kafka が Cruise Control から継承したサポートされているゴールを、優先順位の降順で示しています。ハードとラベル付けされたゴールは、最適化プロポーザルのために満たす必要がある必須の制約です。

  • RackAwareGoal (ハード)
  • MinTopicLeadersPerBrokerGoal (ハード)
  • ReplicaCapacityGoal (ハード)
  • DiskCapacityGoal (ハード)
  • NetworkInboundCapacityGoal (ハード)
  • NetworkOutboundCapacityGoal (ハード)
  • CpuCapacityGoal (ハード)
  • ReplicaDistributionGoal
  • PotentialNwOutGoal
  • DiskUsageDistributionGoal
  • NetworkInboundUsageDistributionGoal
  • NetworkOutboundUsageDistributionGoal
  • CpuUsageDistributionGoal
  • TopicReplicaDistributionGoal
  • LeaderReplicaDistributionGoal
  • LeaderBytesInDistributionGoal
  • PreferredLeaderElectionGoal
  • IntraBrokerDiskCapacityGoal (ハード)
  • IntraBrokerDiskUsageDistributionGoal

リソース配分ゴールは、ブローカーリソースの 容量制限 の影響を受けます。

各最適化ゴールの詳細は、Cruise Control Wiki の Goals を参照してください。

デフォルトゴールとハードゴールの Kafka 設定例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  annotations:
    strimzi.io/node-pools: enabled
    strimzi.io/kraft: enabled
spec:
  kafka:
    # ...
  entityOperator:
    topicOperator: {}
    userOperator: {}
  cruiseControl:
    brokerCapacity:
      inboundNetwork: 10000KB/s
      outboundNetwork: 10000KB/s
    config:
      #`default.goals` (superset) must also include all `hard.goals` (subset)
      default.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskCapacityGoal
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
      hard.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
      # ...

重要

最適化プロポーザルを生成するときにエラーを回避するために、サポートされている goalsdefault.goals、および (skipHardGoalChecktrue に設定されていない場合は) プロポーザル固有の spec.goals に、hard.goals で指定されたすべてのハードゴールが含まれていることを確認します。ハードゴールは、サポートされているゴール、デフォルトのゴール、およびプロポーザル固有のゴールのサブセットとして含める必要があります。

プロポーザル固有ゴールの KafkaRebalance 設定例

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaRebalance
metadata:
  name: my-rebalance
  labels:
    strimzi.io/cluster: my-cluster
spec:
  goals:
    - RackAwareGoal
    - TopicReplicaDistributionGoal
  skipHardGoalCheck: true

21.1.1.6. ハードゴールチェックをスキップする

KafkaRebalance カスタムリソースで skipHardGoalCheck: true が指定されている場合、Cruise Control は、プロポーザル固有ゴールに設定されたすべてのハードゴールが含まれているか確認しません。これにより、最適化プロポーザルを生成する際の柔軟性が向上しますが、すべてのハードゴールを満たさないプロポーザルにつながる可能性があります。

ただし、skipHardGoalCheck: true の場合でも、プロポーザル固有ゴールに含まれるハードゴールは、Cruise Control にハードゴールとして扱われます。

21.1.2. 最適化プロポーザル

最適化プロポーザルは、定義された最適化ゴールに基づいてプロポーザルされた変更の概要であり、特定の優先順位で評価されます。プロポーザルを承認または拒否し、必要に応じてゴールを調整して再実行できます。

Streams for Apache Kafka で使用するために Cruise Control がデプロイされている場合、最適化プロポーザルを生成して承認するプロセスは次のようになります。

  1. 最適化ゴールと特定の設定を指定して、KafkaRebalance リソースを作成します。このリソースは、Cruise Control をトリガーして最適化プロポーザル生成プロセスを開始します。
  2. Cruise Control Metrics Reporter はすべての Kafka ブローカーで実行され、生のメトリクスを収集して専用の Kafka トピック (strimzi.cruisecontrol.metrics) に公開します。ブローカー、トピック、パーティションのメトリクスは集計され、サンプリングされ、Cruise Control がデプロイされたときに自動的に作成される他のトピック に保存されます。
  3. Load Monitor は、CPU、ディスク、ネットワーク使用率データなどのメトリクスを ワークロードモデル として収集、処理、保存します。このメトリクスは Analyzer と Anomaly Detector によって使用されます。
  4. Anomaly Detector は、Kafka クラスターの健全性とパフォーマンスを継続的に監視し、クラスターの安定性に影響を与える可能性のあるブローカーの障害やディスク容量の問題などをチェックします。
  5. Analyzer は、Load Monitor からのワークロードモデルに基づいて最適化プロポーザルを作成します。設定されたゴールと容量に基づいて、ブローカー間でパーティションのバランスを取るための最適化プロポーザルを生成します。REST API を通じて、プロポーザルのサマリーが KafkaRebalance リソースのステータスに反映されます。
  6. 最適化プロポーザルは、クラスター管理ゴールとの整合性に基づき、手動または自動で承認または拒否されます。
  7. 承認されると、エグゼキューターは最適化プロポーザルを適用して Kafka クラスターのリバランスを実行します。これには、承認されたプロポーザルに従ってパーティションを再割り当てし、ブローカー間でワークロードを再分配することが含まれます。

図21.1 Cruise Control の最適化プロセス

Cruise Control プロセス

最適化プロポーザルは、パーティション再割り当てマッピングのリストで構成されます。プロポーザルを承認すると、Cruise Control サーバーはこれらのパーティションの再割り当てを Kafka クラスターに適用します。

パーティションの再割り当ては、次のいずれかの操作で構成されます。

  • パーティションの移動: パーティションレプリカとそのデータを新しい場所に転送します。パーティションの移動は、以下の 2 つの形式のいずれかになります。

    • ブローカー間の移動: パーティションレプリカを、別のブローカーのログディレクトリーに移動します。
    • ブローカー内の移動: パーティションレプリカを、同じブローカーの異なるログディレクトリーに移動します。
  • リーダーシップの移動: パーティションのレプリカのリーダーを切り替えます。

Cruise Control は、パーティションの再割り当てを Kafka クラスターに一括で発行します。リバランス調整中のクラスターのパフォーマンスは、各バッチに含まれる各タイプの移動の数と大きさの影響を受けます。

21.1.2.1. リバランスモード

リバランスのプロポーザルは 4 つのモードで生成できます。モードは、KafkaRebalance カスタムリソースの spec.mode プロパティーを使用して指定されます。

full モード
full モードでは、クラスター内のすべてのブローカー間でレプリカを移動することにより、完全なリバランスが実行されます。これは、KafkaRebalance カスタムリソースで spec.mode プロパティーが定義されていない場合のデフォルトモードです。
add-brokers モード
add-brokers モードは、1 つ以上のブローカーを追加して Kafka クラスターをスケールアップした後に使用されます。通常、Kafka クラスターをスケールアップした後、新しいブローカーは、新しく作成されたトピックのパーティションのみをホストするために使用されます。新しいトピックが作成されないと、新たに追加されたブローカーは使用されず、既存のブローカーは同じ負荷のままになります。クラスターにブローカーを追加した直後に add-brokers モードを使用すると、リバランス操作によってレプリカが既存のブローカーから新しく追加されたブローカーに移動します。KafkaRebalance カスタムリソースの spec.brokers プロパティーを使用して、新しいブローカーをリストとして指定します。
remove-brokers モード
remove-brokers モードは、1 つ以上のブローカーを削除して Kafka クラスターをスケールダウンする前に使用されます。remove-brokers モードでは、削除されるブローカーからレプリカを移動します。これらのブローカーがレプリカをホストしなくなった場合は、スケールダウン操作を安全に実行できます。KafkaRebalance カスタムリソースの spec.brokers プロパティーで、削除するブローカーをリストとして指定します。
remove-disks モード
remove-disks モードでは、特に同じブローカー上のストレージに使用される JBOD ディスク間でパーティションを再度割り当てるために使用されます。パーティションを再度割り当てる場合は、対応するボリューム ID を持つブローカー ID のリストを指定します。
注記

スケールダウン操作でチェックがスキップされる と、ブローカーはレプリカをホストしている場合でもシャットダウンされます。

一般に、full リバランスモードを使用して、ブローカー間で負荷を分散することにより Kafka クラスターをリバランスします。add-brokers および remove-brokers モードは、クラスターをスケールアップまたはスケールダウンし、それに応じてレプリカを再調整する場合にのみ使用してください。

リバランスを実行する手順は、実際には 3 つの異なるモードで同じです。唯一の違いは、spec.mode プロパティーを介してモードを指定することと、必要に応じて、spec.brokers プロパティーを介して追加または削除されるブローカーを一覧表示することです。

21.1.2.2. 最適化プロポーザルの結果

最適化プロポーザルが生成されると、サマリーとブローカーの負荷が返されます。

サマリー
サマリーは KafkaRebalance リソースに含まれています。サマリーは、提案されたクラスターリバランスのサマリーを提供し、関係する変更の規模を示します。正常に生成された最適化プロポーザルのサマリーは、KafkaRebalance リソースの Status.optimizationResult プロパティーに含まれています。提供される情報は完全な最適化プロポーザルのサマリーになります。
ブローカーの負荷
ブローカーの負荷は、データが JSON 文字列として含まれる ConfigMap に保存されます。ブローカーの負荷は提案されたリバランスの前と後の値を表示するため、クラスターの各ブローカーへの影響を確認できます。

21.1.2.3. 最適化プロポーザルの手動承認または拒否

最適化プロポーザルのサマリーは、提案された変更の範囲を示しています。

KafkaRebalance リソースの名前を使用して、コマンドラインからサマリーを返すことができます。

最適化プロポーザルのサマリーを返す方法

oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>

jq コマンドライン JSON パーサーツール を使用することもできます。

jq を使用して最適化プロポーザルの結果を返す

oc get kafkarebalance <kafka_rebalance_resource_name> -n <namespace> -o json | jq '.status.optimizationResult'

サマリーを使用して、最適化プロポーザルを承認するか拒否するかを決定します。

最適化プロポーザルの承認
最適化プロポーザルを承認する には、KafkaRebalance リソースの strimzi.io/rebalance アノテーションを approve するように設定します。Cruise Control は、プロポーザルを Kafka クラスターに適用し、クラスターのリバランス操作を開始します。
最適化プロポーザルの拒否
最適化プロポーザルを承認しないことを選択した場合は、最適化ゴールの変更 または 任意のリバランスパフォーマンスチューニングオプションの更新 を行い、その後で別のプロポーザルを生成できます。strimzi.io/rebalance アノテーションを refresh に設定することで、KafkaRebalance リソースの新しい最適化プロポーザルを生成できます。

最適化プロポーザルを使用して、リバランスに必要な動作を評価します。たとえば、サマリーではブローカー間およびブローカー内の動きを記述します。ブローカー間のリバランスは、別々のブローカー間でデータを移動します。JBOD ストレージ設定を使用していると、ブローカー内のリバランスでは同じブローカー上のディスク間でデータが移動します。このような情報は、プロポーザルを承認しない場合でも有用な場合があります。

リバランスの際には Kafka クラスターに追加の負荷がかかるため、最適化プロポーザルを却下したり、承認を遅らせたりする場合があります。プロポーザルが長期間遅れると、クラスターの負荷が大幅に変化する可能性があるため、新しいプロポーザルをリクエストしたほうがよい場合があります。

次の例では、プロポーザルは別々のブローカー間のデータのリバランスを提案しています。リバランスには、ブローカー間での 55 個のパーティションレプリカ (合計 12 MB のデータ) の移動が含まれます。このプロポーザルでは、24 のパーティションリーダーも別のブローカーに移動します。これにはクラスターメタデータの変更が必要ですが、パフォーマンスへの影響はわずかです。

バランススコアは、最適化プロポーザルが承認される前後の Kafka クラスターの全体的なバランスの測定値です。バランススコアは、最適化ゴールに基づいています。すべてのゴールが満たされていると、スコアは 100 になります。達成されないゴールごとにスコアが減少します。バランススコアを比較して、Kafka クラスターのバランスがリバランス後よりも悪いかどうかを確認します。

最適化プロポーザルサマリーの例

Name:         my-rebalance
Namespace:    myproject
Labels:       strimzi.io/cluster=my-cluster
Annotations:  API Version:  kafka.strimzi.io/v1alpha1
Kind:         KafkaRebalance
Metadata:
# ...
Status:
  Conditions:
    Last Transition Time:  2022-04-05T14:36:11.900Z
    Status:                ProposalReady
    Type:                  State
  Observed Generation:     1
  Optimization Result:
    Data To Move MB:  0
    Excluded Brokers For Leadership:
    Excluded Brokers For Replica Move:
    Excluded Topics:
    Intra Broker Data To Move MB:         12
    Monitored Partitions Percentage:      100
    Num Intra Broker Replica Movements:   0
    Num Leader Movements:                 24
    Num Replica Movements:                55
    On Demand Balancedness Score After:   82.91290759174306
    On Demand Balancedness Score Before:  78.01176356230222
    Recent Windows:                       5
  Session Id:                             a4f833bd-2055-4213-bfdd-ad21f95bf184

パーティションレプリカのブローカー間の移動は、パフォーマンスに大きな影響を与えますが、データ総量はそれほど多くありません。合計データが膨大な場合は、プロポーザルを却下するか、リバランスを承認するタイミングを考慮して Kafka クラスターのパフォーマンスへの影響を制限できます。

リバランスパフォーマンスチューニングオプション は、データ移動の影響を減らすのに有用です。リバランス期間を延長できる場合は、リバランスをより小さなバッチに分割できます。一回のデータ移動が少なくなると、クラスターの負荷も軽減できます。

21.1.2.4. 最適化プロポーザルサマリーのプロパティー

以下の表は、最適化プロポーザルのサマリーに含まれるプロパティーを説明しています。

Expand
表21.1 最適化プロポーザルに含まれるプロパティーのサマリー
JSON プロパティー説明

numIntraBrokerReplicaMovements

ディスクとクラスターのブローカーとの間で転送されるパーティションレプリカの合計数。

リバランス操作中のパフォーマンスへの影響度: 比較的高いが、numReplicaMovements よりも低い。

excludedBrokersForLeadership

サポートされていません。空のリストが返されます。

numReplicaMovements

個別のブローカー間で移動されるパーティションレプリカの数。

リバランス操作中のパフォーマンスへの影響度: 比較的高い。

onDemandBalancednessScoreBefore
onDemandBalancednessScoreAfter

最適化プロポーザルの生成前および生成後における、Kafka クラスターの全体的な 分散度 (balancedness) の値。

スコアは、違反した各ソフトゴールの BalancednessScore の合計を 100 から引いて算出されます。Cruise Control は、複数の要因に基づき BalancednessScore を各最適化ゴールに割り当てます。この場合の要因には、default.goals またはプロポーザル固有ゴールのリストにおけるゴールの位置を示す優先順位が含まれます。

Before は、Kafka クラスターのワークロードモデルに基づくスコアです。After は、生成された最適化プロポーザルを適用した後の予測ワークロードモデルに基づくスコアです。

intraBrokerDataToMoveMB

同じブローカーのディスク間で移動される各パーティションレプリカのサイズの合計 (numIntraBrokerReplicaMovements も参照してください。

リバランス操作中のパフォーマンスへの影響度: 場合による。値が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。大量のデータを移動する場合、同じブローカーのディスク間で移動する方が個別のブローカー間で移動するよりも影響度が低くなります (dataToMoveMB 参照)。

recentWindows

最適化プロポーザルの基になるメトリックウインドウの数。

dataToMoveMB

個別のブローカーに移動される各パーティションレプリカのサイズの合計 (numReplicaMovements も参照してください。

リバランス操作中のパフォーマンスへの影響度: 場合による。値が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。

monitoredPartitionsPercentage

最適化プロポーザルの対象となる Kafka クラスターのパーティションの割合 (パーセント)。excludedTopics の数が影響します。

excludedTopics

KafkaRebalance リソースの spec.excludedTopicsRegex プロパティーに正規表現を指定した場合、その式と一致するすべてのトピック名がここにリストされます。これらのトピックは、最適化プロポーザルではパーティションレプリカとリーダーの移動の計算からは除外されます。

numLeaderMovements

リーダーが別のレプリカに切り替えられるパーティションの数。

リバランス操作中のパフォーマンスへの影響度: 比較的低い。

excludedBrokersForReplicaMove

サポートされていません。空のリストが返されます。

21.1.2.5. 最適化プロポーザルの自動承認

時間を節約するために、最適化プロポーザルの承認プロセスを自動化できます。自動化により、最適化プロポーザルを生成すると、クラスターのリバランスに直接進みます。

最適化プロポーザルの自動承認メカニズムを有効にするには、strimzi.io/rebalance-auto-approval アノテーションを true に設定して KafkaRebalance リソースを作成します。アノテーションが設定されていないか、false に設定されている場合、最適化プロポーザルには手動承認が必要です。

自動承認メカニズムが有効になっているリバランス要求の例

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaRebalance
metadata:
  name: my-rebalance
  labels:
    strimzi.io/cluster: my-cluster
  annotations:
    strimzi.io/rebalance-auto-approval: "true"
spec:
  mode: # any mode
  # ...

最適化プロポーザルを自動的に承認する場合でも、ステータスを確認できます。リバランスが完了すると、KafkaRebalance リソースのステータスは Ready に移動します。

21.1.2.6. ブローカー負荷データの比較

ブローカーの負荷データは、リバランス後のリソースの現在の使用状況と予想される使用状況に関する情報を提供します。データは ConfigMap (KafkaRebalance リソースと同じ名前) に JSON 形式の文字列として保存されます。

Kafka のリバランスプロポーザルが ProposalReady 状態になると、Streams for Apache Kafka は、Cruise Control から生成されたブローカーメトリクスの JSON 文字列を含む ConfigMap (KafkaRebalance カスタムリソースの名前から命名) を作成します。各ブローカーには、次の 3 つの値で表される主要なメトリクスのセットがあります。

  • 最適化プロポーザルが適用される前の現在のメトリクス値
  • プロポーザルを適用した後の期待されるメトリクス値
  • 2 つの値の差 (適用後から適用前を差し引いた値)

この ConfigMap は、リバランスが完了した後もアクセスできます。

コマンドラインからこのデータを表示するには、ConfigMap の名前を使用します。

ConfigMap データを返す方法

oc describe configmaps <my_rebalance_configmap_name> -n <namespace>

jq コマンドライン JSON パーサーツール を使用して JSON 文字列を抽出することもできます。

jq を使用した ConfigMap からの JSON 文字列の抽出

oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'

Expand
表21.2 config map でキャプチャーされたプロパティー
JSON プロパティー説明

leaders

パーティションリーダーであるこのブローカーのレプリカ数。

replicas

このブローカーのレプリカ数。

cpuPercentage

定義された容量の割合をパーセントで表す CPU 使用率。

diskUsedPercentage

定義された容量の割合をパーセントで表すディスク使用率。

diskUsedMB

絶対ディスク使用量 (MB 単位)

networkOutRate

ブローカーのネットワーク出力レートの合計。

leaderNetworkInRate

このブローカーのすべてのパーティションリーダーレプリカに対するネットワーク入力レート。

followerNetworkInRate

このブローカーのすべてのフォロワーレプリカに対するネットワーク入力レート。

potentialMaxNetworkOutRate

このブローカーが現在ホストしているレプリカすべてのリーダーであった場合に実現される、仮定上の最大ネットワーク出力レート。

21.1.2.7. キャッシュされたプロポーザルの更新レートを調整する

Cruise Control は、設定済みのデフォルト最適化ゴールを基にして キャッシュされた最適化プロポーザル を維持します。このプロポーザルはワークロードモデルから生成され、Kafka クラスターの現在の状態を反映するために 15 分ごとに更新されます。デフォルトのゴールを使用して最適化プロポーザルを生成すると、Cruise Control は最新のキャッシュバージョンを返します。

ワークロードが急速に変化するクラスターの場合は、最適化プロポーザルが最新の状態を反映するように、更新間隔を短くすることが推奨されます。ただし、間隔を短くすると、Cruise Control サーバーの負荷が増加します。更新レートを調整するには、Cruise Control デプロイメント設定の proposal.expiration.ms 設定を変更します。

21.1.3. リバランスのオプションの調整

設定オプションを使用すると、クラスターのリバランスパフォーマンスを調整できます。これらの設定は、パーティションのレプリカとリーダーシップの移動、およびリバランスに割り当てられる帯域幅を制御します。

21.1.3.1. レプリカ移動ストラテジーの選択

クラスターリバランスのパフォーマンスは、パーティション再割り当てコマンドのバッチに適用される レプリカ移動ストラテジー の影響も受けます。デフォルトでは、Cruise Control は BaseReplicaMovementStrategy を使用し、生成された順序で再割り当てを適用します。ただし、このストラテジーでは、大規模なパーティションの再割り当てが生成され、最初に順序付けされると、他のパーティションの再割り当てが遅延される可能性があります。

Cruise Control は、最適化プロポーザルに適用できる代替のレプリカ移動ストラテジーを 4 つ提供します。

  • PrioritizeSmallReplicaMovementStrategy: 最初に小さいパーティションを再割り当てします。
  • PrioritizeLargeReplicaMovementStrategy: 最初に大きなパーティションを再割り当てします。
  • PostponeUrpReplicaMovementStrategy: 同期していないレプリカのないパーティションを優先します。
  • PrioritizeMinIsrWithOfflineReplicasStrategy: オフラインレプリカを使用して、最小同期レプリカ (MinISR) 以下のパーティションの再割り当てを優先します。
    このストラテジーを有効にするには、Kafka リソースで cruiseControl.config.concurrency.adjuster.min.isr.check.enabledtrue に設定します。

これらのストラテジーをシーケンスとして設定できます。最初のストラテジーは、内部ロジックを使用して 2 つのパーティション再割り当ての比較を試みます。再割り当てが同等である場合は、順番を決定するために再割り当てをシーケンスの次のストラテジーに渡します。

21.1.3.2. ブローカー内のディスクバランシング

ブローカー内のバランス調整では、同じブローカー上のディスク間でデータをシフトします。これは、JBOD ストレージと複数のディスクを使用したデプロイメントに役立ちます。このタイプのバランス調整では、ブローカー間でのバランス調整よりもネットワークオーバーヘッドが少なくなります。

注記

単一のディスクで JBOD ストレージを使用している場合、ブローカー内でのディスクのバランス調整では、バランスを取るディスクがないため、パーティション移動が 0 のプロポーザルが生成されます。

ブローカー内のバランス調整を有効にするには、KafkaRebalance.specrebalanceDisktrue に設定します。これが有効になっている場合、Cruise Control はブローカー内ゴールを自動的に設定し、ブローカー間のゴールを無視するため、goals フィールドは指定しないでください。Cruise Control はブローカー間およびブローカー内の分散を同時に実行しません。

21.1.3.3. リバランスチューニング

Cruise Control または個別のリバランスを設定するときに、次のリバランスチューニングオプションを設定できます。

  • Kafka リソースの Kafka.spec.cruiseControl.config で Cruise Control サーバーの設定を行います。
  • KafkaRebalance リソースの KafkaRebalance.spec でプロポーザル固有の設定を行います。
Expand
表21.3 リバランス設定チューニングプロパティー
Cruise Control プロパティーKafkaRebalance プロパティーデフォルト説明

num.concurrent.partition.movements.per.broker

concurrentPartitionMovementsPerBroker

5

各パーティション再割り当てバッチにおけるブローカー間パーティション移動の最大数。

num.concurrent.intra.broker.partition.movements

concurrentIntraBrokerPartitionMovements

2

各パーティション再割り当てバッチにおけるブローカー内パーティション移動の最大数。

num.concurrent.leader.movements

concurrentLeaderMovements

1000

各パーティション再割り当てバッチにおけるパーティションリーダー変更の最大数。

default.replication.throttle

replicationThrottle

Null (制限なし)

パーティションの再割り当てに割り当てる帯域幅 (バイト/秒単位)。

default.replica.movement.strategies

replicaMovementStrategies

BaseReplicaMovementStrategy

パーティション再割り当てコマンドが、生成されたプロポーザルに対して実行される順番を決定するために使用されるストラテジー (優先順位順) の一覧。サーバーの設定には、ストラテジークラスの完全修飾名をコンマ区切りの文字列で指定します (各クラス名の先頭に com.linkedin.kafka.cruisecontrol.executor.strategy. を追加します)。KafkaRebalance リソース設定には、YAML 配列のストラテジークラス名を使用します。

-

rebalanceDisk

false

ブローカー内のディスク分散を有効にし、同じブローカーのディスク間でディスク領域の使用率を分散します。ディスクが複数割り当てられた JBOD ストレージを使用する Kafka デプロイメントにのみ適用されます。

デフォルト設定を変更すると、リバランスの完了までにかかる時間と、リバランス中の Kafka クラスターの負荷に影響します。値を小さくすると負荷は減りますが、かかる時間は長くなります。その逆も同様です。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る