19장. 파티션 재할당 툴 사용


Kafka 클러스터를 스케일링할 때 브로커를 추가 또는 제거하고 파티션 분배 또는 주제 복제 요소를 업데이트해야 할 수 있습니다. 파티션 및 주제를 업데이트하려면 kafka-reassign-partitions.sh 도구를 사용할 수 있습니다.

AMQ Streams Cruise Control 통합이나 Topic Operator는 주제의 복제 요인을 변경할 수 없습니다. 그러나 kafka-reassign-partitions.sh 도구를 사용하여 주제의 복제 요소를 변경할 수 있습니다.

또한 이 도구를 사용하여 성능을 개선하기 위해 파티션을 다시 할당하고 여러 브로커 간에 파티션 분배의 균형을 조정할 수 있습니다. 그러나 자동화된 파티션 재할당 및 클러스터 재조정에 Cruise Control 을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.

kafka-reassign-partitions.sh 툴을 브로커 컨테이너 내부가 아닌 별도의 대화형 Pod로 실행하는 것이 좋습니다. 브로커 컨테이너 내에서 Kafka bin/ 스크립트를 실행하면 JVM이 Kafka 브로커와 동일한 설정으로 시작되어 잠재적으로 중단될 수 있습니다. 별도의 Pod에서 kafka-reassign-partitions.sh 툴을 실행하면 이 문제를 방지할 수 있습니다. -ti 옵션을 사용하여 Pod를 실행하면 Pod 내에서 쉘 명령을 실행하기 위해 터미널로 대화형 Pod가 생성됩니다.

터미널에서 대화형 Pod 실행

oc run helper-pod -ti --image=registry.redhat.io/amq-streams/kafka-35-rhel8:2.5.1 --rm=true --restart=Never -- bash

19.1. 파티션 재할당 툴 개요

파티션 재할당 툴은 Kafka 파티션 및 브로커를 관리하기 위한 다음과 같은 기능을 제공합니다.

파티션 복제본 재배포
브로커를 추가하거나 제거하여 클러스터를 확장 및 축소하고 Kafka 파티션을 많이 로드된 브로커에서 활용도가 낮은 브로커로 이동합니다. 이렇게 하려면 이동할 주제와 파티션과 이동 위치를 식별하는 파티션 재할당 계획을 만들어야 합니다. 클러스터 재조정 프로세스를 자동화 하므로 이러한 유형의 작업에 cruise Control이 권장됩니다.
상태 조정 주제 복제 요인 및 축소
Kafka 주제의 복제 요소를 늘리거나 줄입니다. 이렇게 하려면 파티션에서 기존 복제 할당을 식별하고 복제 요소가 변경된 업데이트된 할당을 식별하는 파티션 재할당 계획을 만들어야 합니다.
기본 리더 변경
Kafka 파티션의 기본 리더를 변경합니다. 현재 기본 리더를 사용할 수 없거나 클러스터의 브로커 전체에 로드를 재배포하려는 경우 유용할 수 있습니다. 이렇게 하려면 복제본 순서를 변경하여 각 파티션의 새로운 기본 리더를 지정하는 파티션 재할당 계획을 생성해야 합니다.
특정 JBOD 볼륨을 사용하도록 로그 디렉터리 변경
특정 JBOD 볼륨을 사용하도록 Kafka 브로커의 로그 디렉터리를 변경합니다. Kafka 데이터를 다른 디스크 또는 스토리지 장치로 이동하려는 경우 유용할 수 있습니다. 이렇게 하려면 각 항목에 대한 새 로그 디렉터리를 지정하는 파티션 재할당 계획을 만들어야 합니다.

19.1.1. 파티션 재할당 계획 생성

파티션 재할당 도구(kafka-reassign-partitions.sh)는 현재 브로커에서 새 브로커로 이동해야 하는 파티션을 지정하는 파티션 할당 계획을 생성하여 작동합니다.

이 계획에 만족하는 경우 이를 실행할 수 있습니다. 그런 다음 도구는 다음을 수행합니다.

  • 파티션 데이터를 새 브로커로 마이그레이션
  • Kafka 브로커에서 메타데이터를 업데이트하여 새 파티션 할당을 반영합니다.
  • Kafka 브로커를 롤링 재시작하여 새 할당이 적용되도록 트리거합니다.

파티션 재할당 툴에는 세 가지 모드가 있습니다.

--generate
일련의 주제와 브로커를 가져와서 JSON 파일을 다시 할당하면 해당 주제의 파티션이 해당 브로커에 할당됩니다. 이는 전체 주제에서 작동하기 때문에 일부 주제의 일부 파티션만 다시 할당하려는 경우에만 사용할 수 없습니다.
--execute
JSON 파일을 다시 할당하고 클러스터의 파티션과 브로커에 적용합니다. 결과적으로 파티션을 얻는 브로커는 파티션 리더의 비만족이됩니다. 지정된 파티션에 대해 새 브로커가 ISR (in-sync replicas)에 가입되어 참여하면 이전 브로커는 후속 조치를 중단하고 해당 복제본을 삭제합니다.
--verify
--execute 단계와 동일한 재 할당 JSON 파일을 사용하여 --verify 는 파일의 모든 파티션이 의도된 브로커로 이동되었는지 확인합니다. 재할당이 완료되면 --verify 는 적용되는 트래픽 제한 (--throttle)도 제거합니다. 제거되지 않는 한 throttles는 재할당이 완료된 후에도 클러스터에 계속 영향을 미칩니다.

