15.5. 最適化ゴールの概要

Cruise Control は Kafka クラスターをリバランスするために、最適化ゴールを使用して最適 化プロポーザル を生成します。最適化ゴールは、Kafka クラスター全体のワークロード再分散およびリソース使用の制約です。

AMQ Streams on Red Hat Enterprise Linux は、Cruise Control プロジェクトで開発されたすべての最適化ゴールをサポートします。以下に、サポートされるゴールをデフォルトの優先度順に示します。

  1. ラックアウェアネス (Rack Awareness)
  2. トピックのセットに対するブローカーごとのリーダーレプリカの最小数
  3. レプリカの容量
  4. 容量: ディスク容量、ネットワークインバウンド容量、ネットワークアウトバウンド容量
  5. CPU 容量
  6. レプリカの分散
  7. 潜在的なネットワーク出力
  8. リソース分布: ディスク使用率の分布、ネットワークインバウンド使用率の分布、ネットワークアウトバウンド使用率の分布。
  9. リーダーへの単位時間あたりバイト流入量の分布
  10. トピックレプリカの分散
  11. CPU 使用率の分散
  12. リーダーレプリカの分散
  13. 優先リーダーの選択
  14. Kafka Assigner ディスク使用の分散
  15. ブローカー内のディスクの容量
  16. ブローカー内のディスク使用量

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

Cruise Control プロパティーファイルのゴール設定

cruise-control/config/ ディレクトリーの cruisecontrol.properties ファイルで最適化ゴールを設定します。満たさなければならない ハード 最適化ゴールの設定と、マスター および デフォルト の最適化ゴールの設定があります。

オプション: ユーザー提供 の最適化ゴールは、/rebalance エンドポイントへのリクエストのパラメーターとして、実行時に設定されます。

最適化ゴールは、ブローカーリソースのあらゆる 容量制限 の対象となります。

以下のセクションでは、各ゴール設定の詳細を説明します。

マスター最適化ゴール

マスター最適化ゴールはすべてのユーザーが使用できます。マスター最適化ゴールにリストされていないゴールは、Cruise Control 操作で使用できません。

以下のマスター最適化ゴールは、goals プロパティーの優先度で cruisecontrol.properties ファイルに事前設定されています。

RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal; PreferredLeaderElectionGoal

最適化プロポーザルの生成には、1 つ以上のゴールを完全に除外する必要がある場合を除き、事前設定されたマスター最適化ゴールを変更しないことが推奨されます。必要な場合、マスター最適化ゴールの優先順位はデフォルトの最適化ゴールの設定で変更できます。

事前設定されたマスター最適化ゴールを変更する必要がある場合は、goals プロパティーにゴールのリストを優先度が高いものから順に指定します。cruisecontrol.properties ファイルに示されるように、完全修飾ドメイン名を使用します。

少なくとも 1 つのマスターゴールを指定する必要があります。指定しないと、Cruise Control がクラッシュします。

注記

事前設定されたマスター最適化ゴールを変更する場合、設定した hard.goals が設定したマスター最適化ゴールのサブセットになるようにする必要があります。そうでないと、最適化プロポーザルの生成時にエラーが発生します。

ハードゴールおよびソフトゴール

ハードゴールは最適化プロポーザルで必ず満たさなければならないゴールです。ハードゴールとして設定されていないゴールはソフトゴールと呼ばれます。ソフトゴールはベストエフォートゴールと考えることができ ます。最適化プロポーザルで満たす必要はありませんが、最適化の計算に含まれます。

Cruise Control は、すべてのハードゴールを満たし、優先度順にできるだけ多くのソフトゴールを満たす最適化プロポーザルを算出します。すべてのハードゴールを満たさ ない 最適化プロポーザルは Analyzer によって拒否され、ユーザーに送信されません。

注記

たとえば、クラスター全体でトピックのレプリカを均等に分散するソフトゴールがあるとします (トピックレプリカ分散のゴール)。このソフトゴールを無視すると、設定されたハードゴールがすべて有効になる場合、Cruise Control はこのソフトゴールを無視します。

以下のマスター最適化ゴールは、hard.goals ファイルの cruisecontrol.properties ファイルのハードゴールとして事前設定されています。

RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal

ハードゴールを変更するには、hard.goals プロパティーを編集し、完全修飾ドメイン名を使用して、希望のゴールを指定します。

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

デフォルトの最適化ゴール

Cruise Control は デフォルトの最適化ゴール リストを使用して キャッシュされた最適化プロポーザル を生成します。詳細は、「最適化プロポーザルの概要」 を参照してください。

ユーザー提供の最適化ゴールを設定して、実行時にデフォルトの最適化ゴール を上書きできます。

以下のデフォルトの最適化ゴールは、default.goals プロパティーの優先度で cruisecontrol.properties ファイルに事前設定されています。

RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal

少なくとも 1 つのデフォルトのゴールを指定する必要があります。指定しない場合は、Cruise Control がクラッシュします。

デフォルトの最適化ゴールを編集するには、default.goals プロパティーでゴールのリストを優先度が高いもので指定します。デフォルトのゴールはマスター最適化ゴールのサブセットである必要があります。完全修飾ドメイン名を使用します。

ユーザー提供の最適化ゴール

ユーザー提供の最適化ゴールは、特定の最適化プロポーザルの設定済みのデフォルトゴールを絞り込みます。必要に応じて、HTTP リクエストのパラメーターとして /rebalance エンドポイントへの設定することができます。詳細は、「最適化プロポーザルの生成」 を参照してください。

ユーザー提供の最適化ゴールは、さまざまな状況の最適化プロポーザルを生成できます。たとえば、ディスクの容量やディスクの使用率を考慮せずに、Kafka クラスター全体でリーダーレプリカの分散を最適化したい場合があります。そのため、リーダーレプリカ分散の単一のゴールを含む /rebalance エンドポイントにリクエストを送信します。

ユーザー提供の最適化ゴールには以下が必要になります。

最適化プロポーザルの設定済みのハードゴールを無視するには、skip_hard_goals_check=true パラメーターをリクエストに追加します。

関連情報