第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
# ...
最適化プロポーザルを生成するときにエラーを回避するために、サポートされている goals、default.goals、および (skipHardGoalCheck が true に設定されていない場合は) プロポーザル固有の 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 がデプロイされている場合、最適化プロポーザルを生成して承認するプロセスは次のようになります。
-
最適化ゴールと特定の設定を指定して、
KafkaRebalanceリソースを作成します。このリソースは、Cruise Control をトリガーして最適化プロポーザル生成プロセスを開始します。 -
Cruise Control Metrics Reporter はすべての Kafka ブローカーで実行され、生のメトリクスを収集して専用の Kafka トピック (
strimzi.cruisecontrol.metrics) に公開します。ブローカー、トピック、パーティションのメトリクスは集計され、サンプリングされ、Cruise Control がデプロイされたときに自動的に作成される他のトピック に保存されます。 - Load Monitor は、CPU、ディスク、ネットワーク使用率データなどのメトリクスを ワークロードモデル として収集、処理、保存します。このメトリクスは Analyzer と Anomaly Detector によって使用されます。
- Anomaly Detector は、Kafka クラスターの健全性とパフォーマンスを継続的に監視し、クラスターの安定性に影響を与える可能性のあるブローカーの障害やディスク容量の問題などをチェックします。
-
Analyzer は、Load Monitor からのワークロードモデルに基づいて最適化プロポーザルを作成します。設定されたゴールと容量に基づいて、ブローカー間でパーティションのバランスを取るための最適化プロポーザルを生成します。REST API を通じて、プロポーザルのサマリーが
KafkaRebalanceリソースのステータスに反映されます。 - 最適化プロポーザルは、クラスター管理ゴールとの整合性に基づき、手動または自動で承認または拒否されます。
- 承認されると、エグゼキューターは最適化プロポーザルを適用して Kafka クラスターのリバランスを実行します。これには、承認されたプロポーザルに従ってパーティションを再割り当てし、ブローカー間でワークロードを再分配することが含まれます。
図21.1 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. 最適化プロポーザルサマリーのプロパティー リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、最適化プロポーザルのサマリーに含まれるプロパティーを説明しています。
| JSON プロパティー | 説明 |
|---|---|
|
| ディスクとクラスターのブローカーとの間で転送されるパーティションレプリカの合計数。
リバランス操作中のパフォーマンスへの影響度: 比較的高いが、 |
|
| サポートされていません。空のリストが返されます。 |
|
| 個別のブローカー間で移動されるパーティションレプリカの数。 リバランス操作中のパフォーマンスへの影響度: 比較的高い。 |
|
| 最適化プロポーザルの生成前および生成後における、Kafka クラスターの全体的な 分散度 (balancedness) の値。
スコアは、違反した各ソフトゴールの
|
|
|
同じブローカーのディスク間で移動される各パーティションレプリカのサイズの合計 (
リバランス操作中のパフォーマンスへの影響度: 場合による。値が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。大量のデータを移動する場合、同じブローカーのディスク間で移動する方が個別のブローカー間で移動するよりも影響度が低くなります ( |
|
| 最適化プロポーザルの基になるメトリックウインドウの数。 |
|
|
個別のブローカーに移動される各パーティションレプリカのサイズの合計 ( リバランス操作中のパフォーマンスへの影響度: 場合による。値が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。 |
|
|
最適化プロポーザルの対象となる Kafka クラスターのパーティションの割合 (パーセント)。 |
|
|
|
|
| リーダーが別のレプリカに切り替えられるパーティションの数。 リバランス操作中のパフォーマンスへの影響度: 比較的低い。 |
|
| サポートされていません。空のリストが返されます。 |
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|.'
| JSON プロパティー | 説明 |
|---|---|
|
| パーティションリーダーであるこのブローカーのレプリカ数。 |
|
| このブローカーのレプリカ数。 |
|
| 定義された容量の割合をパーセントで表す CPU 使用率。 |
|
| 定義された容量の割合をパーセントで表すディスク使用率。 |
|
| 絶対ディスク使用量 (MB 単位) |
|
| ブローカーのネットワーク出力レートの合計。 |
|
| このブローカーのすべてのパーティションリーダーレプリカに対するネットワーク入力レート。 |
|
| このブローカーのすべてのフォロワーレプリカに対するネットワーク入力レート。 |
|
| このブローカーが現在ホストしているレプリカすべてのリーダーであった場合に実現される、仮定上の最大ネットワーク出力レート。 |
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.enabledをtrueに設定します。
これらのストラテジーをシーケンスとして設定できます。最初のストラテジーは、内部ロジックを使用して 2 つのパーティション再割り当ての比較を試みます。再割り当てが同等である場合は、順番を決定するために再割り当てをシーケンスの次のストラテジーに渡します。
21.1.3.2. ブローカー内のディスクバランシング リンクのコピーリンクがクリップボードにコピーされました!
ブローカー内のバランス調整では、同じブローカー上のディスク間でデータをシフトします。これは、JBOD ストレージと複数のディスクを使用したデプロイメントに役立ちます。このタイプのバランス調整では、ブローカー間でのバランス調整よりもネットワークオーバーヘッドが少なくなります。
単一のディスクで JBOD ストレージを使用している場合、ブローカー内でのディスクのバランス調整では、バランスを取るディスクがないため、パーティション移動が 0 のプロポーザルが生成されます。
ブローカー内のバランス調整を有効にするには、KafkaRebalance.spec で rebalanceDisk を true に設定します。これが有効になっている場合、Cruise Control はブローカー内ゴールを自動的に設定し、ブローカー間のゴールを無視するため、goals フィールドは指定しないでください。Cruise Control はブローカー間およびブローカー内の分散を同時に実行しません。
21.1.3.3. リバランスチューニング リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control または個別のリバランスを設定するときに、次のリバランスチューニングオプションを設定できます。
-
KafkaリソースのKafka.spec.cruiseControl.configで Cruise Control サーバーの設定を行います。 -
KafkaRebalanceリソースのKafkaRebalance.specでプロポーザル固有の設定を行います。
| Cruise Control プロパティー | KafkaRebalance プロパティー | デフォルト | 説明 |
|---|---|---|---|
|
|
| 5 | 各パーティション再割り当てバッチにおけるブローカー間パーティション移動の最大数。 |
|
|
| 2 | 各パーティション再割り当てバッチにおけるブローカー内パーティション移動の最大数。 |
|
|
| 1000 | 各パーティション再割り当てバッチにおけるパーティションリーダー変更の最大数。 |
|
|
| Null (制限なし) | パーティションの再割り当てに割り当てる帯域幅 (バイト/秒単位)。 |
|
|
|
|
パーティション再割り当てコマンドが、生成されたプロポーザルに対して実行される順番を決定するために使用されるストラテジー (優先順位順) の一覧。サーバーの設定には、ストラテジークラスの完全修飾名をコンマ区切りの文字列で指定します (各クラス名の先頭に |
| - |
| false | ブローカー内のディスク分散を有効にし、同じブローカーのディスク間でディスク領域の使用率を分散します。ディスクが複数割り当てられた JBOD ストレージを使用する Kafka デプロイメントにのみ適用されます。 |
デフォルト設定を変更すると、リバランスの完了までにかかる時間と、リバランス中の Kafka クラスターの負荷に影響します。値を小さくすると負荷は減りますが、かかる時間は長くなります。その逆も同様です。