14.9. 最適化プロポーザルの生成
/rebalance
エンドポイントに POST リクエストを行うと、Cruise Control は 最適化プロポーザル を生成して、指定の最適化ゴールを基にして Kafka クラスターをリバランスします。
dryrun
パラメーターが入力され、false
に設定されていない限り、最適化プロポーザルはドライランとして生成されます。「ドライラン」モードでは、Cruise Control は最適化プロポーザルと予測された結果を生成しますが、クラスターをリバランスしてプロポーザルを開始しません。
最適化プロポーザルで返される情報を分析して、プロポーザルを開始するかどうかを判断できます。
以下は、/rebalance
エンドポイントへの要求のキーパラメーターです。使用できるすべてのパラメーターの詳細は、Cruise Control Wiki の「REST APIs」を参照してください。
dryrun
type: boolean、default: true
最適化プロポーザルのみを生成するか(true
)、最適化プロポーザルを生成してクラスターリバランスを行うか、Cruise Control に通知します。false
dryrun=true
(デフォルト)の場合、verbose
パラメーターを渡して、Kafka クラスターの状態に関する詳細情報を返すことができます。これには、最適化プロポーザルの適用前および後の各 Kafka ブローカーの負荷のメトリクスと、before と after 値の違いが含まれます。
excluded_topics
type: regex
最適化プロポーザルの計算から除外するトピックと一致する正規表現。
goals
type: list of strings, default: configured default.goals
list
最適化プロポーザルの準備に使用するユーザー提供の最適化ゴールのリスト。ゴールが指定されない場合、cruisecontrol.properties
ファイルの設定済みの default.goals
リストが使用されます。
skip_hard_goals_check
type: boolean、default: false
デフォルトでは、Cruise Control はユーザー提供の最適化ゴール( goals
パラメーター)に設定済みのハードゴール( hard.goals
)がすべて含まれていることを確認します。設定された hard.goals
のサブセットではないゴールを指定する場合は、リクエストが失敗します。
設定されたすべての hard.goals
を含まないユーザー提供の最適化ゴールで最適化プロポーザルを生成する場合は、skip_hard_goals_check
を true
に設定します。
json
type: boolean、default: false
Cruise Control サーバーによって返される応答の型を制御します。指定されない場合、または false
に設定されている場合、Cruise Control はコマンドラインで表示するためにフォーマットされたテキストを返します。返された情報の要素を抽出する場合は、json=true
を設定します。これにより、jq
などのツールやスクリプトやプログラムで解析できる JSON 形式のテキストが返されます。
verbose
type: boolean、default: false
Cruise Control サーバーによって返される応答の詳細レベルを制御します。dryrun=true
と併用することができます。
前提条件
- Kafka および ZooKeeper が稼働している必要があります。
- Cruise Control が稼働している必要があります。
手順
コンソールに対してフォーマットされた「dry run」最適化プロポーザルを生成するには、POST 要求を
/rebalance
エンドポイントに送信します。設定した
default.goals
を使用するには、以下を実行します。curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
キャッシュされた最適化プロポーザルは即座に返されます。
注記NotEnoughValidWindows
が返されると、Cruise Control は最適化プロポーザルを生成するために十分なメトリクスデータを記録していません。数分待機した後に、リクエストを再送信します。設定された
default.goals
の代わりにユーザー提供の最適化ゴールを指定するには、goals
パラメーターにゴールを 1 つ以上指定します。curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
指定されたゴールを満たす場合、キャッシュされた最適化プロポーザルは即座に返されます。それ以外の場合、指定のゴールを使用して新しい最適化プロポーザルが生成されます。算出にかかる時間が長くなります。この挙動を強制するには、
ignore_proposal_cache=true
パラメーターをリクエストに追加します。設定済みのすべてのハードゴールを含まないユーザー提供の最適化ゴールを指定するには、
skip_hard_goal_check=true
パラメーターをリクエストに追加します。curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
応答に含まれる最適化プロポーザルを確認します。プロパティーは、保留中のクラスターリバランス操作を記述します。
このプロポーザルには、提案された最適化の概要、その後の各デフォルト最適化ゴールのサマリー、およびプロポーザルの実行後に予想されるクラスター状態が含まれます。
以下の情報に注意してください。
-
Cluster load after rebalance
の概要要件を満たす場合は、高レベルの概要を使用して、提案された変更の影響を評価する必要があります。 -
n inter-broker replica (y MB) moves
ブローカー間のネットワーク全体に移動するデータ量を示します。値が高いほど、リバランス中の Kafka クラスターのパフォーマンスに影響する可能性があります。 -
n intra-broker replica (y MB) moves
ブローカー自体(ディスク)内で移動するデータ量を示します。値が大きいほど、個別のブローカーのパフォーマンスに影響する可能性があります(ただしn inter-broker replica (y MB) moves
未満です)。 - リーダーシップの移動の数。これは、リバランス中のクラスターのパフォーマンスに対する影響を与えます。
-
非同期応答
Cruise Control REST API エンドポイントは、デフォルトでは 10 秒後にタイムアウトしますが、プロポーザルの生成はサーバーで続行されます。最新のキャッシュされた最適化プロポーザルの準備ができない場合や、ユーザー提供の最適化ゴールが ignore_proposal_cache=true
で指定された場合にタイムアウトが発生することがあります。
後で最適化プロポーザルを取得できるようにするには、/rebalance
エンドポイントからの応答のヘッダーに指定されるリクエストに固有の識別子を書き留めておきます。
curl
を使用して応答を取得するには、詳細(-v
)オプションを指定します。
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
以下はヘッダーの例です。
* Connected to cruise-control-server (::1) port 9090 (#0)
> POST /kafkacruisecontrol/rebalance HTTP/1.1
> Host: cc-host:9090
> User-Agent: curl/7.70.0
> Accept: /
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 01 Jun 2020 15:19:26 GMT
< Set-Cookie: JSESSIONID=node01wk6vjzjj12go13m81o7no5p7h9.node0; Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201
< Content-Type: text/plain;charset=utf-8
< Cruise-Control-Version: 2.0.103.redhat-00002
< Cruise-Control-Commit_Id: 58975c9d5d0a78dd33cd67d4bcb497c9fd42ae7c
< Content-Length: 12368
< Server: Jetty(9.4.26.v20200117-redhat-00001)
タイムアウト内に最適化プロポーザルが準備状態でない場合は、POST リクエストを再送信できます。これには、ヘッダーの元のリクエストの User-Task-ID
が含まれます。
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
次のステップ