11.6. 生成优化建议
当您创建或更新 KafkaRebalance 资源时,Cruise Control 会根据配置的 优化目标 为 Kafka 集群生成优化建议。分析优化建议中的信息,并决定是否批准它。您可以使用优化提议的结果来重新平衡 Kafka 集群。
您可以在以下模式之一运行优化提议:
-
full(默认) -
add-brokers -
remove-brokers
您使用的模式取决于您是否在 Kafka 集群中已在运行的所有代理重新平衡 ; 或者要在扩展后或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅使用代理扩展重新平衡模式。
先决条件
- 您已将 Cruise Control 部署到 AMQ Streams 集群。
- 您已配置了优化目标,并选择性地对代理资源的容量限制。
有关配置 Cruise Control 的详情,请参考 第 11.5 节 “使用 Kafka 配置和部署 Cruise 控制”。
流程
创建
KafkaRebalance资源并指定适当的模式。完整模式(默认)要使用
Kafka资源中定义的 默认优化目标,请将spec属性留空。默认情况下,Cruise Control 以完整模式重新平衡 Kafka 集群。默认具有完全重新平衡的配置示例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: {}您还可以通过
spec.mode属性指定完整模式来运行完整的重新平衡。指定
完整模式的配置示例apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: name: my-rebalance labels: strimzi.io/cluster: my-cluster spec: mode: fulladd-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属性并输入一个或多个目标。在以下示例中,机架感知和副本容量配置为用户提供的优化目标:
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-e13564f1458cOptimization 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 数量。它像每个代理都有一个 虚拟 CPU,它在 Kafka.spec.kafka.resources.limits.cpu 中配置 CPU 的周期。这不会影响重新平衡行为,因为 CPU 使用率和容量之间的比率保持不变。
接下来要做什么