지정된 시간에 클러스터에서 하나의 재할당을 실행할 수 있으며 실행 중인 재할당을 취소할 수 없습니다. 재할당을 취소해야 하는 경우 완료될 때까지 기다린 다음 다른 재할당을 수행하여 첫 번째 재할당의 영향을 되돌립니다. kafka-reassign-partitions.sh 는 출력의 일부로 이 reassignment JSON을 출력합니다. 매우 큰 reassignment는 in-progress reassignment를 중지해야 하는 경우 다수의 작은 재할당으로 분류해야 합니다.

19.1.2. 파티션 재할당 JSON 파일에서 주제 지정

kafka-reassign-partitions.sh 툴에서는 다시 할당할 주제를 지정하는 JSON 파일을 다시 할당합니다. 특정 파티션을 이동하려면 JSON 파일을 다시 할당하거나 파일을 수동으로 생성할 수 있습니다.

기본 재할당 JSON 파일에는 다음 예제와 같이 두 개의 Kafka 항목에 속하는 파티션 3개를 설명하는 구조가 있습니다. 각 파티션은 브로커 ID로 식별되는 새로운 복제본 세트에 다시 할당됩니다. version,topic,partition, replicas 속성은 모두 필요합니다.

파티션 재할당 JSON 파일 구조 예

{
  "version": 1, 
1

  "partitions": [ 
2

    {
      "topic": "example-topic-1", 
3

      "partition": 0, 
4

      "replicas": [1, 2, 3] 
5

    },
    {
      "topic": "example-topic-1",
      "partition": 1,
      "replicas": [2, 3, 4]
    },
    {
      "topic": "example-topic-2",
      "partition": 0,
      "replicas": [3, 4, 5]
    }
  ]
}

1
reassignment JSON 파일 형식의 버전입니다. 현재는 버전 1만 지원되므로 항상 1이어야 합니다.
2
다시 할당할 파티션을 지정하는 배열입니다.
3
파티션이 속한 Kafka 항목의 이름입니다.
4
다시 할당되는 파티션의 ID입니다.
5
이 파티션의 복제본으로 할당해야 하는 브로커의 ID 정렬 배열입니다. 목록의 첫 번째 브로커는 리더 복제본입니다.
참고

JSON에 포함되지 않은 파티션은 변경되지 않습니다.

주제 배열을 사용하여 주제만 지정하는 경우 파티션 재할당 툴은 지정된 항목에 속하는 모든 파티션을 다시 할당합니다.

주제의 모든 파티션을 다시 할당하기 위한 JSON 파일 구조 재배치 예

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

19.1.3. JBOD 볼륨 간 파티션 할당

Kafka 클러스터에서 JBOD 스토리지를 사용하는 경우 특정 볼륨과 해당 로그 디렉터리(각 볼륨에 단일 로그 디렉터리가 있음) 간에 파티션을 다시 할당할 수 있습니다.

특정 볼륨에 파티션을 다시 할당하려면 JSON 파일의 각 파티션에 대한 log_dirs 값을 추가합니다. 각 log_dirs 배열에는 각 복제본을 특정 로그 디렉터리에 할당해야 하므로 replicas 배열과 동일한 수의 항목이 포함되어 있습니다. log_dirs 배열에는 로그 디렉토리의 절대 경로 또는 특수 값 any 가 포함되어 있습니다. any 값은 Kafka가 JBOD 볼륨 간에 파티션을 다시 할당할 때 유용할 수 있는 해당 복제본에 사용 가능한 모든 로그 디렉터리를 선택할 수 있음을 나타냅니다.

로그 디렉터리를 사용하여 JSON 파일 구조 다시 할당의 예

{
  "version": 1,
  "partitions": [
    {
      "topic": "example-topic-1",
      "partition": 0,
      "replicas": [1, 2, 3]
      "log_dirs": ["/var/lib/kafka/data-0/kafka-log1", "any", "/var/lib/kafka/data-1/kafka-log2"]
    },
    {
      "topic": "example-topic-1",
      "partition": 1,
      "replicas": [2, 3, 4]
      "log_dirs": ["any",  "/var/lib/kafka/data-2/kafka-log3", "/var/lib/kafka/data-3/kafka-log4"]
    },
    {
      "topic": "example-topic-2",
      "partition": 0,
      "replicas": [3, 4, 5]
      "log_dirs": ["/var/lib/kafka/data-4/kafka-log5", "any",  "/var/lib/kafka/data-5/kafka-log6"]
    }
  ]
}

19.1.4. 파티션 재할당 제한

파티션 재할당은 브로커 간에 대량의 데이터를 전송해야 하므로 프로세스가 느려질 수 있습니다. 클라이언트에 미치는 영향을 방지하려면 재할당 프로세스를 제한할 수 있습니다. kafka-reassign-partitions.sh 툴과 함께 --throttle 매개변수를 사용하여 재할당을 제한합니다. 브로커 간 파티션 이동에 대한 초당 최대 임계값을 바이트 단위로 지정합니다. 예를 들어 --throttle 5000000 은 50MBps의 파티션을 이동하는 최대 임계값을 설정합니다.

제한으로 인해 재할당이 완료되는 데 시간이 더 오래 걸릴 수 있습니다.

  • 목축이 너무 낮으면 새로 할당된 브로커는 게시 중인 레코드를 계속 유지할 수 없으며 재할당은 완료되지 않습니다.
  • 목회자가 너무 높으면 고객은 영향을 받습니다.

예를 들어 생산자의 경우 이는 일반 대기 시간보다 높은 것으로 확인 대기 중인 것으로 나타날 수 있습니다. 소비자의 경우 폴링 간 대기 시간이 길기 때문에 발생하는 처리량이 감소한 것으로 나타날 수 있습니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동