14.9. 최적화 제안 생성
/rebalance
엔드포인트에 대한 POST 요청을 수행할 때 Cruise Control은 제공된 최적화 목표에 따라 Kafka 클러스터를 재조정하기 위한 최적화 제안을 생성합니다. 최적화 제안의 결과를 사용하여 Kafka 클러스터를 재조정할 수 있습니다.
다음 끝점 중 하나를 사용하여 최적화 제안을 실행할 수 있습니다.
-
/rebalance
-
/add_broker
-
/remove_broker
사용하는 끝점은 Kafka 클러스터에서 이미 실행 중인 모든 브로커 간에 재조정하는지 아니면 Kafka 클러스터를 확장한 후 또는 Kafka 클러스터를 축소하기 전에 재조정해야 하는지에 따라 다릅니다. 자세한 내용은 브로커 스케일링을 사용하여 끝점 재조정 을 참조하십시오.
최적화 제안은 시험 실행 매개 변수를 제공하고 false
로 설정하지 않는 한 시험 실행으로
생성됩니다. "시험 실행 모드"에서 Cruise Control은 최적화 제안과 예상 결과를 생성하지만 클러스터를 재조정하여 제안을 시작하지는 않습니다.
최적화 제안에서 반환된 정보를 분석하고 승인 여부를 결정할 수 있습니다.
다음 매개변수를 사용하여 끝점에 요청합니다.
dryrun
유형: boolean, default: true
Cruise Control에 최적화 제안만 생성하거나 최적화 제안을 생성하고 클러스터 재조정(false
)을 수행할지 여부를 제어합니다.
dryrun=true
(기본값)인 경우 verbose
매개변수를 전달하여 Kafka 클러스터 상태에 대한 자세한 정보를 반환할 수 있습니다. 여기에는 최적화 제안 전후에 각 Kafka 브로커의 로드 메트릭과 이전 및 이후 값의 차이가 포함됩니다.
excluded_topics
유형: regex
최적화 제안 계산에서 제외할 주제와 일치하는 정규식입니다.
목표
type: 문자열 목록, default: 구성된 default.goals
목록
최적화 제안을 준비하는 데 사용할 사용자 제공 최적화 목표 목록입니다. 목표를 지정하지 않으면 cruisecontrol.properties
파일에 구성된 default.goals
목록이 사용됩니다.
skip_hard_goals_check
유형: boolean, default: false
기본적으로 Cruise Control은 사용자가 제공한 최적화 목표( goals
매개변수에서)에 구성된 모든 하드 목표( hard.goals
)가 포함되어 있는지 확인합니다. 구성된 hard.goals
의 서브 세트가 아닌 목표를 제공하면 요청이 실패합니다.
구성된 hard.goals
를 모두 포함하지 않는 사용자 제공 최적화 목표를 사용하여 최적화 제안을 생성하려면 skip_hard_goals_check
를 true
로 설정합니다.
json
유형: boolean, default: false
Cruise Control 서버에서 반환하는 응답 유형을 제어합니다. 제공되지 않거나 false
로 설정하면 Cruise Control은 명령줄에서 표시되도록 포맷된 텍스트를 반환합니다. 반환된 정보의 요소를 프로그래밍 방식으로 추출하려면 json=true
를 설정합니다. 이렇게 하면 jq
와 같은 툴로 파이프하거나 스크립트 및 프로그램에서 구문 분석할 수 있는 JSON 형식의 텍스트가 반환됩니다.
상세 정보
유형: boolean, default: false
Cruise Control 서버에서 반환하는 응답의 세부 수준을 제어합니다. dryrun=true
와 함께 사용할 수 있습니다.
기타 매개 변수를 사용할 수 있습니다. 자세한 내용은 Cruise Control Wiki 의 REST API 를 참조하십시오.
사전 요구 사항
- Kafka 및 Zoo Cryostat가 실행 중입니다.
- 크루즈 제어가 실행 중입니다.
- (확장의 선택 사항) 리밸런스 에 포함할 호스트에 새 브로커를 설치했습니다.
프로세스
/rebalance
,/add_broker
또는/remove_broker
엔드포인트에 대한 POST 요청을 사용하여 최적화 제안을 생성합니다.기본 목표를 사용하여
/rebalance
에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
캐시된 최적화 제안은 즉시 반환됩니다.
참고NotEnoughValidWindows
가 반환되면 Cruise Control은 최적화 제안을 생성하기 위해 충분한 메트릭 데이터를 기록하지 않았습니다. 몇 분 정도 기다린 후 요청을 다시 보냅니다.지정된 목표를 사용하여
/rebalance
에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
요청이 제공된 목표를 충족하면 캐시된 최적화 제안이 즉시 반환됩니다. 그렇지 않으면 제공된 목표를 사용하여 새로운 최적화 제안이 생성됩니다. 이를 계산하는 데 시간이 오래 걸립니다.
ignore_proposal_cache=true
매개변수를 요청에 추가하여 이 동작을 적용할 수 있습니다.하드 목표 없이 지정된 목표를 사용하여
/rebalance
에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
지정된 브로커를 포함하는
/add_broker
에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'
요청에는 새 브로커의 ID만 포함됩니다. 예를 들어 이 요청은 ID
3
및4
가 있는 브로커를 추가합니다. 복제본은 재조정 시 기존 브로커에서 새 브로커로 이동합니다.지정된 브로커를 제외하는
/remove_broker
에 대한 요청 예curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'
요청에는 제외되는 브로커의 ID가 포함됩니다. 예를 들어 이 요청은 ID
3
및4
가 있는 브로커를 제외합니다. 복제본은 재조정 시 제거되는 브로커에서 다른 기존 브로커로 이동합니다.참고제거 중인 브로커가 제외된 경우 복제본은 계속 이동합니다.
응답에 포함된 최적화 제안을 검토하십시오. 속성은 보류 중인 클러스터 리밸런스 작업을 설명합니다.
이 제안에는 제안된 최적화에 대한 높은 수준의 요약과 각 기본 최적화 목표에 대한 요약과 제안서가 실행된 후 예상되는 클러스터 상태가 포함됩니다.
특히 다음 정보에 유의하십시오.
-
요약
후 클러스터 로드
. 요구 사항을 충족하는 경우 높은 수준의 요약을 사용하여 제안된 변경 사항의 영향을 평가해야 합니다. -
N
inter-broker 복제본 (yMB) 이동
은 브로커 간에 네트워크를 통해 이동할 데이터의 양을 나타냅니다. 값이 클수록 리밸런스 중 Kafka 클러스터에 대한 잠재적인 성능 영향이 커집니다. -
N
intra-broker 복제본(yMB)
은 브로커 자체 내에서 이동할 데이터의 양을 나타냅니다(디스크 간). 값이 클수록 개별 브로커에 대한 잠재적인 성능 영향이 커집니다(n inter-broker 복제본(yMB)보다 적음
). - 리더십 이동 횟수입니다. 이는 리밸런스 중 클러스터 성능에 부정적인 영향을 미칩니다.
-
요약
비동기 응답
Cruise Control REST API 엔드포인트는 기본적으로 10초 후에 시간 초과되지만 제안 생성은 서버에서 계속됩니다. 최근 캐시된 최적화 제안이 준비되지 않았거나 ignore_proposal_cache=true
로 사용자 제공 최적화 목표를 지정한 경우 시간 초과가 발생할 수 있습니다.
나중에 최적화 제안을 검색할 수 있도록 하려면 /rebalance
끝점의 응답 헤더에 제공되는 요청의 고유 식별자를 기록해 두십시오.
curl
을 사용하여 응답을 얻으려면 상세 정보 표시(-v
) 옵션을 지정합니다.
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
다음은 예제 헤더입니다.
* Connected to cruise-control-server (::1) port 9090 (#0)
> POST /kafkacruisecontrol/rebalance HTTP/1.1
> Host: cc-host:9090
> User-Agent: curl/7.70.0
> Accept: /
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 01 Jun 2020 15:19:26 GMT
< Set-Cookie: JSESSIONID=node01wk6vjzjj12go13m81o7no5p7h9.node0; Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201
< Content-Type: text/plain;charset=utf-8
< Cruise-Control-Version: 2.0.103.redhat-00002
< Cruise-Control-Commit_Id: 58975c9d5d0a78dd33cd67d4bcb497c9fd42ae7c
< Content-Length: 12368
< Server: Jetty(9.4.26.v20200117-redhat-00001)
시간 초과 내에 최적화 제안이 준비되지 않은 경우 POST 요청을 다시 제출할 수 있습니다. 이번에는 헤더에 원래 요청의 User-Task-ID
를 포함합니다.
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
다음에 수행할 작업