15.3. 브로커를 제거하기 전에 파티션 재할당
Kafka 클러스터의 브로커 수를 줄이기 전에 kafka-reassign-partitions.sh 툴에서 생성한 재할당 파일을 사용하여 파티션을 다시 할당합니다. 재할당 파일은 Kafka 클러스터의 나머지 브로커에 파티션을 다시 할당하는 방법을 설명해야합니다. 파일에 지정된 재할당을 브로커에 적용한 다음 새 파티션 할당을 확인합니다. 가장 많은 Pod의 브로커가 먼저 제거됩니다.
이 절차에서는 TLS를 사용하는 보안 확장 프로세스를 설명합니다. TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터가 필요합니다.
kafka-reassign-partitions.sh 툴을 사용할 수 있지만 자동 파티션 재할당 및 클러스터 재조정에 Cruise Control을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
감소된 클러스터의 브로커에 파티션을 다시 할당하는 방법을 지정하는 JSON 파일을 생성했습니다.
이 절차에서는
my-topic이라는 주제의 모든 파티션을 다시 할당하고 있습니다.topics.json이라는 JSON 파일은 주제를 지정하고reassignment.json파일을 생성하는 데 사용됩니다.
JSON 파일의 예는 my-topic을 지정합니다.
{
"version": 1,
"topics": [
{ "topic": "my-topic"}
]
}
프로세스
이 작업을 수행하지 않은 경우
kafka-reassign-partitions.sh도구를 사용하여reassignment.json이라는 재할당 JSON 파일을 생성합니다.JSON 파일을 다시 할당하는 명령의 예
/opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --topics-to-move-json-file topics.json \1 --broker-list 0,1,2,3 \2 --generate현재 및 제안된 복제본 할당을 표시하는 재할당 JSON 파일의 예
Current partition replica assignment {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[3,4,2,0],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[0,2,3,1],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[1,3,0,4],"log_dirs":["any","any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,0],"log_dirs":["any","any","any"]}]}나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.
--execute옵션을 사용하여 파티션 재할당을 실행합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute복제를 제한하려면 브로어링된 속도가 초당 바이트 단위로
--throttle옵션을 전달할 수도 있습니다. 예를 들면 다음과 같습니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --throttle 5000000 \ --execute--verify옵션을 사용하여 재할당이 완료되었는지 확인합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify--verify명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막--verify는 또한 reassignment throttles를 제거하는 효과가 있습니다.제거 중인 각 브로커에 해당 로그에 라이브 파티션이 없는지 확인합니다(
log.dirs).ls -l <LogDir> | grep -E '^d' | grep -vE '[a-zA-Z0-9.-]+\.[a-z0-9]+-delete$'로그 디렉터리가 정규식과 일치하지 않는 경우
\.[a-z0-9]-delete$, 활성 파티션이 여전히 존재합니다. 활성 파티션이 있는 경우 재할당이 완료되었는지 또는 재할당 JSON 파일의 구성을 확인합니다. 재할당을 다시 실행할 수 있습니다. 다음 단계로 이동하기 전에 활성 파티션이 없는지 확인합니다.브로커를 중지합니다.
su - kafka /opt/kafka/bin/kafka-server-stop.shKafka 브로커가 중지되었는지 확인합니다.
jcmd | grep kafka