7.6. 生成优化方案
				当您创建或更新 KafkaRebalance 资源时,Cruise Control 会根据配置的 优化 目标为 Kafka 集群生成 优化建议。分析优化方案中的信息,并决定是否批准它。您可以使用优化探测的结果来重新平衡 Kafka 集群。
			
您可以以以下模式之一运行优化方案:
- 
						
full(默认) - 
						
add-brokers - 
						
remove-brokers 
您使用的模式取决于您是否在在 Kafka 集群中运行的所有代理之间进行重新平衡,还是要在扩展或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅 使用代理扩展 重新平衡模式。
先决条件
- 您已将 Cruise Control 部署到 AMQ Streams 集群。
 - 您已配置 优化目标,以及可选的 broker 资源的容量限制。
 
流程
创建
KafkaRebalance资源并指定适当的模式。完整模式(默认)要使用
Kafka资源 中定义的默认优化目标,请将spec属性留空。默认情况下,Cruise Control 重新平衡 Kafka 集群以完全模式。默认有完整重新平衡的配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以通过
spec.mode属性指定完整的模式,运行完整的重新平衡。指定
完整模式的配置示例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
 - 要通过缩减操作删除的代理列表。这个属性是必需的。
 
注意无论使用的重新平衡模式如何,以下步骤以及批准或停止重新平衡的步骤都相同。
要配置 用户提供的优化目标 而不使用默认的目标,请添加
目标属性并输入一个或多个目标。在以下示例中,机架意识和副本容量配置为用户提供的优化目标:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要忽略配置的硬目标,请添加
skipHardGoalCheck: 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 集群的大小。
等待优化提议的状态更改为
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 容量不足。值得注意的是,这种使用率值不受 excludeTopics 配置的影响。虽然优化建议不会重新分配排除主题的副本,但在利用率计算中仍将考虑它们的负载。
				
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 使用率和容量之间的比例保持不变。
				
接下来要执行的操作