24.5. 파티션 재할당 툴을 사용하여 주제 복제 요소 수정


kafka-reassign-partitions.sh 툴에서 생성한 재할당 파일을 사용하여 주제의 복제 요소를 변경합니다.

이 절차에서는 TLS를 사용하는 보안 프로세스를 설명합니다. TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터가 필요합니다.

참고

이 작업에 kafka-reassign-partitions.sh 툴을 사용할 수 있지만 가장 간단한 방법은 Cruise Control을 활성화하고 KafkaTopic 구성을 통해 변경하는 것입니다. 자세한 내용은 22장. Cruise Control을 사용하여 주제 복제 요소 수정의 내용을 참조하십시오.

사전 요구 사항

  • 내부 TLS 암호화 및 mTLS 인증으로 구성된 Kafka 리소스를 기반으로 실행 중인 Kafka 클러스터가 있어야 합니다.
  • 실행 중인 Kafka 브로커에 연결된 대화형 Pod 컨테이너를 실행하고 있습니다.
  • reassignment.json 이라는 JSON 파일을 다시 생성했습니다.
  • Kafka 클러스터 및 해당 주제를 관리할 수 있는 권한을 지정하는 ACL 규칙으로 구성된 KafkaUser 로 연결되어 있습니다.

JSON 파일 다시 할당을 참조하십시오.

이 절차에서 my-topic 이라는 주제에는 4개의 복제본이 있으며 이를 3으로 줄이고자 합니다. topics.json 이라는 JSON 파일은 주제를 지정하고 reassignment.json 파일을 생성하는 데 사용되었습니다.

JSON 파일의 예는 my-topic을 지정합니다.

{
  "version": 1,
  "topics": [
    { "topic": "my-topic"}
  ]
}

프로세스

  1. 이 작업을 수행하지 않은 경우 대화형 Pod 컨테이너를 실행하여 reassignment.json 이라는 재할당 JSON 파일을 생성합니다.

    현재 및 제안된 복제본 할당을 표시하는 재할당 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"]}]}

    나중에 변경 사항을 복원해야 하는 경우 이 파일의 사본을 로컬에 저장합니다.

  2. reassignment.json 을 편집하여 각 파티션에서 복제본을 제거합니다.

    예를 들어 jq 명령줄 JSON 구문 분석 도구를 사용하여 주제의 각 파티션에 대한 목록의 마지막 복제본을 제거합니다.

    각 파티션의 마지막 주제 복제본 제거

    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"]}]}

  3. reassignment.json 파일을 대화형 Pod 컨테이너에 복사합니다.

    oc cp reassignment.json <interactive_pod_name>:/tmp/reassignment.json

    & lt;interactive_pod_name& gt;을 Pod 이름으로 바꿉니다.

  4. 대화형 pod 컨테이너에서 쉘 프로세스를 시작합니다.

    oc exec -n <namespace> -ti <interactive_pod_name> /bin/bash

    & lt;namespace& gt;를 Pod가 실행 중인 OpenShift 네임스페이스로 바꿉니다.

  5. 대화형 pod 컨테이너에서 kafka-reassign-partitions.sh 스크립트를 사용하여 topic replica를 변경합니다.

    bin/kafka-reassign-partitions.sh --bootstrap-server
     <cluster_name>-kafka-bootstrap:9093 \
     --command-config /tmp/config.properties \
     --reassignment-json-file /tmp/reassignment.json \
     --execute
    참고

    브로커에서 복제본을 제거해도 데이터 간 데이터 이동이 필요하지 않으므로 복제를 방해할 필요가 없습니다. 복제본을 추가하는 경우 throttle 속도를 변경해야 할 수 있습니다.

  6. 브로커 Pod의 kafka-reassign-partitions.sh 명령줄 도구를 사용하여 주제 복제본에 대한 변경이 완료되었는지 확인합니다. 이 명령은 이전 단계와 동일하지만 --execute 옵션 대신 --verify 옵션을 사용합니다.

    bin/kafka-reassign-partitions.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --reassignment-json-file /tmp/reassignment.json \
      --verify

    --verify 명령은 이동 중인 각 파티션이 성공적으로 완료되었음을 보고하면 재할당이 완료되었습니다. 이 마지막 --verify 는 또한 reassignment throttles를 제거하는 효과가 있습니다.

  7. bin/kafka-topics.sh 명령을 --describe 옵션과 함께 실행하여 주제 변경 결과를 확인합니다.

    bin/kafka-topics.sh --bootstrap-server
      <cluster_name>-kafka-bootstrap:9093 \
      --command-config /tmp/config.properties \
      --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

  8. 마지막으로 KafkaTopic 사용자 정의 리소스를 편집하여 .spec.replicas 를 3으로 변경한 다음 조정을 기다립니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: my-topic
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      partitions: 3
      replicas: 3
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동