KafkaApi 로그에 특정 client(id=Telegraf)로부터의 produce 요청이 NotLeaderForPartitionException으로 거부되는 에러가 반복된다.
브로커 디스크 문제 자체는 원본 케이스에서 해결을 확인했다. log.dirs 분산 방법은 케이스에서 질문만 있었고 실제 재분배를 적용했는지 여부는 원본에 기록되지 않았다.
해당 broker 노드의 디스크 문제가 원인으로 확인돼 조치했다. 이후 특정 토픽의 데이터가 log.dirs에 설정된 여러 디렉터리 중 한 곳에만 몰려 디스크 불균형이 발생하는 후속 문제가 있어, 파티션을 여러 log.dirs로 재분배하는 것이 필요하다.
확인 수준: 원본 디스크 장애 복구 확인 · log.dirs 재배치 적용 미확인
적용 조건: <...>와 예시 DB·테이블·경로·수치는 실제 확인값으로 바꾼다. 명령과 메뉴는 참고 문서를 바탕으로 보강한 예시이며 대상 시스템에서 실행하지 않았다. 버전·원인에 따른 분기와 남은 확인 사항은 아래에 명시한다.
broker 디스크 상태(SMART, df, dmesg의 I/O 에러)를 먼저 확인해 디스크 결함이 실제 원인인지 확인한다.
디스크 자체를 교체·복구한 뒤, 해당 broker의 파티션 리더 재선출과 복제 상태(ISR)가 정상으로 돌아오는지 확인한다.
kafka-topics.sh --describe --topic '<topic>' --bootstrap-server '<broker>:9092'
log.dirs에 여러 디렉터리를 설정했는데도 특정 디렉터리에만 데이터가 몰려 디스크 불균형이 생겼다면, 브로커별 log 디렉터리 사용량을 먼저 확인한다.kafka-log-dirs.sh --bootstrap-server '<broker>:9092' --describe --broker-list '<broker-id>'
kafka-reassign-partitions.sh에 log_dirs를 지정해 특정 파티션을 다른 디렉터리로 옮긴다. 이 기능은 브로커를 내리지 않고 온라인 상태에서 데이터를 복사한 뒤 원자적으로 전환한다.kafka-reassign-partitions.sh --bootstrap-server '<broker>:9092' \
--reassignment-json-file reassign.json --execute
reassign.json의 각 파티션 항목에 log_dirs 필드로 목적지 디렉터리를 명시한다.
재배치 전 설치된 Kafka CLI의 --help로 bootstrap-server·command-config·log_dirs 지원을 확인한다. 보안 클러스터에서는 접근 제한된 client.properties를 --command-config로 지정한다. 아래는 broker 1/2/3에 이미 복제된 partition 0 중 broker 1의 경로만 바꾸는 예시다. 실제 replicas의 구성·순서를 유지하며 배열 길이를 맞춘다.
{"version":1,"partitions":[{"topic":"example-topic","partition":0,"replicas":[1,2,3],"log_dirs":["/data2/kafka","any","any"]}]}
목적지가 해당 broker의 log.dirs에 포함되고 정상 mount·쓰기 권한·복사 중 추가 공간을 갖는지 확인한다. 기존 assignment를 보존하고 동시에 실행 중인 reassignment와 겹치지 않게 한다. 설치 CLI가 지원하면 실제 I/O 여유에 맞는 --replica-alter-log-dirs-throttle을 execute에 추가한다. broker 간 --throttle과 별도다.
kafka-reassign-partitions.sh --bootstrap-server '<broker>:9092' \
--command-config '<protected-client.properties>' \
--reassignment-json-file reassign.json --verify
완료 후 ISR·under-replicated partitions·log directory 상태를 확인한다. verify의 throttle 해제 결과도 확인하며 다른 작업의 throttle을 임의로 제거하지 않는다. 현재 참고 문서의 CLI 문법이 구형 배포판에 모두 존재한다고 가정하지 않는다.
재분배 후 log.dirs 각 디렉터리의 사용량이 고르게 분산되고, broker 디스크 사용량 불균형으로 인한 장애가 재발하지 않는지 확인한다.