14.5. 最適化ゴールの概要
Kafka クラスターを再分散するため、Cruise Control は 最適化ゴール を使用して最適化プロポーザルを生成します。最適化ゴールは、Kafka クラスター全体のワークロード再分散およびリソース使用の制約です。
Red Hat Enterprise Linux 上の AMQ Streams は、Cruise Control プロジェクトで開発されたすべての最適化ゴールをサポートします。以下に、サポートされるゴールをデフォルトの優先度順に示します。
- ラックアウェアネス (Rack Awareness)
- トピックのセットに対するブローカーごとのリーダーレプリカの最小数
- レプリカの容量
- 容量: ディスク容量、ネットワークインバウンド容量、ネットワークアウトバウンド容量
- CPU 容量
- レプリカの分散
- 潜在的なネットワーク出力
- リソース分布: ディスク使用率の分布、ネットワークインバウンド使用率の分布、ネットワークアウトバウンド使用率の分布。
- リーダーへの単位時間あたりバイト流入量の分布
- トピックレプリカの分散
- CPU 使用率の分散
- リーダーレプリカの分散
- 優先リーダーの選択
- Kafka Assigner ディスク使用分布
- ブローカー内ディスク容量
- ブローカー内のディスク使用量
各最適化ゴールの詳細は、Cruise Control Wiki の Goals を参照してください。
Cruise Control プロパティーファイルのゴールの設定
cruise-control/config/
ディレクトリー内の cruisecontrol.properties
ファイルで、最適化ゴールを設定します。必ず満たさなければならないハード最適化ゴールと 、マスターおよび デフォルトの最適化ゴールの設定があります。
任意。ユーザー提供の最適化ゴールは、/rebalance
エンドポイントへのリクエストのパラメーターとしてランタイム時に設定されます。
最適化ゴールは、ブローカーリソースのあらゆる容量制限 の対象となります。
以下のセクションでは、各ゴール設定の詳細を説明します。
マスター最適化ゴール
マスター最適化ゴールはすべてのユーザーが使用できます。マスター最適化ゴールにリストされていないゴールは、Cruise Control 操作で使用できません。
以下のマスター最適化ゴールは、cruisecontrol.properties
ファイルで優先順に goals
プロパティーに事前設定されています。
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
パラメーターをリクエストに追加します。
その他のリソース
- 「Cruise Control の設定」
- Cruise Control Wiki の「Configurations」