8.6. 生成优化方案
当您创建或更新 KafkaRebalance 资源时,Cruise Control 会根据配置的 优化 目标为 Kafka 集群生成 优化建议。分析优化方案中的信息,并决定是否批准它。您可以使用优化探测的结果来重新平衡 Kafka 集群。
您可以以以下模式之一运行优化方案:
-
full(默认) -
add-brokers -
remove-brokers
您使用的模式取决于您是否在在 Kafka 集群中运行的所有代理之间进行重新平衡,还是要在扩展或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅使用代理扩展重新平衡模式。
先决条件
- 您已将 Cruise Control 部署到 AMQ Streams 集群。
- 您已配置 优化目标,以及可选的 broker 资源的容量限制。
流程
创建
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
- 要通过缩减操作删除的代理列表。这个属性是必需的。
注意无论使用的重新平衡模式如何,以下步骤以及批准或停止重新平衡的步骤都相同。
要配置 用户提供的优化目标 而不使用默认的目标,请添加
目标属性并输入一个或多个目标。在以下示例中,机架意识和副本容量配置为用户提供的优化目标:
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 容量不足。值得注意的是,这种使用率值不受 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.
该错误以百分比而不是 CPU 内核数显示 CPU 容量。因此,它不会直接映射到 Kafka 自定义资源中配置的 CPU 数量。它类似于每个代理有一个 虚拟 CPU,它有在 Kafka.spec.kafka.resources.limits.cpu 中配置的 CPU 周期。这不会影响重新平衡行为,因为 CPU 使用率和容量之间的比例保持不变。
接下来要执行的操作