Kafka 클러스터는 고가용성과 확장성을 갖춘 메시징 시스템입니다. 이 글에서는 단일 파티션으로 구성된 Kafka 클러스터에서의 메시지 처리 흐름, 리더-팔로워 구조, 장애 발생 시 리더 전환 방식까지 상세히 설명합니다.
Kafka 단일 파티션 기반 리더-팔로워 동작 원리 : 장애복구
목차
1. Kafka 클러스터 기본 구성
Kafka 클러스터는 여러 개의 브로커(Broker)로 구성되어 데이터를 분산 저장합니다. 이번 글에서는 다음과 같은 구조를 기준으로 설명합니다:
- 브로커 수: 3개 (Broker-1, Broker-2, Broker-3)
- 토픽 수: 1개 (topic-1)
- 파티션 수: 1개 (Partition 0)
- 복제본 수 (Replication Factor): 3 (리더 1개 + 팔로워 2개)
단일 파티션 구조는 메시지 순서를 보장하면서도, 복제본을 통해 장애 복구가 가능합니다.
2. 단일 파티션의 리더-팔로워 배치 : 멀티노드
Kafka는 파티션을 브로커에 자동 분산 배치합니다. 파티션이 1개이고 복제본이 3개라면, 일반적으로 다음과 같이 배치됩니다:
브로커 | 역할 | 설명 |
Broker-2 | 리더 (Leader) | 실제 데이터 저장, Producer/Consumer 접근 |
Broker-1 | 팔로워 (Follower) | 리더의 데이터를 복제 |
Broker-3 | 팔로워 (Follower) | 리더의 데이터를 복제 |
◆ 리더(Leader)
- 메시지를 저장하는 주체
- Producer는 항상 리더에게 메시지를 전송
- Consumer도 리더에서만 메시지를 읽음
◆ 팔로워(Follow)
- 리더로부터 데이터를 복제 (비동기 또는 반동기)
- 정상 복제 상태 유지 시 ISR(In-Sync Replicas)에 포함됨
- 리더 장애 시 ISR 내 팔로워가 리더로 승격 가능
3. 메시지 처리 흐름 이해
Kafka에서 단일 파티션의 메시지는 다음 순서로 처리됩니다.
1. Producer → 리더로 메시지 전송
- Kafka 클라이언트는 클러스터로부터 메타데이터를 받아 현재 리더가 누구인지 확인합니다.
- 이 예제에서는 Partition 0의 리더가 Broker-2입니다.
- 따라서 Producer는 Broker-2로 직접 메시지를 보냅니다.
Producer → Broker-2 (Partition 0 - Leader)
2. 리더가 메시지 저장 후 복제 요청
- Broker-2는 받은 메시지를 로컬 디스크(로그 파일)에 저장합니다.
- 저장된 메시지는 팔로워 브로커(Broker-1, Broker-3)에게 자동으로 복제됩니다.
- 이 복제는 주기적으로 이루어지며, 복제 상태가 정상일 경우 ISR(In-Sync Replica) 목록에 포함됩니다.
Broker-2 → Broker-1, Broker-3 (복제 요청)
ISR이란?
리더와 데이터 상태가 일치하는 팔로워 목록입니다. 장애 발생 시, 이 목록에 있는 브로커 중 하나가 새로운 리더로 승격됩니다.
3. Consumer가 리더에서 데이터 읽기
- Consumer가 토픽을 구독하면, Kafka는 Partition 0의 리더가 Broker-2라는 정보를 전달합니다.
- Consumer는 이 정보를 바탕으로 Broker-2에서 직접 메시지를 가져갑니다.
- Kafka의 원칙상, Consumer는 항상 리더에서만 데이터를 읽습니다.
Consumer ← Broker-2 (Partition 0 - Leader)
이 흐름은 파티션이 하나이기 때문에 매우 직관적이며, 메시지 순서도 정확히 보장됩니다.
단일 파티션의 경우, 리더 하나가 모든 메시지 입출력을 담당하게 되므로 구조가 단순하지만, 성능 측면에서는 한계가 존재합니다.
4. 장애 발생시 리더 전환 과정
Kafka는 장애 상황에서도 서비스를 중단 없이 유지하기 위해, 리더 브로커가 고장 나면 자동으로 새로운 리더를 선출합니다.
이 과정은 Kafka 클러스터가 복제본(Replica)을 잘 관리하고 있기 때문에 가능한 일입니다.
장애 시나리오: 리더 Broker-2 다운
1. Kafka 컨트롤러가 장애 감지
- Kafka 클러스터에는 컨트롤러 역할을 맡은 브로커가 하나 존재합니다.
- 이 컨트롤러는 클러스터 상태를 지속적으로 감시하고 있습니다.
- 리더 브로커(Broker-2)가 일정 시간 동안 응답하지 않으면, 컨트롤러는 해당 브로커가 장애 발생했다고 판단합니다.
2. 복제본 목록에서 새로운 리더를 자동으로 선택
- Kafka는 항상 리더의 데이터를 따라가고 있는 팔로워 목록(ISR: In-Sync Replicas)을 유지합니다.
- ISR에 있는 브로커 중 하나를 자동으로 새로운 리더로 승격합니다.
- 예를 들어, Broker-1이 ISR에 있고 최신 상태라면 리더가 됩니다.
1. 장애 전
Partition 0 → 리더: Broker-2 / 팔로워: Broker-1, Broker-3
2. 장애 후
Partition 0 → 리더: Broker-1 / 팔로워: Broker-3
3. Producer와 Consumer가 새로운 리더로 자동 연결
- Kafka 클라이언트(Producer, Consumer)는 정기적으로 메타데이터를 갱신합니다.
- 이 과정에서 새로운 리더가 Broker-1임을 자동으로 인식하게 됩니다.
- 이후 메시지 전송 및 읽기 작업은 새로운 리더에게로 자동 전환됩니다.
Producer → Broker-1 (새로운 리더)
Consumer ← Broker-1 (새로운 리더)
5. 단일 파티션 구성의 장단점
◆ 단일 파티션 구성의 장점
1. 메시지 순서가 완벽하게 보장됨
- 파티션이 1개이므로 모든 메시지가 한 줄로 기록됩니다.
- Producer가 보낸 순서 그대로 메시지가 저장되고, Consumer도 같은 순서로 읽습니다.
- 예: 주문 처리, 결제 요청 등 순서가 중요한 시스템에 적합
2. 운영과 구조가 단순함
- 파티션이 많을수록 데이터 분산, Consumer Group 분할, 리밸런싱 등 관리 포인트가 늘어납니다.
- 1개일 경우 구조가 매우 단순하여 학습과 운영이 편리합니다.
3. 테스트 및 디버깅에 유리함
- 처리 흐름이 한 방향으로만 움직이기 때문에 개발 중 추적과 검증이 쉬움
◆ 단일 파티션 구성의 단점
1. 확장성과 병렬 처리가 불가능
- Kafka는 파티션 단위로 Consumer를 나누는데, 파티션이 1개면 Consumer가 아무리 많아도 1명만 동작합니다.
- 병렬 처리를 통한 속도 향상이 불가능합니다.
2. 처리량이 리더 브로커에 집중됨
- 모든 메시지가 하나의 리더 브로커에서 처리되기 때문에 리소스 사용이 한쪽으로 몰림
- 트래픽이 많을 경우 해당 브로커가 병목이 될 수 있음
3. 단일 Consumer로 인한 처리 지연
- Consumer가 1개뿐이라 메시지가 몰릴 경우 처리 속도에 한계
- 대량 데이터 처리에는 부적합
Kafka의 단일 파티션 클러스터는 메시지 순서 보장과 간단한 구성이 장점이지만, 처리 성능과 확장성 측면에서는 제한적입니다. 리더-팔로워 구조와 ISR, 장애 복구 메커니즘은 이후 멀티 파티션 구성에서도 동일하게 적용됩니다
관련 글 링크
'1.시스템&인프라 > Apache Kafka' 카테고리의 다른 글
6. Kafka 프로듀서 파티션 할당 방식(Round Robin vs Sticky 비교) (0) | 2025.03.28 |
---|---|
5. Kafka 리더 장애 발생 시 Failover를 위한 Producer와 Consumer 설정 (0) | 2025.03.28 |
4. Kafka 클러스터 다중 파티션 구성 이해: 고가용성과 장애복구 (0) | 2025.03.28 |
2. Kafka 단일 노드 동작 원리: 파티션 분배부터 Consumer 전략까지 (0) | 2025.03.28 |
1. 실시간 데이터 처리 플랫폼 Apache Kafka 이해하기 (0) | 2025.03.28 |