7.2. Cruise Control CPU 使用率估算
对 AMQ Streams 的 Cruise Control 存在一个已知问题,与计算 CPU 使用率估算相关。CPU 使用率计算为代理 pod 定义的容量的百分比。当在不同 CPU 内核的节点上运行 Kafka 代理时,会出现这个问题。例如,node1 可能有 2 个 CPU 内核数,node2 可能有 4 个 CPU 内核。在这种情况下,Cruise Control 可能会最小化和排除代理的 CPU 负载。问题可在 pod 负载过重时防止集群重新平衡。
临时解决方案
这个问题有两个临时解决方案。
临时解决方案:Equal CPU 请求和限值
您可以在 Kafka.spec.kafka.resources 中设置 CPU 请求等于 CPU 限值。这样,所有 CPU 资源都会预先保留,且始终可用。此配置允许 Cruise Control 在根据 CPU 目标准备重新平衡建议时正确评估 CPU 利用率。
临时解决方案:排除 CPU 目标
您可以从 Cruise Control 配置中指定的硬和默认目标排除 CPU 目标。
没有 CPU 目标的 Cruise Control 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
# ...
zookeeper:
# ...
entityOperator:
topicOperator: {}
userOperator: {}
cruiseControl:
brokerCapacity:
inboundNetwork: 10000KB/s
outboundNetwork: 10000KB/s
config:
hard.goals: >
com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.MinTopicLeadersPerBrokerGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
default.goals: >
com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.MinTopicLeadersPerBrokerGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.PotentialNwOutGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskUsageDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundUsageDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundUsageDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.TopicReplicaDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderReplicaDistributionGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.LeaderBytesInDistributionGoal
如需更多信息,请参阅 Insufficient CPU 容量。