복제 계수(Replication Factor)란 무엇인가?
Kafka에서 복제 계수는 각 토픽 파티션의 데이터 사본(레플리카)이 몇 개의 브로커에 저장될지 결정하는 값이다.
- 개발/테스트 환경: 복제 계수 1로도 충분하다. (데이터가 한 브로커에만 저장)
- 프로덕션 환경: 복제 계수는 반드시 2 또는 3 이상으로 설정하는 것이 표준이다.
- 보통 3으로 설정하는 경우가 가장 많다.
- 이유는 브로커 장애, 유지보수, 네트워크 문제 등으로 브로커가 중단되더라도 데이터가 다른 브로커에 안전하게 보관되기 때문이다.
예시로 보는 복제 계수(Replication Factor)의 구조
- 토픽 A: 파티션 2개, 복제 계수 2
- Kafka 브로커: 101, 102, 103

파티션과 레플리카 배치
- 파티션 0: 브로커 101에 저장(리더), 브로커 102에 복제(팔로워)
- 파티션 1: 브로커 102에 저장(리더), 브로커 103에 복제(팔로워)
이렇게 하면 파티션 0과 1 각각의 데이터가 2개 브로커에 분산 저장된다.
즉, 파티션이 2개이고 복제 계수가 2라면 데이터 유닛이 총 4개가 클러스터에 존재하게 된다.
장애 상황에서의 동작

예를 들어 브로커 102가 장애로 다운된다면,
- 파티션 0은 브로커 101(리더)에 남아 있고,
- 파티션 1은 브로커 103(팔로워, 이제 리더로 승격)에 남아 있다.
따라서 브로커 1개가 장애가 나더라도, 클러스터는 데이터 손실 없이 계속 동작할 수 있다.
리더와 ISR(In-Sync Replica)의 역할

- 리더(Leader): 각 파티션마다 반드시 1개 존재. 프로듀서와 컨슈머는 리더 브로커에만 데이터를 쓰고 읽는다.
- 팔로워(Follower): 리더의 데이터를 실시간으로 복제한다.
- ISR(In-Sync Replica): 리더와 동기화가 잘 된 팔로워 집합. 리더 장애 시 ISR 중 하나가 자동으로 새 리더가 된다.
동기화의 중요성
- 데이터가 충분히 빠르게 복제되어야만 팔로워가 ISR에 포함된다.
- ISR에 포함되지 못한 레플리카는 Out-of-Sync Replica(OOSR)라고 부르며, 장애 복구 시 리더가 될 수 없다.
프로듀서와 컨슈머의 동작 방식

- 프로듀서: 항상 해당 파티션의 리더 브로커에만 데이터를 전송한다.
- 컨슈머: 기본적으로 리더 브로커에서만 데이터를 읽는다.
만약 리더 브로커가 장애로 중단되면, ISR에 있는 팔로워 중 하나가 새 리더가 되어 프로듀서와 컨슈머가 계속 데이터를 주고받을 수 있다.
Kafka의 새로운 기능: 컨슈머 레플리카 페칭
Kafka는 지속적으로 발전하고 있다.
Kafka 2.4 버전부터는 컨슈머 레플리카 페칭(Consumer Replica Fetching) 기능이 도입되었다.
- 이전까지: 컨슈머는 반드시 리더 브로커에서만 데이터를 읽었다.

- Kafka 2.4 이후: 컨슈머가 가장 가까운 ISR 레플리카(팔로워)에서도 데이터를 읽을 수 있다.
이 기능의 장점
- 레이턴시 감소: 컨슈머가 물리적으로 가까운 브로커에서 데이터를 읽으면 지연이 줄어든다.
- 네트워크 비용 절감: 클라우드 환경에서 같은 데이터 센터, 같은 가용영역(AZ)에 있는 레플리카에서 데이터를 읽으면 네트워크 비용을 크게 줄일 수 있다.
정리
- 복제 계수는 Kafka의 데이터 신뢰성과 내결함성의 핵심이다.
- 프로덕션 환경에서는 복제 계수 2~3을 권장한다.
- 파티션 리더만이 데이터의 읽기/쓰기를 담당하며, 장애 시 ISR 내 팔로워가 자동 승격된다.
- Kafka 2.4 이상에서는 컨슈머가 가까운 레플리카에서 데이터를 읽어 효율성과 비용을 최적화할 수 있다.
Kafka의 복제 계수와 리더 구조를 이해하면, 고가용성·고신뢰성 데이터 플랫폼을 설계하는 데 큰 도움이 된다.