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 를 참조하십시오.