1. 문제 상황
Kafka 클러스터 운영 중, 특정 토픽의 파티션이 Under-Replicated Partitions(URP) 발생. URP는 파티션의 복제본 수가 설정된 replication factor보다 적어진 상태.
URP 상황 자체는 Kafka를 아예 쓸 수 없는 상태를 의미하진 않는다. follower 파티션에 복제만 못하고 있을 뿐 leader 파티션은 여전히 데이터가 들어오고 있고 프로듀서나 컨슈머를 통해서 메시지를 계속 주고받을 것이다. 하지만 URP가 발생했다는 건 원래 복제되어야 할 데이터가 복제를 실패 했다는 것이고 이것은 클러스터의 고가용성 측면에서 문제가 있다는 것을 의미한다.
2. 해결 과정
1) URP 상태 확인
가장 먼저 클러스터에 URP 상태인 파티션이 있는지 확인. kafka-topics.sh 스크립트로 어떤 토픽과 파티션이 문제인지 정확히 식별.
URP 상태 확인 명령어:
bin/kafka-topics.sh --bootstrap-server <bootstrap_server> --describe --under-replicated-partitions출력 예시:
Topic: my-topic Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2- 분석: 위 출력은
my-topic의 0번 파티션이 URP 상태임을 보여준다. Replicas는 1, 2, 3으로 세 곳에 지정되어 있지만, 현재 동기화된 복제본(Isr)은 1, 2 두 곳뿐인 상황이다.
이 명령어를 실행했을 때 URP 상태인 파티션이 있다면, 위와 같이 해당 파티션 정보가 출력됨. 아무것도 안 나오면 현재 URP 문제가 없는 상태.
2) 파티션 재할당 (Reassign Partitions)
URP의 근본 원인(브로커 장애, 네트워크 등)을 해결했다면, URP 상태인 파티션을 정상 브로커들에게 재할당해서 복제본 수를 다시 맞춰야 함.
a. JSON 파일 작성
어떤 파티션을 어떤 브로커로 옮길지 계획을 담은 JSON 파일을 생성.
reassignment.json 파일 예시:
{
"version": 1,
"partitions": [
{
"topic": "my-topic",
"partition": 0,
"replicas": [1, 2, 3]
},
{
"topic": "my-topic",
"partition": 1,
"replicas": [1, 2, 3]
}
]
}이 예시는 my-topic의 0번, 1번 파티션을 정상 운영 중인 브로커 1, 2, 3으로 재할당한다. replicas 리스트에서 첫번째 브로커가 파티션 리더를 의미.
b. reassign 실행
만든 JSON 파일로 파티션 재할당을 실행.
bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_server> --reassignment-json-file reassignment.json --executec. reassign 진행 상태 확인
재할당은 바로 끝나지 않을 수 있으니, 아래 명령어로 진행 상태를 주기적으로 확인.
bin/kafka-reassign-partitions.sh --bootstrap-server <bootstrap_server> --reassignment-json-file reassignment.json --verifyReassignment of partition ... completed successfully 메시지가 모든 파티션에 대해 보이면 재할당이 성공적으로 끝난 것.
'Data > Kafka' 카테고리의 다른 글
| Kafka - acks, replication.factor, min.insync.replicas 설정 분석 (0) | 2025.10.19 |
|---|