第15章 Cruise Control を使用したクラスターのリバランス
Cruise Control は、Kafka と並行して実行するように設計されたオープンソースアプリケーションであり、次の操作を実行してクラスターリソースの使用を最適化します。
- クラスターワークロードのモニタリング
- 事前定義された制約に基づいたパーティションのリバランス
Cruise Control 操作は、ブローカーをより効率的に使用する、よりバランスの取れた Kafka クラスターの実行に役立ちます。
Kafka クラスターが進化するにつれて、一部のブローカーが過負荷になり、他のブローカーは十分に活用されない可能性があります。Cruise Control は、CPU、ディスク、ネットワーク負荷などのレプリカレベルでのリソース使用率をモデル化し、設定可能な最適化ゴールに基づいてバランスの取れたパーティション割り当ての最適化プロポーザル (承認または拒否可能) を生成することで、この不均衡に対処します。
cruisecontrol.properties ファイルには、Cruise Control の設定が含まれています。Cruise Control Wiki の Configurations セクションに記載されているすべてのプロパティーを指定および設定できます。
15.1. Cruise Control のコンポーネントと機能 リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control は 4 つの主要コンポーネントで構成されています。
- 負荷モニター
- ロードモニターはメトリクスを収集し、クラスターのワークロードデータを分析します。
- アナライザー
- アナライザーは、収集されたデータと設定されたゴールに基づいて最適化のプロポーザルを生成します。
- Anomaly Detector
- Anomaly Detector は、クラスターの動作における異常を識別して報告します。
- エグゼキューター (Executor)
- エグゼキューターは、承認された最適化プロポーザルをクラスターに適用します。
Cruise Control はクライアントとのやり取りのための REST API も提供しており、Streams for Apache Kafka はこれを使用して次の機能をサポートします。
- 最適化ゴールからの最適化プロポーザルの生成
- 最適化プロポーザルに基づいた Kafka クラスターのリバランス
- トピックレプリケーション係数の変更
自己修復、通知、独自のゴールの作成など、他の Cruise Control 機能は現在サポートされていません。
15.1.1. 最適化ゴール リンクのコピーリンクがクリップボードにコピーされました!
最適化ゴールは、トピックのレプリカをブローカー間で均等に分散するなど、リバランス調整の目的を定義します。
それらは次のように分類されます。
- サポートされているゴール は、Cruise Control インスタンスによってサポートされ、その操作で使用できるゴールのリストです。デフォルトでは、このリストには Cruise Control に含まれるすべてのゴールが含まれます。ゴールをデフォルトゴールやハードゴールなどの他のカテゴリーで使用するには、最初にサポートされているゴールにリストされている必要があります。ゴールの使用を防ぐには、このリストからゴールを削除します。
- ハードゴール が事前に設定されており、プロポーザルが成功するにはそのゴールを満たす必要があります。
- ソフトゴール は、すべてのハードゴールが満たされた場合でもプロポーザルの作成を妨げることなく、最適化中に可能な限り優先される目的を持つ事前設定されたゴールです。
- デフォルトゴール は、プロポーザルを生成するときにデフォルトで使用されるゴールを指します。ユーザーが特に設定しない限り、サポートされているゴールと一致します。
- ブローカー内ゴール とは、同じブローカーでのリバランスに特に使用されるゴールを指します。
- プロポーザル固有のゴール は、特定のプロポーザル用に設定されたサポートされているゴールのサブセットです。
実行時にプロポーザル固有のゴールを設定します。設定プロパティーファイルで、完全修飾ドメイン名を使用して、降順の優先順位で他の最適化ゴールを指定します。
Cruise Control の設定は、config/cruisecontrol.properties ファイルに含まれています。ゴールを管理するには、次のプロパティーを使用します。
-
サポートされているゴール:
goalsプロパティー -
ハードゴール:
hard.goalsプロパティー -
デフォルトゴール:
default.goalsプロパティー -
ブローカー内ゴール:
intra.broker.goalsプロパティー
15.1.1.1. サポートされているゴール リンクのコピーリンクがクリップボードにコピーされました!
サポートされているゴールは事前に定義されており、Cruise Control 最適化プロポーザルの生成に使用できます。サポートされているゴールとしてリストされていないゴールは、Cruise Control 操作では使用できません。サポートされているゴールの一部は、ハードゴールとして事前設定されています。
cruisecontrol.properties でサポートされているゴールを設定します。
-
サポートされているゴールを変更するには、
goalsプロパティーでゴールを指定します。
ゴール設定で優先順位を調整できます。 - サポートされているゴールを少なくとも 1 つ指定する必要があります。
15.1.1.2. ハードゴールとソフトゴール リンクのコピーリンクがクリップボードにコピーされました!
最適化プロポーザルを生成するには、ハードゴールを満たす必要があります。ソフトゴールは、すべてのハードゴールが満たされた後に Cruise Control が達成しようとするベストエフォートゴールです。ハードゴールとソフトゴールの分類は、Cruise Control コードで固定されており、変更できません。
Cruise Control は、まずハードゴールの達成を優先し、次にリストされている順序に従ってソフトゴールに取り組みます。すべてのハードゴールを満たすプロポーザルは、たとえソフトゴールの一部に違反していたとしても有効です。
たとえば、ソフトゴールとしては、トピックのレプリカを均等に分散することが考えられます。Cruise Control は、ソフトゴールが完全に満たされていない場合でも、最適化プロポーザルを生成し続けます。
cruisecontrol.properties でハードゴールを設定します。
-
ハードゴールを変更するには、
hard.goalsプロパティーでサポートされているゴールのサブセットを指定します。
ハードゴールの設定で優先順位を調整できます。 -
ハードゴールを除外するには、そのゴールが
default.goalsまたはhard.goalsのどちらにも含まれていないことを確認します。
ハードゴールの数を増やすと、Cruise Control が最適化プロポーザルを生成する可能性が低くなります。
15.1.1.3. デフォルトゴール リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control はデフォルトゴールを使用して最適化プロポーザルを生成します。デフォルトゴールは、サポートされている最適化ゴールのサブセットにする必要があります。
このサポートされているゴールリストに基づく最適化プロポーザルがその後生成され、キャッシュされます。
cruisecontrol.properties でデフォルトゴールを設定します。
-
デフォルトゴールを変更するには、
default.goalsプロパティーでサポートされているゴールのサブセットを指定します。
デフォルトゴールの設定で優先順位を調整できます。 - 少なくとも 1 つのデフォルトゴールを指定する必要があります。
15.1.1.4. ブローカー内ゴール リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control はブローカー内ゴールを使用して、同じブローカー上のディスク間でデータのバランスを取ります。これは、JBOD ストレージと複数のディスクを使用したデプロイメントに役立ちます。
cruisecontrol.properties でブローカー内ゴールを設定します。
-
ブローカー内ゴールを変更するには、
intra.broker.goalsプロパティーでサポートされているゴールをリストします。
ブローカー内ゴール設定で優先順位を調整できます。
15.1.1.5. プロポーザル固有のゴール リンクのコピーリンクがクリップボードにコピーされました!
プロポーザル固有の最適化ゴールは、特定のゴールリストに基づいた最適化プロポーザルの作成をサポートします。プロポーザル固有のゴールが設定されていない場合は、デフォルトのゴールが使用されます。
カスタマイズ用にサポートされている最適化ゴールのサブセットとして、実行時にプロポーザル固有のゴールを指定します。
たとえば、単一のプロポーザル固有のゴールを定義することで、ディスク容量や使用率を考慮せずに、Kafka クラスター全体でトピックリーダーレプリカの分散を最適化できます。
プロポーザル固有のゴールを指定するときは、設定されているすべてのハードゴールを含めてください。そうしないと、エラーが発生します。
最適化プロポーザルの設定済みのハードゴールを無視するには、skip_hard_goals_check=true パラメーターをリクエストに追加します。
15.1.1.6. 優先度によるゴールの順序 リンクのコピーリンクがクリップボードにコピーされました!
設定を変更しない限り、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 アサインナーのゴールはサポートされていません。
デフォルトゴールとハードゴールの設定例
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,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuCapacityGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.PotentialNwOutGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.TopicReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderBytesInDistributionGoal hard.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,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuCapacityGoal
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,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuCapacityGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.PotentialNwOutGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuUsageDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.TopicReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderReplicaDistributionGoal,com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderBytesInDistributionGoal
hard.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,com.linkedin.kafka.cruisecontrol.analyzer.goals.CpuCapacityGoal
最適化プロポーザルを生成するときにエラーを回避するために、サポートされている goals、default.goals、および (skip_hard_goals_check が true に設定されていない場合は) プロポーザル固有のゴールに、hard.goals で指定されたすべてのハードゴールが含まれていることを確認します。ハードゴールは、サポートされているゴール、デフォルトのゴール、およびプロポーザル固有のゴールのサブセットとして含める必要があります。
プロポーザル固有のゴールを含むリクエストの例
curl -v -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
curl -v -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
15.1.1.7. ハードゴールチェックをスキップする リンクのコピーリンクがクリップボードにコピーされました!
リクエストで skip_hard_goals_check=true が指定されている場合、Cruise Control は、プロポーザル固有のゴールに設定されたすべてのハードゴールが含まれているかどうかを確認しません。これにより、最適化プロポーザルを生成する際の柔軟性が向上しますが、すべてのハードゴールを満たさないプロポーザルにつながる可能性があります。
ただし、skip_hard_goals_check=true の場合でも、プロポーザル固有のゴールに含まれるハードゴールは、Cruise Control にハードゴールとして扱われます。
15.1.2. 最適化プロポーザル リンクのコピーリンクがクリップボードにコピーされました!
最適化プロポーザルは、定義された最適化ゴールに基づいてプロポーザルされた変更の概要であり、特定の優先順位で評価されます。プロポーザルを承認または拒否し、必要に応じてゴールを調整して再実行できます。
Streams for Apache Kafka で使用するために Cruise Control がデプロイされている場合、最適化プロポーザルを生成して承認するプロセスは次のようになります。
- 最適化プロポーザルを生成するようリクエストします。このリクエストにより、Cruise Control は最適化プロポーザル生成プロセスを開始します。
-
Cruise Control Metrics Reporter はすべての Kafka ブローカーで実行し、生のメトリクスを収集して専用の Kafka トピック (
__CruiseControlMetrics) に公開します。ブローカー、トピック、パーティションのメトリクスは集計され、サンプリングされ、Cruise Control がデプロイされたときに自動的に作成される他のトピック に保存されます。 - Load Monitor は、CPU、ディスク、ネットワーク使用率データなどのメトリクスを ワークロードモデル として収集、処理、保存します。このメトリクスは Analyzer と Anomaly Detector によって使用されます。
- Anomaly Detector は、Kafka クラスターの健全性とパフォーマンスを継続的に監視し、クラスターの安定性に影響を与える可能性のあるブローカーの障害やディスク容量の問題などをチェックします。
- Analyzer は、Load Monitor からのワークロードモデルに基づいて最適化プロポーザルを作成します。設定されたゴールと容量に基づいて、ブローカー間でパーティションのバランスを取るための最適化プロポーザルを生成します。REST API を通じて、リクエストへの応答でプロポーザルの概要が返されます。
- 最適化プロポーザルは、クラスター管理目標との整合性に基づいて承認または拒否されます。
- 承認されると、エグゼキューターは最適化プロポーザルを適用して Kafka クラスターのバランスを再調整します。これには、承認されたプロポーザルに従ってパーティションを再割り当てし、ブローカー間でワークロードを再分配することが含まれます。
Cruise Control の最適化プロセス
最適化プロポーザルは、パーティション再割り当てマッピングのリストで構成されます。プロポーザルを承認すると、Cruise Control サーバーはこれらのパーティションの再割り当てを Kafka クラスターに適用します。
パーティションの再割り当ては、次のいずれかの操作で構成されます。
パーティションの移動: パーティションレプリカとそのデータを新しい場所に転送します。パーティションの移動は、以下の 2 つの形式のいずれかになります。
- ブローカー間の移動: パーティションレプリカを、別のブローカーのログディレクトリーに移動します。
- ブローカー内の移動: パーティションレプリカを、同じブローカーの異なるログディレクトリーに移動します。
- リーダーシップの移動: パーティションのレプリカのリーダーを切り替えます。
Cruise Control は、パーティションの再割り当てを Kafka クラスターに一括で発行します。リバランス調整中のクラスターのパフォーマンスは、各バッチに含まれる各タイプの移動の数と大きさの影響を受けます。
15.1.2.1. エンドポイントのリバランス リンクのコピーリンクがクリップボードにコピーされました!
リバランスのプロポーザルは、3 つのエンドポイントのいずれかにリクエストを送信して生成できます。
- /rebalance エンドポイント
- このエンドポイントへのリクエストは、クラスター内のすべてのブローカー間でレプリカを移動することにより、完全なリバランスを実行します。
- /add_broker エンドポイント
-
このエンドポイントは、1 つ以上のブローカーを追加して Kafka クラスターをスケールアップした後に使用されます。通常、Kafka クラスターをスケールアップした後、新しいブローカーは、新しく作成されたトピックのパーティションのみをホストするために使用されます。新しいトピックが作成されないと、新たに追加されたブローカーは使用されず、既存のブローカーは同じ負荷のままになります。ブローカーをクラスターに追加してすぐに
add_brokerエンドポイントを使用すると、リバランス操作はレプリカを既存のブローカーから新たに追加されたブローカーに移動します。リクエストで新しいブローカーをブローカー ID のリストとして指定します。 - /remove_broker
- このエンドポイントは、1 つ以上のブローカーを削除して Kafka クラスターをスケールダウンする前に使用されます。この操作により、削除されるブローカーからレプリカが移動されます。これらのブローカーがレプリカをホストしなくなった場合は、スケールダウン操作を安全に実行できます。削除するブローカーをブローカー ID のリストとして指定します。
通常、full リバランスエンドポイントを使用して、ブローカー間で負荷を分散し、Kafka クラスターをリバランスします。add_broker エンドポイントと remove_broker エンドポイントは、クラスターをスケールアップまたはスケールダウンし、それに応じてレプリカをリバランスする場合にのみ使用してください。
結局のところ、リバランスを実行する手順は、3 つの異なるエンドポイント間で同じとなります。唯一の違いは、リクエストでエンドポイントを指定することと、必要に応じて追加されたブローカーまたは削除されるブローカーをリストすることです。
15.1.2.2. 最適化プロポーザルの結果 リンクのコピーリンクがクリップボードにコピーされました!
最適化プロポーザルが生成されると、変更の概要が返されます。
サマリーは、Cruise Control API を介した HTTP リクエストへの応答で返されます。サマリーは、プロポーザルされたクラスターリバランスの概要を提供し、関係する変更の規模を示します。提供される情報は完全な最適化プロポーザルのサマリーになります。
15.1.2.3. 最適化プロポーザルの承認または拒否 リンクのコピーリンクがクリップボードにコピーされました!
最適化プロポーザルのサマリーは、プロポーザルされた変更の範囲を示しています。
/rebalance エンドポイントに POST リクエストを行うと、最適化プロポーザルのサマリーがレスポンスで返されます。
最適化プロポーザルの要約を返す方法
curl -v -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/rebalance'
curl -v -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/rebalance'
サマリーを使用して、最適化プロポーザルを承認するか拒否するかを決定します。
- 最適化プロポーザルの承認
-
/rebalanceエンドポイントに POST リクエストを送信し、dryrunパラメーターをfalse(デフォルトはtrue) に設定して、最適化のプロポーザルを承認します。Cruise Control は、プロポーザルを Kafka クラスターに適用し、クラスターのリバランス操作を開始します。 - 最適化プロポーザルの拒否
-
最適化プロポーザルを承認しないことを選択した場合は、最適化ゴールの変更 または 任意のリバランスパフォーマンスチューニングオプションの更新 を行い、その後で別のプロポーザルを生成できます。
dryrunパラメーターなしでリクエストを再送信して、新しい最適化プロポーザルを生成できます。
最適化プロポーザルを使用して、リバランスに必要な動作を評価します。たとえば、サマリーではブローカー間およびブローカー内の動きを記述します。ブローカー間のリバランスは、別々のブローカー間でデータを移動します。JBOD ストレージ設定を使用していると、ブローカー内のリバランスでは同じブローカー上のディスク間でデータが移動します。このような情報は、プロポーザルを承認しない場合でも有用な場合があります。
リバランスの際には Kafka クラスターに追加の負荷がかかるため、最適化プロポーザルを却下したり、承認を遅らせたりする場合があります。プロポーザルが長期間遅れると、クラスターの負荷が大幅に変化する可能性があるため、新しいプロポーザルをリクエストしたほうがよい場合があります。
次の例では、プロポーザルは別々のブローカー間のデータのリバランスを提案しています。リバランスには、ブローカー間での 55 個のパーティションレプリカ (合計 12 MB のデータ) の移動が含まれます。このプロポーザルでは、24 のパーティションリーダーも別のブローカーに移動します。これにはクラスターメタデータの変更が必要ですが、パフォーマンスへの影響はわずかです。
バランススコアは、最適化プロポーザルが承認される前後の Kafka クラスターの全体的なバランスの測定値です。バランススコアは、最適化ゴールに基づいています。すべてのゴールが満たされていると、スコアは 100 になります。達成されないゴールごとにスコアが減少します。バランススコアを比較して、Kafka クラスターのバランスがリバランス後よりも悪いかどうかを確認します。
最適化プロポーザルサマリーの例
パーティションレプリカのブローカー間の移動は、パフォーマンスに大きな影響を与えますが、データ総量はそれほど多くありません。合計データが膨大な場合は、プロポーザルを却下するか、リバランスを承認するタイミングを考慮して Kafka クラスターのパフォーマンスへの影響を制限できます。
provision ステータスは、現在のクラスター設定が最適化ゴールをサポートするかどうかを示します。プロビジョニングステータスを確認し、ブローカーを追加または削除する必要があるかどうかを確認します。
| Status | 説明 |
|---|---|
|
| クラスターには、最適化ゴールを満たす適切な数のブローカーがあります。 |
|
| クラスターはプロビジョニングされておらず、最適化ゴールに対応するために追加のブローカーが必要になります。 |
|
| クラスターはオーバープロビジョニングされており、最適化ゴールを満たすためにブローカーの数を減らします。 |
|
| ステータスは関連性がなく、まだ決定されていません。 |
15.1.2.4. 最適化プロポーザルサマリーのプロパティー リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、最適化プロポーザルのサマリーに含まれるプロパティーを説明しています。
| プロパティー | 説明 |
|---|---|
|
| <n>: 個別のブローカー間で移動されるパーティションレプリカの数。 リバランス操作中のパフォーマンスへの影響度: 比較的高い。 <y> MB: 個別のブローカーに移動される各パーティションレプリカのサイズの合計。 リバランス操作中のパフォーマンスへの影響度: 場合による。MB の数が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。 |
|
| <n>: ディスクとクラスターのブローカーとの間で転送されるパーティションレプリカの合計数。
リバランス操作中のパフォーマンスへの影響度: 比較的高いが、 <y> MB: 同じブローカーのディスク間で移動する各パーティションレプリカのサイズの合計。
リバランス操作中のパフォーマンスへの影響度: 場合による。値が大きいほど、クラスターのリバランスの完了にかかる時間が長くなります。大量のデータを移動する場合は、同じブローカーのディスク間で移動する方が個別のブローカー間で移動するよりも影響度が低くなります ( |
|
| 最適化プロポーザルのパーティションレプリカ/リーダーの移動の計算から除外されたトピックの数。 以下のいずれかの方法で、トピックを除外することができます。
正規表現と一致するトピックが応答にリスト表示され、クラスターのリバランスから除外されます。 |
|
| <n>: リーダーが別のレプリカに切り替えられるパーティションの数。 リバランス操作中のパフォーマンスへの影響度: 比較的低い。 |
|
| <n>: 最適化プロポーザルの基になるメトリックウインドウの数。 |
|
| <n>%: 最適化プロポーザルの対象となる Kafka クラスターのパーティションの割合 (パーセント)。 |
|
| Kafka クラスターの全体的なバランスの測定。
Cruise Control は、複数の要因を基にして
|
15.1.2.5. キャッシュされたプロポーザルの更新レートを調整する リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control は、設定済みのデフォルト最適化ゴールを基にして キャッシュされた最適化プロポーザル を維持します。このプロポーザルはワークロードモデルから生成され、Kafka クラスターの現在の状態を反映するために 15 分ごとに更新されます。デフォルトのゴールを使用して最適化プロポーザルを生成すると、Cruise Control は最新のキャッシュバージョンを返します。
ワークロードが急速に変化するクラスターの場合は、最適化プロポーザルが最新の状態を反映するように、更新間隔を短くすることが推奨されます。ただし、間隔を短くすると、Cruise Control サーバーの負荷が増加します。更新レートを調整するには、Cruise Control デプロイメント設定の proposal.expiration.ms 設定を変更します。
15.1.3. リバランスのオプションの調整 リンクのコピーリンクがクリップボードにコピーされました!
設定オプションを使用すると、クラスターのリバランスパフォーマンスを調整できます。これらの設定は、パーティションのレプリカとリーダーシップの移動、およびリバランスに割り当てられる帯域幅を制御します。
15.1.3.1. レプリカ移動ストラテジーの選択 リンクのコピーリンクがクリップボードにコピーされました!
クラスターリバランスのパフォーマンスは、パーティション再割り当てコマンドのバッチに適用される レプリカ移動ストラテジー の影響も受けます。デフォルトでは、Cruise Control は BaseReplicaMovementStrategy を使用し、生成された順序で再割り当てを適用します。ただし、このストラテジーでは、大規模なパーティションの再割り当てが生成され、最初に順序付けされると、他のパーティションの再割り当てが遅延される可能性があります。
Cruise Control は、最適化プロポーザルに適用できる代替のレプリカ移動ストラテジーを 4 つ提供します。
-
PrioritizeSmallReplicaMovementStrategy: 最初に小さいパーティションを再割り当てします。 -
PrioritizeLargeReplicaMovementStrategy: 最初に大きなパーティションを再割り当てします。 -
PostponeUrpReplicaMovementStrategy: 同期していないレプリカのないパーティションを優先します。 -
PrioritizeMinIsrWithOfflineReplicasStrategy: オフラインレプリカを使用して、最小同期レプリカ (MinISR) 以下のパーティションの再割り当てを優先します。
このストラテジーを有効にするには、Cruise Control 設定でconcurrency.adjuster.min.isr.check.enabledを設定します。
これらのストラテジーをシーケンスとして設定できます。最初のストラテジーは、内部ロジックを使用して 2 つのパーティション再割り当ての比較を試みます。再割り当てが同等である場合は、順番を決定するために再割り当てをシーケンスの次のストラテジーに渡します。
15.1.3.2. リバランスチューニングオプション リンクのコピーリンクがクリップボードにコピーされました!
Cruise Control または個別のリバランスを設定するときに、次のリバランスチューニングオプションを設定できます。
次のいずれかの方法でチューニングオプションを設定します。
-
cruisecontrol.propertiesファイルのプロパティー -
/rebalanceエンドポイントへの POST リクエストのパラメーター
両方の方法に関連する設定を以下の表にまとめています。
| Cruise Control プロパティー | エンドポイントパラメーターのリバランス | Default | 説明 |
|---|---|---|---|
|
|
| 5 | 各パーティション再割り当てバッチにおけるブローカー間パーティション移動の最大数。 |
|
|
| 2 | 各パーティション再割り当てバッチにおけるブローカー内パーティション移動の最大数。 |
|
|
| 1000 | 各パーティション再割り当てバッチにおけるパーティションリーダー変更の最大数。 |
|
|
| Null (制限なし) | パーティションの再割り当てに割り当てる帯域幅 (バイト/秒単位)。 |
|
|
|
|
パーティション再割り当てコマンドが、生成されたプロポーザルに対して実行される順番を決定するために使用されるストラテジー (優先順位順) の一覧。3 つのストラテジー |
デフォルト設定を変更すると、リバランスの完了までにかかる時間と、リバランス中の Kafka クラスターの負荷に影響します。値を小さくすると負荷は減りますが、かかる時間は長くなります。その逆も同様です。