7.2. cruise 제어 CPU 사용률 추정
AMQ Streams에 대한 크루즈 컨트롤에는 CPU 사용률 추정 계산과 관련된 알려진 문제가 있습니다. CPU 사용률은 브로커 Pod의 정의된 용량의 백분율로 계산됩니다. 이 문제는 다양한 CPU 코어가 있는 노드에서 Kafka 브로커를 실행할 때 발생합니다. 예를 들어 node1에는 두 개의 CPU 코어가 있을 수 있으며 node2에는 4개의 CPU 코어가 있을 수 있습니다. 이 경우 Cruise Control은 브로커의 CPU 부하를 강조하고 과대 추정할 수 있습니다. 이 문제로 인해 Pod가 부하가 많은 경우 클러스터 재조정을 방지할 수 있습니다.
해결방법
이 문제에는 두 가지 해결방법이 있습니다.
해결방법 1: Equal CPU 요청 및 제한
Kafka.spec.kafka.resources 에서 CPU 제한과 동일한 CPU 요청을 설정할 수 있습니다. 이렇게 하면 모든 CPU 리소스가 미리 예약되며 항상 사용할 수 있습니다. 이 구성을 통해 Cruise Control은 CPU 목표에 따라 리밸런스 제안을 준비할 때 CPU 사용률을 적절하게 평가할 수 있습니다.
해결 방법 2: 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 capacity 를 참조하십시오.