15장. 파티션 재할당 도구 사용
Kafka 클러스터를 스케일링하는 경우 브로커를 추가하거나 제거하고 파티션 배포 또는 주제의 복제 요소를 업데이트해야 할 수 있습니다. 파티션 및 주제를 업데이트하려면 kafka-reassign-partitions.sh 툴을 사용할 수 있습니다.
kafka-reassign-partitions.sh 도구를 사용하여 주제의 복제 요소를 변경할 수 있습니다. 이 도구를 사용하여 파티션을 다시 할당하고 브로커 간에 파티션의 분산을 조정하여 성능을 향상시킬 수도 있습니다. 그러나 자동화된 파티션 재할당 및 클러스터 재조정 및 주제 복제 요인 변경에 Cruise Control을 사용하는 것이 좋습니다. 크루즈 컨트롤은 다운타임 없이 한 브로커에서 다른 브로커로 주제를 이동할 수 있으며 파티션을 다시 할당하는 가장 효율적인 방법입니다.
15.1. 파티션 재할당 도구 개요 링크 복사링크가 클립보드에 복사되었습니다!
파티션 재할당 툴에서는 Kafka 파티션 및 브로커를 관리하기 위한 다음과 같은 기능을 제공합니다.
- 파티션 복제본 재배포
- 브로커를 추가하거나 제거하여 클러스터를 확장하고 많이 로드된 브로커에서 활용도가 낮은 브로커로 Kafka 파티션을 이동합니다. 이렇게 하려면 이동할 주제와 파티션과 이동할 위치를 식별하는 파티션 재할당 계획을 만들어야 합니다. cruise Control은 클러스터 재조정 프로세스를 자동화 하므로 이 유형의 작업에 권장됩니다.
- 주제 복제 요인 확장 및 축소
- Kafka 주제의 복제 요소를 늘리거나 줄입니다. 이렇게 하려면 파티션 간에 기존 복제 할당을 식별하고 복제 요소가 변경되면 업데이트된 할당을 생성하는 파티션 재할당 계획을 만들어야 합니다.
- 선호하는 리더 변경
- Kafka 파티션의 기본 리더를 변경합니다. 현재 선호하는 리더를 사용할 수 없거나 클러스터의 브로커 간에 부하를 재배포하려는 경우 유용할 수 있습니다. 이렇게 하려면 복제본 순서를 변경하여 각 파티션의 새로운 기본 리더를 지정하는 파티션 재할당 계획을 만들어야 합니다.
- 특정 JBOD 볼륨을 사용하도록 로그 디렉터리 변경
- 특정 JBOD 볼륨을 사용하도록 Kafka 브로커의 로그 디렉터리를 변경합니다. 이 기능은 Kafka 데이터를 다른 디스크 또는 스토리지 장치로 이동하려는 경우 유용할 수 있습니다. 이렇게 하려면 각 주제의 새 로그 디렉터리를 지정하는 파티션 재할당 계획을 만들어야 합니다.
15.1.1. 파티션 재할당 계획 생성 링크 복사링크가 클립보드에 복사되었습니다!
파티션 재할당 도구(kafka-reassign-partitions.sh)는 현재 브로커에서 새 브로커로 이동해야 하는 파티션을 지정하는 파티션 할당 계획을 생성하여 작동합니다.
계획에 만족하는 경우 실행할 수 있습니다. 이 툴은 다음을 수행합니다.
- 파티션 데이터를 새 브로커로 마이그레이션
- 새 파티션 할당을 반영하도록 Kafka 브로커의 메타데이터 업데이트
- Kafka 브로커의 롤링 재시작을 트리거하여 새 할당이 적용되도록 합니다.
파티션 재할당 툴에는 세 가지 모드가 있습니다.
--generate- 주제 및 브로커 세트를 가져와서 재할당 JSON 파일을 생성하여 해당 브로커에 해당 주제의 파티션이 할당됩니다. 이는 전체 항목에서 작동하기 때문에 일부 주제의 일부 파티션만 다시 할당하려는 경우 사용할 수 없습니다.
--execute- JSON 파일을 다시 할당 하여 클러스터의 파티션 및 브로커에 적용합니다. 결과적으로 파티션을 얻는 브로커는 파티션 리더의 팔로우가됩니다. 지정된 파티션의 경우 새 브로커가 ISR(동기화형 복제본)에 가입하고 ISR(동기화) 복제본에 가입하면 이전 브로커가 팔로워가 되는 것을 중지하고 해당 복제본을 삭제합니다.
--verify-
--execute단계와 동일한 재할당 JSON 파일을 사용하여--verify는 파일의 모든 파티션이 의도한 브로커로 이동되었는지 확인합니다. 재할당이 완료되면--verify는 적용되는 트래픽 제한(--throttle)도 제거합니다. 제거되지 않으면 제한은 재할당이 완료된 후에도 클러스터에 계속 영향을 미칩니다.
지정된 시간에 클러스터에서 하나의 재할당을 실행할 수 있으며 실행 중인 재할당을 취소할 수 없습니다. 재할당을 취소해야 하는 경우 재할당이 완료될 때까지 기다린 다음 다른 재할당을 수행하여 첫 번째 재할당의 효과를 되돌립니다. kafka-reassign-partitions.sh 는 이 재버전에 대한 재할당 JSON을 출력 출력의 일부로 출력합니다. 매우 큰 재할당은 진행 중인 재할당을 중지해야 하는 경우 다수의 작은 재할당으로 분류되어야 합니다.
15.1.2. 파티션 재할당 JSON 파일에 주제 지정 링크 복사링크가 클립보드에 복사되었습니다!
kafka-reassign-partitions.sh 툴은 다시 할당할 주제를 지정하는 재할당 JSON 파일을 사용합니다. 특정 파티션을 이동하려는 경우 JSON 파일을 다시 할당하거나 파일을 수동으로 생성할 수 있습니다.
기본 재할당 JSON 파일에는 다음 예제에 표시된 구조가 있으며, 이 구조는 두 Kafka 항목에 속하는 파티션 세 개를 설명합니다. 각 파티션은 브로커 ID로 식별되는 새 복제본 세트에 다시 할당됩니다. version,topic,partition, replicas 속성은 모두 필요합니다.
파티션 재할당 JSON 파일 구조의 예
JSON에 포함되지 않은 파티션은 변경되지 않습니다.
주제 배열을 사용하여 주제만 지정하는 경우 파티션 재할당 도구에서 지정된 항목에 속하는 모든 파티션을 다시 할당합니다.
주제의 모든 파티션을 다시 할당하는 JSON 파일 구조의 예
15.1.3. JBOD 볼륨 간에 파티션 재할당 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터에서 JBOD 스토리지를 사용하는 경우 특정 볼륨과 로그 디렉터리 간에 파티션을 다시 할당할 수 있습니다(각 볼륨에 단일 로그 디렉터리가 있음).
파티션을 특정 볼륨에 다시 할당하려면 재할당 JSON 파일의 각 파티션에 대한 log_dirs 값을 추가합니다. 각 log_dirs 배열에는 각 복제본을 특정 로그 디렉터리에 할당해야 하므로 replicas 배열과 동일한 수의 항목이 포함됩니다. log_dirs 배열에는 로그 디렉터리의 절대 경로 또는 특수 값이 포함되어 있습니다. any 값은 Kafka가 해당 복제본에 사용 가능한 로그 디렉토리를 선택할 수 있음을 나타냅니다. 이는 JBOD 볼륨 간에 파티션을 다시 할당할 때 유용할 수 있습니다.
로그 디렉터리가 있는 JSON 파일 구조 재할당의 예
15.1.4. 파티션 재할당 제한 링크 복사링크가 클립보드에 복사되었습니다!
브로커 간에 대량의 데이터를 전송해야 하므로 파티션 재할당은 느린 프로세스일 수 있습니다. 클라이언트에 부정적인 영향을 미치지 않도록 하려면 재할당 프로세스를 중단할 수 있습니다. kafka-reassign-partitions.sh 툴과 함께 --throttle 매개변수를 사용하여 재할당을 제한합니다. 브로커 간 파티션 이동에 대한 초당 최대 임계값(바이트)을 지정합니다. 예를 들어 --throttle 5000000 은 50MBps의 파티션 이동을 위한 최대 임계값을 설정합니다.
제한으로 인해 재할당이 완료되는 데 시간이 더 걸릴 수 있습니다.
- 스로틀이 너무 낮으면 새로 할당된 브로커는 게시되는 레코드를 유지할 수 없으며 재할당이 완료되지 않습니다.
- 스로틀이 너무 높으면 클라이언트에 영향을 미칩니다.
예를 들어 프로듀서의 경우 이는 승인을 기다리는 일반 대기 시간보다 높을 수 있습니다. 소비자의 경우 폴링 간에 대기 시간이 길기 때문에 처리량이 저하될 수 있습니다.