19.6. 最適化プロポーザルの生成
KafkaRebalance
リソースを作成または更新すると、Cruise Control は 設定済みの 最適化ゴール を基にして、Kafka クラスターの 最適化プロポーザル を生成します。最適化プロポーザルの情報を分析して、プロポーザルを承認するかどうかを決定します。最適化プロポーザルの結果を使用して Kafka クラスターをリバランスできます。
最適化の提案は、次のいずれかのモードで実行できます。
-
full
(デフォルト) -
add-brokers
-
remove-brokers
使用するモードは、Kafka クラスターですでに実行されているすべてのブローカー間で再調整するかどうかによって異なります。または、Kafka クラスターをスケールアップした後またはスケールダウンする前に再調整したい場合。詳細については、ブローカーのスケーリングによるモードの再調整 を参照してください。
前提条件
- Streams for Apache Kafka クラスターに Cruise Control をデプロイ した。
- 最適化ゴールと、必要に応じてブローカーリソースの容量制限を設定した。
Cruise Control の設定の詳細については、「Configuring and deploying Cruise Control with Kafka」 を参照してください。
手順
KafkaRebalance
リソースを作成し、適切なモードを指定します。full
モード(デフォルト)Kafka
リソースに定義された デフォルトの最適化ゴール を使用するには、spec
プロパティーを空のままにします。Cruise Control は、デフォルトでfull
モードで Kafka クラスターを再調整します。デフォルトで完全なリバランスを行う設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: {}
spec.mode
プロパティーでfull
モードを指定して、完全なリバランスを実行することもできます。full
モードを指定した設定例apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: mode: full
add-brokers
モードスケールアップ後に Kafka クラスターを再調整する場合は、
add-brokers
モードを指定します。このモードでは、既存のレプリカが新しく追加されたブローカーに移動されます。ブローカーをリストとして指定する必要があります。
add-brokers
モードを指定した設定例apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: mode: add-brokers brokers: [3, 4] 1
- 1
- スケールアップ操作によって追加された、新しく追加されたブローカーのリスト。このプロパティーは必須です。
remove-brokers
モードスケールダウンする前に Kafka クラスターを再調整する場合は、
remove-brokers
モードを指定します。このモードでは、削除されるブローカーからレプリカが移動されます。削除するブローカーをリストとして指定する必要があります。
remove-brokers
モードを指定した設定例apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: mode: remove-brokers brokers: [3, 4] 1
- 1
- スケールダウン操作によって削除されるブローカーのリスト。このプロパティーは必須です。
注記次の手順と、再調整を承認または停止する手順は、使用している再調整モードに関係なく同じです。
デフォルトのゴールを使用する代わりに ユーザー提供の最適化ゴール を設定するには、
goals
プロパティーを追加し、1 つ以上のゴールを入力します。以下の例では、ラックアウェアネス (Rack Awareness) およびレプリカの容量はユーザー提供の最適化ゴールとして設定されています。
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: goals: - RackAwareGoal - ReplicaCapacityGoal
設定されたハードゴールを無視するには、
skipHardGoalCheck: true
プロパティーを追加します。apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: goals: - RackAwareGoal - ReplicaCapacityGoal skipHardGoalCheck: true
(オプション) 最適化プロポーザルを自動的に承認するには、
strimzi.io/rebalance-auto-approval
アノテーションをtrue
に設定します。apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster annotations: strimzi.io/rebalance-auto-approval: "true" spec: goals: - RackAwareGoal - ReplicaCapacityGoal skipHardGoalCheck: true
リソースを作成または更新します。
oc apply -f <kafka_rebalance_configuration_file>
Cluster Operator は Cruise Control から最適化プロポーザルを要求します。Kafka クラスターのサイズによっては処理に数分かかることがあります。
自動承認メカニズムを使用した場合は、最適化プロポーザルのステータスが
Ready
に変わるまで待ちます。自動承認メカニズムを有効にしていない場合は、最適化プロポーザルのステータスがProposalReady
に変わるまで待ちます。oc get kafkarebalance -o wide -w -n <namespace>
PendingProposal
-
PendingProposal
ステータスは、最適化プロポーザルの準備できているかどうかを確認するために、リバランス Operator が Cruise Control API をポーリングしていることを意味します。 ProposalReady
-
ProposalReady
ステータスは、最適化プロポーザルのレビューおよび承認の準備ができていることを意味します。
ステータスが
ProposalReady
に変わると、最適化プロポーザルを承認する準備が整います。最適化プロポーザルを確認します。
最適化プロポーザルは
KafkaRebalance
カスタムリソースのStatus.Optimization Result
プロパティーに含まれます。oc describe kafkarebalance <kafka_rebalance_resource_name>
最適化プロポーザルの例
Status: Conditions: Last Transition Time: 2020-05-19T13:50:12.533Z Status: ProposalReady Type: State Observed Generation: 1 Optimization Result: Data To Move MB: 0 Excluded Brokers For Leadership: Excluded Brokers For Replica Move: Excluded Topics: Intra Broker Data To Move MB: 0 Monitored Partitions Percentage: 100 Num Intra Broker Replica Movements: 0 Num Leader Movements: 0 Num Replica Movements: 26 On Demand Balancedness Score After: 81.8666802863978 On Demand Balancedness Score Before: 78.01176356230222 Recent Windows: 1 Session Id: 05539377-ca7b-45ef-b359-e13564f1458c
Optimization Result
セクションのプロパティーには、保留クラスターリバランス操作の詳細が表示されます。各プロパティーの説明は、最適化プロポーザルの内容 を参照してください。
CPU 容量が不足している
Kafka クラスターが CPU 使用率の観点から過負荷になっている場合には、 KafkaRebalance
ステータスで CPU 容量が十分でないというエラーが発生する可能性があります。この使用率の値は、excludedTopics
設定の影響を受けないことに注意してください。最適化の提案では、除外されたトピックのレプリカは再割り当てされませんが、負荷は使用率の計算で考慮されます。
CPU 使用率エラーの例
com.linkedin.kafka.cruisecontrol.exception.OptimizationFailureException: [CpuCapacityGoal] Insufficient capacity for cpu (Utilization 615.21, Allowed Capacity 420.00, Threshold: 0.70). Add at least 3 brokers with the same cpu capacity (100.00) as broker-0. Add at least 3 brokers with the same cpu capacity (100.00) as broker-0.
このエラーは、CPU コアの数ではなく、CPU 容量をパーセンテージで示しています。このため、Kafka カスタムリソースで設定された CPU の数に直接マップされません。これは、Kafka.spec.kafka.resources.limits.cpu
で設定された CPU のサイクルを持つ、ブローカーごとに単一の 仮想 CPU を持つようなものです。CPU 使用率と容量の比率は同じであるため、これはリバランスの動作に影響はありません。
次のステップ
関連情報