21장. 클러스터 재조정에 Cruise Control 사용
cruise Control은 다음을 수행하여 클러스터 리소스 사용을 최적화하는 데 도움이 되도록 Kafka와 함께 실행되도록 설계된 오픈 소스 애플리케이션입니다.
- 클러스터 워크로드 모니터링
- 사전 정의된 제약 조건을 기반으로 파티션 재조정
크루즈 제어 작업은 브로커를 보다 효율적으로 사용하는 균형 있는 Kafka 클러스터를 실행하는 데 도움이 됩니다.
Kafka 클러스터가 진화함에 따라 일부 브로커는 과소 활용되지 않고 일부 브로커는 과부하될 수 있습니다. 크루즈 컨트롤은 구성 가능한 최적화 목표에 따라 분산 파티션 할당을 승인하거나 거부할 수 있는 최적화 제안을 포함하여 복제 수준에서 리소스 사용률을 모델링하여 이러한 불균형을 해결합니다.
최적화 제안은 KafkaRebalance 리소스를 사용하여 구성 및 생성됩니다. 최적화 제안이 자동으로 또는 수동으로 승인되도록 주석을 사용하여 리소스를 구성할 수 있습니다.
Apache Kafka용 스트림은 Cruise Control에 대한 구성 파일 예제 를 제공합니다.
21.1. 크루즈 컨트롤 구성 요소 및 기능 링크 복사링크가 클립보드에 복사되었습니다!
크루즈 컨트롤은 네 가지 주요 구성 요소로 구성됩니다.
- 로드 모니터
- 로드 모니터는 메트릭을 수집하고 클러스터 워크로드 데이터를 분석합니다.
- Analyzer
- Analyzer는 수집된 데이터와 구성된 목표에 따라 최적화 제안을 생성합니다.
- anomaly Detector
- anomaly Detector는 클러스터 동작의 불규칙성을 식별하고 보고합니다.
- executor
- executor는 승인된 최적화 제안을 클러스터에 적용합니다.
- REST API
cruise Control은 클라이언트 상호 작용을 위한 REST API를 제공합니다. 이 API는 Apache Kafka용 Streams가 이러한 기능을 지원하는 데 사용됩니다.
- 최적화 목표에서 최적화 제안 생성
- 최적화 제안을 기반으로 Kafka 클러스터 재조정
- 주제 복제 요소 변경
- JBOD 디스크 간에 파티션 재할당
크루즈 제어 자동 복구는 지원되지 않습니다. 알림 및 사용자 지정 목표는 사용자 지정을 통해 도입될 수 있습니다. 예를 들어, Apache Kafka Kafka 이미지의 Streams를 기반으로 사용자 지정 이미지에 적절한 JAR 파일을 포함하여 anomaly notifier 또는 사용자 지정 목표를 추가할 수 있습니다.
21.1.1. 최적화 목표 링크 복사링크가 클립보드에 복사되었습니다!
최적화 목표는 브로커 간에 주제 복제본을 균등하게 배포하는 등 재조정을 위한 목표를 정의합니다.
다음과 같이 분류됩니다.
- 지원되는 목표는 작업에 사용할 수 있는 Cruise Control 인스턴스에서 지원하는 목표 목록입니다. 기본적으로 이 목록에는 Cruise Control에 포함된 모든 목표가 포함됩니다. 기본 또는 하드 목표와 같은 다른 카테고리에서 사용하려면 먼저 지원되는 목표에 나열되어야 합니다. 목적 사용을 방지하려면 이 목록에서 제거하십시오.
- 하드 목표는 사전 설정되었으며 성공적으로 제안서에 만족해야 합니다.
- 소프트 목표는 모든 하드 목표를 충족하는 경우 제안이 생성되는 것을 방지하지 않고 최적화 중에 우선 순위를 매기는 목표를 사전 설정합니다.
- 기본 목표는 제안을 생성할 때 기본적으로 사용되는 목표를 나타냅니다. 사용자가 구체적으로 설정하지 않는 한 지원되는 목표와 일치합니다.
- 제안별 목표는 특정 제안에 대해 구성된 지원 대상의 하위 집합입니다.
Kafka 및 KafkaRebalance 사용자 정의 리소스에서 최적화 목표를 구성합니다.
지원, 하드 및 기본 목표에 대한
Kafka리소스입니다.-
지원되는 목표:
Kafka.spec.cruiseControl.config.goals -
하드 목적:
Kafka.spec.cruiseControl.config.hard.goals -
기본 목표:
Kafka.spec.cruiseControl.config.default.goals
-
지원되는 목표:
제안별 목표를 위한
KafkaRebalance리소스.-
제안별 목표:
KafkaRebalance.spec.goals
-
제안별 목표:
21.1.1.1. 지원되는 목표 링크 복사링크가 클립보드에 복사되었습니다!
지원되는 목표는 사전 정의되어 있으며 Cruise Control 최적화 제안을 생성하는 데 사용할 수 있습니다. 지원되는 목표로 나열되지 않은 목표는 Cruise Control 작업에서 사용할 수 없습니다. 지원되는 일부 목표는 하드 목표로 사전 설정됩니다.
Kafka.spec.cruiseControl.config.goals 에서 지원되는 목표를 구성합니다.
-
상속된 지원되는 목표를 수용하려면
goals속성을 생략합니다. -
지원되는 목표를 수정하려면 목표 속성의 내림차순 우선 순위 순서로
목표를지정합니다.
21.1.1.2. 하드 및 소프트 목적 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안이 생성되려면 하드 목표를 충족해야 합니다. 소프트 목표는 Cruise Control이 모든 하드 목표를 충족 한 후 달성하려고하는 가장 좋은 목표입니다. 하드 및 소프트 목표의 분류는 크루즈 제어 코드에서 수정되며 변경할 수 없습니다.
크루즈 컨트롤은 먼저 하드 목표를 충족하는 우선 순위를 지정한 다음 나열된 순서대로 소프트 목표를 해결합니다. 모든 하드 목표를 충족하는 제안은 일부 소프트 목표를 위반하더라도 유효합니다.
예를 들어 소프트 목표는 주제의 복제본을 균등하게 배포하는 것입니다. 크루즈 컨트롤은 소프트 목표를 완전히 충족하지 않더라도 최적화 제안을 계속 생성합니다.
Kafka.spec.cruiseControl.config.hard.goals 를 사용하여 Cruise Control 배포에서 하드 목표를 구성합니다.
-
모든 하드 목표를 적용하려면
hard.goals속성을 생략합니다. -
하드 목표를 지정하려면
hard.goals에 나열하십시오. -
하드 목표를 제외하려면
default.goals또는hard.goals가 없는지 확인하십시오.
구성된 하드 목표 수를 늘리면 Cruise Control이 최적화 제안을 생성할 가능성을 줄일 수 있습니다.
21.1.1.3. 기본 목표 링크 복사링크가 클립보드에 복사되었습니다!
cruise Control은 기본 목표를 사용하여 최적화 제안을 생성합니다.
default.goals 가 Cruise Control 배포 구성에 지정되지 않은 경우 Apache Kafka의 Streams는 목표에 지정된 지원 대상 목록에 default.goals 를 구성합니다.
그런 다음 지원되는 이 목표 목록을 기반으로 최적화 제안이 생성되고 캐시됩니다.
Kafka.spec.cruiseControl.config.default.goals 에서 기본 목표를 구성합니다.
-
지원되는 목표를 기본값으로 사용하려면
default.goals속성을 생략합니다. -
기본 목표를 수정하려면
default.goals속성에서 지원되는 목표의 하위 집합을 지정합니다.
기본 목표 구성에서 우선순위 순서를 조정할 수 있습니다.
21.1.1.4. 제안별 목표 링크 복사링크가 클립보드에 복사되었습니다!
제안별 최적화 목표는 특정 목표 목록을 기반으로 최적화 제안을 작성할 수 있도록 지원합니다. KafkaRebalance 리소스에 제안 특정 목표를 설정하지 않으면 기본 목표를 사용합니다.
사용자 지정에 지원되는 최적화 목표의 하위 집합을 지정하여 KafkaRebalance.spec.goals 에서 제안별 목표를 구성합니다.
예를 들어 단일 제안별 목표를 정의하여 디스크 용량 또는 사용률을 고려하지 않고 Kafka 클러스터에서 주제 리더 복제본 배포를 최적화할 수 있습니다.
21.1.1.5. 우선 순위의 목표 순서 링크 복사링크가 클립보드에 복사되었습니다!
Cruise Control 배포 구성 을 변경하지 않는 한, Apache Kafka의 Streams는 Cruise Control의 목표를 내림차순으로 상속합니다.
다음 목록은 Cruise Control에서 Stream for Apache Kafka에서 상속하는 지원되는 목표를 내림차순으로 보여줍니다. 하드로 레이블이 지정된 목표는 최적화 제안서에 충족해야 하는 필수 제약 조건입니다.
-
RackAwareGoal(하드) -
MinTopicLeadersPerBrokerGoal(하드) -
ReplicaCapacityGoal(하드) -
DiskCapacityGoal(하드) -
NetworkInboundCapacityGoal(하드) -
NetworkOutboundCapacityGoal(하드) -
CpuCapacityGoal(하드) -
ReplicaDistributionGoal -
PotentialNwOutGoal -
DiskUsageDistributionGoal -
NetworkInboundUsageDistributionGoal -
NetworkOutboundUsageDistributionGoal -
CpuUsageDistributionGoal -
TopicReplicaDistributionGoal -
LeaderReplicaDistributionGoal -
LeaderBytesInDistributionGoal -
PreferredLeaderElectionGoal -
IntraBrokerDiskCapacityGoal(하드) -
IntraBrokerDiskUsageDistributionGoal
리소스 배포 목표는 브로커 리소스에 대한 용량 제한 의 적용을 받습니다.
각 최적화 목표에 대한 자세한 내용은 Cruise Control Wiki의 목표를 참조하십시오.
기본 및 하드 목표에 대한 Kafka 구성의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
annotations:
strimzi.io/node-pools: enabled
strimzi.io/kraft: enabled
spec:
kafka:
# ...
entityOperator:
topicOperator: {}
userOperator: {}
cruiseControl:
brokerCapacity:
inboundNetwork: 10000KB/s
outboundNetwork: 10000KB/s
config:
#`default.goals` (superset) must also include all `hard.goals` (subset)
default.goals: >
com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
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
hard.goals: >
com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
# ...
지원되는 목표 (default.goals ) 및 ( skipHardGoalCheck 가 true로 설정되지 않은 경우) 제안 특정 spec.goals 에 지정된 모든 하드 목표를 포함하여 최적화 제안을 생성할 때 오류를 피하기 위해 hard.goals 가 포함되어 있는지 확인합니다. 하드 목표는 지원, 기본값 및 제안 특정 목표에 하위 집합으로 포함되어야 합니다.
제안별 목표를 위한 KafkaRebalance 구성의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaRebalance
metadata:
name: my-rebalance
labels:
strimzi.io/cluster: my-cluster
spec:
goals:
- RackAwareGoal
- TopicReplicaDistributionGoal
skipHardGoalCheck: true
21.1.1.6. 하드 목표 검사를 건너뛰기 링크 복사링크가 클립보드에 복사되었습니다!
skipHardGoalCheck: true 가 KafkaRebalance 사용자 정의 리소스에 지정된 경우 Cruise Control은 제안 특정 목표에 구성된 모든 하드 목표를 포함하는지 확인하지 않습니다. 이를 통해 최적화 제안을 더 유연하게 생성할 수 있지만 모든 어려운 목표를 충족하지 않는 제안이 발생할 수 있습니다.
그러나 제안 특정 목표에 포함된 모든 하드 목표는 skipHardGoalCheck: true 를 사용하여 Cruise Control의 어려운 목표로 계속 처리됩니다.
21.1.2. 최적화 제안 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안은 정의된 최적화 목표에 따라 제안된 변경 사항에 대한 요약이며 특정 우선 순위순으로 평가됩니다. 제안을 승인하거나 거부하고 필요한 경우 조정된 목표를 사용하여 재실행할 수 있습니다.
Apache Kafka용 Streams에서 사용하기 위해 Cruise Control을 배포하면 최적화 제안을 생성하고 승인하는 프로세스는 다음과 같습니다.
-
최적화 목표 및 특정 구성을 지정하는
KafkaRebalance리소스를 생성합니다. 이 리소스는 Cruise Control을 트리거하여 최적화 제안 생성 프로세스를 시작합니다. -
Cruise Control Metrics Reporter는 모든 Kafka 브로커에서 실행되며 원시 메트릭을 수집하고 전용 Kafka 주제(
strimzi.cruisecontrol.metrics)에 게시합니다. 브로커, 주제 및 파티션의 메트릭은 Cruise Control이 배포될 때 자동으로 생성된 다른 항목에 집계, 샘플링 및 저장됩니다. - 로드 모니터는 Analyzer 및 Anomaly Detector에서 사용하는 CPU, 디스크 및 네트워크 사용률 데이터를 포함하여 워크로드 모델로메트릭을 수집, 처리 및 저장합니다.
- anomaly Detector는 Kafka 클러스터의 상태 및 성능을 지속적으로 모니터링하여 클러스터 안정성에 영향을 줄 수 있는 브로커 오류 또는 디스크 용량 문제와 같은 문제를 확인합니다.
-
Analyzer는 로드 모니터에서 워크로드 모델을 기반으로 최적화 제안을 생성합니다. 구성된 목표와 용량을 기반으로 브로커 간에 파티션의 균형을 조정하기 위한 최적화 제안을 생성합니다. REST API를 통해 제안에 대한 요약이
KafkaRebalance리소스의 상태에 반영됩니다. - 최적화 제안은 클러스터 관리 목표에 따라 승인되거나 거부됨(수동 또는 자동으로)됩니다.
- 승인되면 Executor는 최적화 제안을 적용하여 Kafka 클러스터를 재조정합니다. 여기에는 승인된 제안에 따라 브로커 간에 파티션 및 재분산 워크로드를 다시 할당해야 합니다.
그림 21.1. 크루즈 제어 최적화 프로세스
최적화 제안에는 파티션 재할당 매핑 목록이 포함됩니다. 제안을 승인하면 Cruise Control 서버에서 이러한 파티션 재할당을 Kafka 클러스터에 적용합니다.
파티션 재할당은 다음 작업 유형 중 하나로 구성됩니다.
파티션 이동: 파티션 복제본과 해당 데이터를 새 위치로 전송합니다. 파티션 모음은 다음 두 가지 형식 중 하나를 수행할 수 있습니다.
- 브랜드 간 이동: 파티션 복제본이 다른 브로커의 로그 디렉터리로 이동됩니다.
- Intra-broker 이동: 파티션 복제본은 동일한 브로커의 다른 로그 디렉터리로 이동합니다.
- 리더십 이동: 파티션의 리더를 전환하여 파티션의 리더를 전환시킵니다.
cruise Control은 배치로 Kafka 클러스터에 파티션 재할당을 발행합니다. 리밸런스 중 클러스터 성능은 각 배치에 포함된 각 유형의 이동 횟수와 크기에 따라 영향을 받습니다.
21.1.2.1. 재조정 모드 링크 복사링크가 클립보드에 복사되었습니다!
리밸런스에 대한 제안은 KafkaRebalance 사용자 정의 리소스의 spec.mode 속성을 사용하여 지정하는 네 가지 모드로 생성할 수 있습니다.
전체모드-
전체모드는 클러스터의 모든 브로커에서 복제본을 이동하여 전체 재조정을 실행합니다.spec.mode속성이KafkaRebalance사용자 정의 리소스에 정의되지 않은 경우 기본 모드입니다. add-brokers모드-
add-brokers모드는 하나 이상의 브로커를 추가하여 Kafka 클러스터를 확장한 후 사용됩니다. 일반적으로 Kafka 클러스터를 확장한 후 새 브로커는 새로 생성된 주제의 파티션만 호스팅하는 데 사용됩니다. 새 항목이 생성되지 않으면 새로 추가된 브로커가 사용되지 않고 기존 브로커가 동일한 부하에 남아 있습니다. 클러스터에 브로커를 추가한 직후add-brokers모드를 사용하면 재조정 작업이 기존 브로커에서 새로 추가된 브로커로 복제본이 이동합니다.KafkaRebalance사용자 정의 리소스의spec.brokers속성을 사용하여 새 브로커를 목록으로 지정합니다. remove-brokers모드-
remove-brokers모드는 하나 이상의 브로커를 제거하여 Kafka 클러스터를 축소하기 전에 사용됩니다.remove-brokers모드는 제거할 브로커에서 복제본을 이동합니다. 이러한 브로커가 더 이상 복제본을 호스팅하지 않으면 축소 작업을 안전하게 실행할 수 있습니다. 제거 중인 브로커는KafkaRebalance사용자 정의 리소스의spec.brokers속성에서 목록으로 지정합니다. remove-disks모드-
remove-disks모드는 특히 동일한 브로커의 스토리지에 사용되는 JBOD 디스크 간에 파티션을 다시 할당하는 데 사용됩니다. 파티션 재할당을 위해 해당 볼륨 ID로 브로커 ID 목록을 지정합니다.
일반적으로 전체 리밸런스 모드를 사용하여 브로커 간에 부하를 분산하여 Kafka 클러스터를 재조정합니다. 클러스터를 확장하거나 축소하고 그에 따라 복제본을 재조정하려는 경우에만 add-brokers 및 remove-brokers 모드를 사용합니다.
리밸런스를 실행하는 절차는 세 가지 모드에서 실제로 동일합니다. 유일한 차이점은 spec.mode 속성을 통해 모드를 지정하고 필요한 경우 spec.brokers 속성을 통해 추가되거나 제거될 브로커 목록을 지정하는 것입니다.
21.1.2.2. 최적화 제안의 결과 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안이 생성되면 요약 및 브로커 로드가 반환됩니다.
- 요약
-
요약은
KafkaRebalance리소스에 포함되어 있습니다. 요약은 제안된 클러스터 리밸런스에 대한 개요를 제공하고 관련 변경 사항의 규모를 나타냅니다. 성공적으로 생성된 최적화 제안 요약은KafkaRebalance리소스의Status.optimizationResult속성에 포함되어 있습니다. 제공되는 정보는 전체 최적화 제안에 대한 요약입니다. - 브로커 로드
- 브로커 로드는 데이터를 JSON 문자열로 포함하는 ConfigMap에 저장됩니다. 브로커 로드는 제안된 리밸런스에 대한 값 전후에 표시되므로 클러스터의 각 브로커에 미치는 영향을 확인할 수 있습니다.
21.1.2.3. 최적화 제안을 수동으로 승인 또는 거부 링크 복사링크가 클립보드에 복사되었습니다!
최적화 제안 요약은 제안된 변경 범위를 보여줍니다.
KafkaRebalance 리소스의 이름을 사용하여 명령줄에서 요약을 반환할 수 있습니다.
최적화 제안 요약 반환
oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>
jq 명령줄 JSON 구문 분석 도구를 사용할 수도 있습니다.
jq를 사용하여 최적화 제안 결과 반환
oc get kafkarebalance <kafka_rebalance_resource_name> -n <namespace> -o json | jq '.status.optimizationResult'
요약을 사용하여 최적화 제안을 승인하거나 거부할지 여부를 결정합니다.
- 최적화 제안 승인
-
승인하도록
KafkaRebalance리소스의strimzi.io/rebalance주석을 설정하여 최적화 제안을승인합니다. 크루즈 컨트롤은 이 제안을 Kafka 클러스터에 적용하고 클러스터 재조정 작업을 시작합니다. - 최적화 제안 거부
-
최적화 제안을 승인하지 않도록 선택하는 경우 최적화 목표를 변경하거나 성능 튜닝 옵션을 재조정 한 다음 다른 제안을 생성할 수 있습니다.
strimzi.io/rebalance주석을새로 고침하도록 설정하여KafkaRebalance리소스에 대한 새로운 최적화 제안을 생성할 수 있습니다.
재조정에 필요한 효과를 평가하기 위해 최적화 제안을 사용하십시오. 예를 들어 요약은broker 및 intra-broker 이동을 설명합니다. 브랜드 간 리밸런스(broker)는 별도의 브로커 간에 데이터를 리밸런싱합니다. Intra-broker 재조정은 JBOD 스토리지 구성을 사용할 때 동일한 브로커의 디스크 간에 데이터를 이동합니다. 이러한 정보는 귀하가 진행하지 않고 제안을 승인하더라도 유용할 수 있습니다.
재조정할 때 Kafka 클러스터에서 추가 로드로 인해 최적화 제안을 거부하거나 승인을 지연할 수 있습니다. 제안서가 너무 오래 지연되면 클러스터 부하가 크게 변경될 수 있으므로 새로운 제안을 요청하는 것이 더 좋습니다.
다음 예에서 제안서는 별도의 브로커 간 데이터 재조정을 제안합니다. 리밸런스에는 브로커 간에 총 12MB의 데이터가 있는 55 파티션 복제본의 이동이 포함됩니다. 이 제안은 24 개의 파티션 리더를 다른 브로커로 이동합니다. 이를 위해서는 성능에 낮은 영향을 미치는 클러스터 메타데이터를 변경해야 합니다.
균형 잡힌 점수는 최적화 제안이 승인되기 전과 후에 Kafka 클러스터의 전체 균형에 대한 측정입니다. 균형 잡힌 점수는 최적화 목표를 기반으로합니다. 모든 목표를 충족하면 점수는 100입니다. 달성되지 않는 각 목표의 점수가 줄어듭니다. 균형 잡힌 점수를 비교하여 Kafka 클러스터가 리밸런스를 팔로우할 수 있는 것보다 더 적은지 확인합니다.
최적화 제안 요약 예
Name: my-rebalance
Namespace: myproject
Labels: strimzi.io/cluster=my-cluster
Annotations: API Version: kafka.strimzi.io/v1alpha1
Kind: KafkaRebalance
Metadata:
# ...
Status:
Conditions:
Last Transition Time: 2022-04-05T14:36:11.900Z
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: 12
Monitored Partitions Percentage: 100
Num Intra Broker Replica Movements: 0
Num Leader Movements: 24
Num Replica Movements: 55
On Demand Balancedness Score After: 82.91290759174306
On Demand Balancedness Score Before: 78.01176356230222
Recent Windows: 5
Session Id: a4f833bd-2055-4213-bfdd-ad21f95bf184
파티션 복제본 간 이동은 성능에 큰 영향을 미치지만 총 데이터 양이 크지 않습니다. 총 데이터가 훨씬 큰 경우 제안서를 거부하거나 Kafka 클러스터 성능에 미치는 영향을 제한하기 위해 리밸런스를 승인하는 시간을 거부할 수 있습니다.
성능 튜닝 옵션을 재조정 하면 데이터 이동의 영향을 줄이는 데 도움이 될 수 있습니다. 리밸런스 기간을 연장할 수 있는 경우 리밸런스를 작은 일괄 처리로 나눌 수 있습니다. 한 번에 데이터 이동이 줄어들어 클러스터의 부하를 줄일 수 있습니다.
21.1.2.4. 최적화 제안 요약 속성 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에서는 최적화 제안의 요약에 포함된 속성에 대해 설명합니다.
| JSON 속성 | 설명 |
|---|---|
|
| 클러스터 브로커의 디스크 간에 전송할 총 파티션 복제본 수입니다.
리밸런스 작업 중 성능에 미치는 영향: 영구적으로 높지만 |
|
| 아직 지원되지 않습니다. 빈 목록이 반환됩니다. |
|
| 별도의 브로커 간에 이동할 파티션 복제본 수입니다. 리밸런스 작업 중 성능에 미치는 영향: Relatively high. |
|
| 최적화 제안이 생성 되기 전과 후에 Kafka 클러스터의 전반적인 균형을 측정합니다.
점수는 각 분류된 소프트 목표를 100에서 위반하는
|
|
|
동일한 브로커의 디스크 간에 이동할 각 파티션 복제본의 크기 합계
리밸런스 작업 중 성능에 미치는 영향: 변수. 숫자가 클수록 클러스터 리밸런스를 완료하는 데 시간이 오래 걸립니다. 동일한 브로커의 디스크 간에 대량의 데이터를 이동하면 별도의 브로커보다 영향을 덜 받습니다(Data |
|
| 최적화 제안서를 기반으로 하는 메트릭 창 수입니다. |
|
|
별도의 브로커로 이동할 각 파티션 복제본의 크기의 합계입니다 ( 리밸런스 작업 중 성능에 미치는 영향: 변수. 숫자가 클수록 클러스터 리밸런스를 완료하는 데 시간이 오래 걸립니다. |
|
|
최적화 제안에 적용되는 Kafka 클러스터의 파티션 백분율입니다. |
|
|
|
|
| 리더가 다른 복제본으로 전환될 파티션의 수입니다. 리밸런스 작업 중 성능에 미치는 영향: Relatively low. |
|
| 아직 지원되지 않습니다. 빈 목록이 반환됩니다. |
21.1.2.5. 최적화 제안 자동 승인 링크 복사링크가 클립보드에 복사되었습니다!
시간을 절약하기 위해 최적화 제안 승인 프로세스를 자동화할 수 있습니다. 자동화를 사용하면 최적화 제안을 생성할 때 클러스터 재조정으로 바로 들어갑니다.
최적화 제안 자동 승인 메커니즘을 활성화하려면 strimzi.io/rebalance-auto-approval 주석이 true 로 설정된 KafkaRebalance 리소스를 생성합니다. 주석을 설정하지 않거나 false 로 설정하면 최적화 제안에 수동 승인이 필요합니다.
자동 승인 메커니즘을 사용하여 리밸런스 요청의 예
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:
mode: # any mode
# ...
최적화 제안을 자동으로 승인할 때 상태를 확인할 수 있습니다. 리밸런스가 완료되면 KafkaRebalance 리소스의 상태가 Ready 로 이동합니다.
21.1.2.6. 브로커 로드 데이터 비교 링크 복사링크가 클립보드에 복사되었습니다!
브로커 로드 데이터는 재조정에 따른 리소스의 현재 및 예상 사용량에 대한 통찰력을 제공합니다. 데이터는 JSON 형식 문자열과 KafkaRebalance 리소스와 동일한 이름으로 ConfigMap 에 저장됩니다.
Kafka 리밸런스 제안서가 ProposalReady 상태에 도달하면 Streams for Apache Kafka는 Cruise Control에서 생성된 브로커 지표의 JSON 문자열이 포함된 ConfigMap ( KafkaRebalance 사용자 정의 리소스 뒤에 이름이 지정됨)을 생성합니다. 각 브로커에는 다음 세 가지 값으로 표시되는 주요 지표 세트가 있습니다.
- 최적화 제안이 적용되기 전의 현재 메트릭 값
- 제안서를 적용한 후 예상되는 메트릭 값
- 두 값의 차이점 (이전에서 - )
이 ConfigMap 은 리밸런스가 완료된 후에도 액세스할 수 있습니다.
명령줄에서 이 데이터를 보려면 ConfigMap 이름을 사용합니다.
ConfigMap 데이터 반환
oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
jq 명령줄 JSON 구문 분석 도구를 사용하여 JSON 문자열을 추출할 수도 있습니다.
jq를 사용하여 ConfigMap에서 JSON 문자열 추출
oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
| JSON 속성 | 설명 |
|---|---|
|
| 파티션 리더인 이 브로커의 복제본 수입니다. |
|
| 이 브로커의 복제본 수입니다. |
|
| 정의된 용량의 백분율로 CPU 사용률입니다. |
|
| 정의된 용량의 백분율로 디스크 사용률입니다. |
|
| 절대 디스크 사용량(MB)입니다. |
|
| 브로커의 총 네트워크 출력 비율입니다. |
|
| 이 브로커의 모든 파티션 리더 복제본의 네트워크 입력 비율입니다. |
|
| 이 브로커의 모든 후속 복제본의 네트워크 입력 비율입니다. |
|
| 이 브로커가 현재 호스팅되는 모든 복제본의 리더가 되는 경우 실현 가능한 최대 네트워크 출력 비율입니다. |
21.1.2.7. 캐시된 제안 새로 고침 속도 조정 링크 복사링크가 클립보드에 복사되었습니다!
cruise Control은 구성된 기본 최적화 목표에 따라 캐시된 최적화 제안을 유지합니다. 이 제안은 워크로드 모델에서 생성되며 Kafka 클러스터의 현재 상태를 반영하도록 15분마다 업데이트됩니다. 기본 목표를 사용하여 최적화 제안을 생성할 때 Cruise Control은 최신 캐시된 버전을 반환합니다.
워크로드가 빠르게 변경되는 클러스터의 경우 새로 고침 간격을 단축하여 최적화 제안이 최신 상태를 반영하도록 할 수 있습니다. 그러나 간격을 줄이면 Cruise Control 서버의 부하가 증가합니다. 새로 고침 속도를 조정하려면 Cruise Control 배포 구성에서 proposal.expiration.ms 설정을 수정합니다.
21.1.3. 리밸런스 튜닝 옵션 링크 복사링크가 클립보드에 복사되었습니다!
구성 옵션을 사용하면 클러스터 재조정 성능을 미세 조정할 수 있습니다. 이러한 설정은 파티션 복제본 및 리더십의 이동과 재조정을 위해 할당된 대역폭을 제어합니다.
21.1.3.1. 복제본 이동 전략 선택 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 리밸런스 성능은 파티션 재할당 명령의 배치에 적용되는 복제본 이동 전략 의 영향을 받습니다. 기본적으로 Cruise Control은 BaseReplica CryostatmentStrategy 를 사용하여 생성된 순서대로 재할당을 적용합니다. 그러나 이 전략은 대규모 파티션 재할당이 생성된 경우 다른 파티션 재할당이 지연될 수 있습니다.
cruise Control은 최적화 제안에 적용할 수 있는 네 가지 대체 복제본 이동 전략을 제공합니다.
-
PrioritizeSmallReplica CryostatmentStrategy: 작은 파티션을 먼저 다시 할당합니다. -
PrioritizeLargeReplica CryostatmentStrategy: 더 큰 파티션을 먼저 다시 할당합니다. -
PostponeUrpReplica>-<mentStrategy: 동기화되지 않은 복제본 없이 파티션 우선 순위를 지정합니다. -
PrioritizeMinIsrWithOfflineReplicasStrategy: 오프라인 복제본을 사용하여 최소 in-sync 복제본(MinISR)보다 작거나 같은 파티션의 재할당을 우선합니다.
Kafka리소스에서cruiseControl.config.concurrency.adjuster.min.isr.check.enabled를true로 설정하여 이 전략을 활성화합니다.
이러한 전략은 시퀀스로 구성할 수 있습니다. 첫 번째 전략은 내부 논리를 사용하여 두 파티션 재할당을 비교하려고 합니다. 재할당이 동일한 경우 순서에서 다음 전략으로 전달하여 순서를 결정하는 등의 작업을 수행합니다.
21.1.3.2. Intra-broker 디스크 밸런싱 링크 복사링크가 클립보드에 복사되었습니다!
Intra-broker balancing는 JBOD 스토리지 및 여러 디스크를 사용한 배포에 유용합니다. 이러한 유형의 분산은 브루커 간 분산보다 네트워크 오버헤드가 줄어듭니다.
단일 디스크와 함께 JBOD 스토리지를 사용하는 경우 균형을 조정할 디스크가 없으므로 intra-broker 디스크 밸런싱이 0인 제안이 발생합니다.
intra-broker 밸런싱을 활성화하려면 KafkaRebalance.spec 에서 rebalanceDisk 를 true 로 설정합니다. 이 기능이 활성화되면 목표 필드를 지정하지 마십시오. Cruise Control은 브랜드 내 목표를 자동으로 구성하고 브랜드 간 목표를 무시하기 때문입니다. 크루즈 컨트롤은broker와 intra-broker 밸런싱을 동시에 수행하지 않습니다.
21.1.3.3. 리밸런스 튜닝 링크 복사링크가 클립보드에 복사되었습니다!
Cruise Control 또는 개별 리밸런스를 구성할 때 다음과 같은 재조정 튜닝 옵션을 설정할 수 있습니다.
-
Kafka리소스에서Kafka.spec.cruiseControl.config에서 Cruise Control 서버 구성을 설정합니다. -
KafkaRebalance리소스의KafkaRebalance.spec에 제안별 구성을 설정합니다.
| 크루즈 컨트롤 속성 | KafkaRebalance 속성 | 기본 | 설명 |
|---|---|---|---|
|
|
| 5 | 각 파티션 재할당 배치의 최대 구성 요소 수 |
|
|
| 2 | 각 파티션 재할당 배치에서 인트라브러 파티션의 최대 수 |
|
|
| 1000 | 각 파티션 재할당 배치의 최대 파티션 리더십 변경 수 |
|
|
| null (제한 없음) | 파티션 재할당에 할당할 대역폭(초당 바이트 단위) |
|
|
|
|
생성된 제안서에 대해 파티션 재할당 명령이 실행되는 순서를 결정하는 데 사용되는 전략 목록(우선순)입니다. 서버 설정의 경우 전략 클래스의 정규화된 이름으로 쉼표로 구분된 문자열을 사용합니다( 각 클래스 이름 시작에 |
| - |
| false | intra-broker 디스크 밸런싱을 활성화합니다. 이는 동일한 브로커의 디스크 공간 사용률의 균형을 유지합니다. 여러 디스크가 있는 JBOD 스토리지를 사용하는 Kafka 배포에만 적용됩니다. |
기본 설정을 변경하면 리밸런스가 완료하는 데 걸리는 시간과 재조정 중 Kafka 클러스터에 배치된 로드에 영향을 미칩니다. 더 낮은 값을 사용하면 로드가 줄어들지만 사용된 시간이 증가하고 그 반대의 경우도 마찬가지입니다.