21.3. 최적화 제안 생성
KafkaRebalance 리소스를 생성하거나 업데이트할 때 Cruise Control은 최적화 목표 집합을 기반으로 Kafka 클러스터에 대한 최적화 제안을 생성합니다. 최적화 제안에서 정보를 분석하고 승인 여부를 결정합니다. 최적화 제안의 결과를 사용하여 Kafka 클러스터를 재조정할 수 있습니다.
이 절차에서는 리밸런스와 관련된 최적화 제안을 생성하기 위해 다음 모드를 사용하는 방법을 다룹니다.
-
Full(기본값) -
add-brokers -
remove-brokers
사용하는 모드는 Kafka 클러스터에서 이미 실행 중인 모든 브로커 간에 재조정하는지 아니면 Kafka 클러스터를 확장한 후 또는 Kafka 클러스터를 축소하기 전에 재조정해야 하는지에 따라 다릅니다. 자세한 내용은 브로커 스케일링을 사용하여 모드 재조정 을 참조하십시오.
사전 요구 사항
- Apache Kafka 클러스터의 Streams에 Cruise Control을 배포 했습니다.
- 최적화 목표를 구성하고 브로커 리소스에 대한 용량 제한을 선택적으로 구성했습니다.
Cruise Control 구성에 대한 자세한 내용은 21.2절. “Kafka를 사용하여 Cruise Control 배포” 을 참조하십시오.
프로세스
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-e13564f1458c최적화 결과섹션의 속성은 보류 중인 클러스터 재조정 작업을 설명합니다. 각 속성에 대한 설명은 최적화 제안의 콘텐츠를 참조하십시오.
CPU 용량 부족
CPU 사용률 측면에서 Kafka 클러스터가 과부하된 경우 KafkaRebalance 상태에 충분하지 않은 CPU 용량 오류가 표시될 수 있습니다. 이 사용률 값이 excludedTopics 구성의 영향을 받지 않음을 주목할 가치가 있습니다. 최적화 제안서가 제외된 주제의 복제본을 다시 할당하지 않지만, 해당 부하는 여전히 사용률 계산에서 고려됩니다.
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를 사용하는 것과 같습니다. 이 CPU에는 Kafka.spec.kafka.resources.limits.cpu 에 구성된 CPU의 주기가 있습니다. 이는 CPU 사용률과 용량 간의 비율이 동일하게 유지되므로 리밸런스 동작에는 영향을 미치지 않습니다.
다음에 수행할 작업