15.4. 주제의 복제 요소 변경
kafka-reassign-partitions.sh 툴을 사용하여 Kafka 클러스터의 주제 복제 요소를 변경합니다. 이 작업은 재할당 파일을 사용하여 주제 복제본을 변경하는 방법을 설명합니다.
사전 요구 사항
- 기존 Kafka 클러스터입니다.
작업에 포함할 주제를 지정하는 JSON 파일을 생성했습니다.
이 절차에서
my-topic이라는 주제에는 4개의 복제본이 있으며 이를 3으로 줄이고자 합니다.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,4 \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,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3,4],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4,0],"log_dirs":["any","any","any","any"]}]}나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.
reassignment.json을 편집하여 각 파티션에서 복제본을 제거합니다.예를 들어
jq를 사용하여 주제의 각 파티션에 대한 목록의 마지막 복제본을 제거합니다.각 파티션의 마지막 주제 복제본 제거
jq '.partitions[].replicas |= del(.[-1])' reassignment.json > reassignment.json업데이트된 복제본을 표시하는 재할당 파일의 예
{"version":1,"partitions":[{"topic":"my-topic","partition":0,"replicas":[0,1,2],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any","any"]},{"topic":"my-topic","partition":2,"replicas":[2,3,4],"log_dirs":["any","any","any","any"]}]}--execute옵션을 사용하여 topic replica를 변경합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --execute참고브로커에서 복제본을 제거해도 데이터 간 데이터 이동이 필요하지 않으므로 복제를 방해할 필요가 없습니다. 복제본을 추가하는 경우 throttle 속도를 변경해야 할 수 있습니다.
--verify옵션을 사용하여 topic replicas에 대한 변경 사항이 완료되었는지 확인합니다./opt/kafka/bin/kafka-reassign-partitions.sh \ --bootstrap-server localhost:9092 \ --reassignment-json-file reassignment.json \ --verify--verify명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막--verify는 또한 reassignment throttles를 제거하는 효과가 있습니다.bin/kafka-topics.sh명령을--describe옵션과 함께 실행하여 주제 변경 결과를 확인합니다./opt/kafka/bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --describe주제의 복제본 수를 줄이는 결과
my-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 my-topic Partition: 1 Leader: 2 Replicas: 1,2,3 Isr: 1,2,3 my-topic Partition: 2 Leader: 3 Replicas: 2,3,4 Isr: 2,3,4