15.9. 最適化プロポーザルの生成

/rebalance エンドポイントに POST リクエストを送信すると、Cruise Control は提供された最適化ゴールを基にして、Kafka クラスターをリバランスするために最適化プロポーザルを生成します。

dryrun パラメーターが指定され、false に設定されない限り、最適化プロポーザルは ドライラン として生成されます。

その後、ドライラン最適化プロポーザルの情報を分析し、開始するかどうかを決定できます。

以下は、/rebalance エンドポイントへのリクエストに追加できるキーパラメーターです。使用できるすべてのパラメーターに関する詳細は、Cruise Control Wiki の「 REST APIs 」を参照してください。

dryrun

type: boolean、default: true

最適化プロポーザルのみを生成するか(true)、最適化プロポーザルの生成とクラスターリバランス(false)が実行されるか()、Cruise Control に通知します。

excluded_topics

タイプ: regex

最適化プロポーザルの計算から除外するトピックと一致する正規表現。

goals

型: 文字列の一覧、デフォルト: 設定済みの default.goals リスト

最適化プロポーザルの準備に使用するユーザー提供の最適化ゴールのリスト。ゴールが指定されていない場合は、cruisecontrol.properties ファイルに設定済みの default.goals リストが使用されます。

skip_hard_goals_check

型: boolean、default: false

デフォルトでは、Cruise Control はユーザー提供の最適化ゴール( goals パラメーター)に設定済みのハードゴール( hard.goals内)がすべて含まれていることを確認します。設定された hard.goals のサブセットではないゴールを指定すると、リクエストに失敗します。

設定済みのすべての hard.goals が含まれていないユーザー提供の最適化ゴールで最適化プロポーザルを生成する場合は、skip_hard_goals_checktrue に設定します。

json

型: boolean、default: false

Cruise Control サーバーによって返される応答のタイプを制御します。指定されていないか、または false に設定された場合、Cruise Control はコマンドラインに表示されるようにフォーマットされたテキストを返します。返された情報の要素を抽出する場合は、json=true を設定します。これにより、jq などのツールやスクリプトやプログラムで解析できる JSON 形式のテキストが返されます。

verbose

型: boolean、default: false

Cruise Control サーバーによって返される応答の詳細のレベルを制御します。

前提条件

  • Kafka および ZooKeeper が稼働している必要があります。
  • Cruise Control が稼働している必要があります。

手順

  1. コンソールに対してフォーマットされた最適化プロポーザルを生成するには、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'
  2. 応答に含まれる最適化プロポーザルを確認します。プロパティーは、保留中のクラスターリバランス操作を記述します。

    プロポーザルには、提案された最適化の概要が含まれ、その後に各デフォルトの最適化ゴールの概要と、プロポーザルの実行後に想定されるクラスター状態が含まれます。

    以下の情報に特に注意してください。

    • 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未満)でパフォーマンスが低下する可能性があります。
    • リーダーシップの移動数。これは、リバランス中のクラスターのパフォーマンスに悪影響を与える可能性があります。

非同期応答

デフォルトでは 10 秒後に Cruise Control REST API エンドポイントがタイムアウトしますが、プロポーザルの生成はサーバー上で続行されます。キャッシュされた最適化プロポーザルが最新の最適化プロポーザルがない場合や、ユーザー提供の最適化ゴールが 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'