18.6. 生成优化建议
当您创建或更新 KafkaRebalance
资源时,Cruise Control 会根据配置的 优化目标 为 Kafka 集群生成优化建议。分析优化方案中的信息,并决定是否批准它。您可以使用优化提议的结果来重新平衡 Kafka 集群。
您可以在以下模式之一中运行优化建议:
-
full
(默认) -
add-brokers
-
remove-brokers
您使用的模式取决于您是否在 Kafka 集群中已在运行的所有代理进行重新平衡 ; 或者要在扩展后或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅使用代理扩展重新平衡模式。
先决条件
- 您已将 Cruise Control 部署到 AMQ Streams 集群。
- 您已配置了优化目标,以及(可选)代理资源的容量限制。
有关配置 Cruise Control 的详情,请参考 第 18.5 节 “使用 Kafka 配置和部署 Cruise 控制”。
流程
创建
KafkaRebalance
资源并指定适当的模式。完整
模式(默认)要使用
Kafka
资源中定义的 默认优化目标,请将spec
属性留空。默认情况下,Cruise Control 以full
模式重新平衡 Kafka 集群。默认具有完整重新平衡的配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以通过
spec.mode
属性指定full
模式来运行完整的重新平衡。指定
full
模式的配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow add-brokers
模式如果要在扩展后重新平衡 Kafka 集群,请指定
add-brokers
模式。在这个模式中,现有副本被移到新添加的代理中。您需要将代理指定为列表。
指定
add-brokers
模式的配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 扩展操作添加的新添加的代理列表。此属性是必需的。
remove-brokers
模式如果要在缩减前重新平衡 Kafka 集群,请指定
remove-brokers
模式。在这个模式中,副本将从要删除的代理中移出。您需要指定作为列表删除的代理。
指定
remove-brokers
模式的配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 缩减操作要删除的代理列表。此属性是必需的。
注意无论您使用的重新平衡模式如何,以下步骤和批准或停止重新平衡的步骤都相同。
要配置 用户提供的优化目标,而不是使用默认目标,请添加
goals
属性并输入一个或多个目标。在以下示例中,机架感知和副本容量配置为用户提供的优化目标:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要忽略配置的硬目标,请添加
skipHardGoalCheck: true
属性:Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)要自动批准优化提议,请将
strimzi.io/rebalance-auto-approval
注解设置为true
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建或更新资源:
oc apply -f <kafka_rebalance_configuration_file>
oc apply -f <kafka_rebalance_configuration_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cluster Operator 从 Cruise Control 请求优化提议。这可能需要几分钟时间,具体取决于 Kafka 集群的大小。
如果您使用自动批准机制,请等待优化提议的状态更改为
Ready
。如果您没有启用自动批准机制,请等待优化提议的状态更改为ProposalReady
:oc get kafkarebalance -o wide -w -n <namespace>
oc get kafkarebalance -o wide -w -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PendingProposal
-
PendingProposal
状态意味着重新平衡 Operator 正在轮询 Cruise Control API 来检查优化提议是否就绪。 ProposalReady
-
ProposalReady
状态表示优化提议已准备好审核和批准。
当状态变为
ProposalReady
时,优化提议可以批准。查看优化方案。
优化建议包含在
KafkaRebalance
资源的Status.Optimization Result
属性中。oc describe kafkarebalance <kafka_rebalance_resource_name>
oc describe kafkarebalance <kafka_rebalance_resource_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 优化提议示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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.
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 使用率和容量的比率保持不变。
接下来要做什么