Kafka 단일 노드 환경에서의 동작 원리를 정리합니다. 파티션 분배 구조, 메시지 저장 방식, Producer에서 Consumer까지의 데이터 흐름, 그리고 효율적인 Consumer 전략까지 실습 기반으로 이해할 수 있습니다.
Kafka 단일 노드 동작 원리: 파티션 분배부터 Consumer 전략까지
목차
1. Kafka 단일 노드 구성: Test 환경
Kafka는 본래 분산 메시징 시스템이지만, 단일 노드(브로커 1개)에서도 실행할 수 있습니다.
단일 노드 환경은 테스트 및 학습 목적으로 적합하며, 운영 환경에는 권장되지 않습니다.
- 브로커 수: 1대 (broker-1)
- 토픽: topic-1
- 파티션 수: 3개 (Partition 0, Partition 1, Partition 2)
- Replication Factor: 1 (복제본 없음)
단인 노드 환경은 장애 발생 시 데이터 유실 및 서비스 중단 위험이 있습니다.
2. 파티션 구성과 브로커 동작 방식
- Kafka는 하나의 토픽을 여러 개의 파티션(partition) 으로 분할하여 저장합니다.
- 하지만 브로커가 1대밖에 없으므로, 3개의 파티션이 모두 동일한 브로커에서 관리됩니다.
- Kafka는 원래 다수의 브로커가 있을 때 각 파티션을 분산 배치하지만, 브로커가 1개뿐이면 모든 파티션이 한 브로커에 몰립니다.
3. Producer→Broker→Consumer: 메세지 흐름
Kafka 단일 노드에서의 메시지 처리 흐름은 다음과 같습니다:
- Producer가 메시지를 생성하여 broker-1에 전송합니다.
- Broker는 내부 알고리즘(라운드로빈 등)에 따라 메시지를 3개의 파티션에 나눠 저장합니다.
- Consumer Group이 구성되어 있다면 각 Consumer가 특정 파티션의 데이터를 읽습니다.
- Consumer 수와 파티션 수에 따라 분산 또는 집중 처리가 발생합니다.
◆ 1 단계: Producer가 메세지 생성 및 전송
- 애플리케이션 또는 서비스는 Producer API를 사용해 메시지를 생성합니다.
- 메시지를 보낼 때 Kafka 클러스터(이 경우 broker-1)의 주소와 토픽명을 지정합니다.
- 전송 시 메시지 키(key)가 지정되면 Kafka는 동일한 키 값을 가진 메시지를 같은 파티션에 할당합니다.
- 키가 없을 경우에는 라운드로빈 방식 등 기본 전략에 따라 자동 분배됩니다.
◆ 2 단계: Broker가 파티션에 메세지 저장
- 단일 노드 환경에서는 모든 파티션이 하나의 브로커(broker-1)에 존재합니다.
- 브로커는 메시지를 토픽의 파티션 중 하나에 기록합니다.
- 메시지는 파티션 내 로그 파일에 순차적으로 Append(추가)되며, 내부적으로는 오프셋(offset)이라는 위치 값으로 구분됩니다.
- 메시지는 디스크에 저장되며, 높은 처리량과 내구성을 보장합니다.
topic-1
├── Partition 0: [msg1, msg4, msg7]
├── Partition 1: [msg2, msg5, msg8]
└── Partition 2: [msg3, msg6, msg9]
- Kafka는 내부적으로 배치 전송(batch), 압축(compression), ACK 설정 등을 통해 성능과 안정성을 조절합니다.
◆ 3 단계: Consumer가 파티션에서 메세지 읽기
- Consumer는 특정 토픽의 파티션으로부터 메시지를 순차적으로 읽습니다.
- Consumer Group이 구성되어 있을 경우, Kafka는 파티션을 각 Consumer에게 할당합니다.
- Consumer는 오프셋(offset) 정보를 기준으로 자신이 읽은 위치부터 메시지를 가져옵니다.
- 오프셋은 자동 또는 수동으로 커밋(commit)되며, 이후 재시작 시 동일한 위치부터 이어서 소비할 수 있습니다.
Consumer A → Partition 0 → offset 0 → 1 → 2 ...
Consumer B → Partition 1 → offset 0 → 1 ...
4. Consumer 수에 따른 처리 방식 비교
Kafka에서 파티션 수와 Consumer 수의 관계는 성능과 직결됩니다.
파티션 개수 | Consumer 개수 | 효과 |
3 | 1 | 모든 데이터를 1개 Consumer가 소비 (부하 집중) |
3 | 3 | 이상적인 부하 분산 (각 Consumer가 1개씩 처리) |
3 | 5 | 불필요한 Consumer 존재 (낭비 발생) |
◆ Consumer = 1 (단일 Consumer, 파티션 3개)
- 하나의 Consumer가 3개 파티션을 모두 읽습니다.
- 부하가 한 Consumer에 집중됩니다.
- Consumer A → Partition 0, 1, 2 모두 처리
◆ Consumer = 3 (Consumer 수 = 파티션 수)
- 가장 이상적인 구조.
- 각 Consumer가 하나씩 파티션을 전담합니다.
Consumer A → Partition 0
Consumer B → Partition 1
Consumer C → Partition 2
◆ Consumer = 5 (Consumer 수 > 파티션 수)
- 일부 Consumer는 아무 파티션도 할당받지 못하고 Idle 상태입니다.
Consumer A~C → 파티션 담당
Consumer D, E → 대기 상태
5. 효율적인 Consumer 전략
운영 환경에서는 다음 원칙을 고려하여 Consumer 수를 설계합니다:
구분 | 설명 |
파티션 수 > Consumer 수 | 일부 Consumer가 여러 파티션 담당 (확장성 有) |
파티션 수 = Consumer 수 | 이상적인 균형 (최고의 부하 분산) |
Consumer 수 > 파티션 수 | 일부 Consumer가 놀게 됨 (리소스 낭비) |
확장성과 탄력성을 위해 파티션 수 ≥ Consumer 수를 유지하는 것이 일반적입니다.
Kafka 단일 노드 환경에서의 파티션 구조, 메시지 흐름, Consumer 전략을 정리했습니다.
테스트 환경을 구성하거나 Kafka 개념을 학습하는 데 필수적인 지식입니다
핵심 요약
- 단일 노드는 학습/테스트에 적합하지만 운영에는 부적합
- 모든 파티션이 한 브로커에 몰리며, 부하 분산이 어려움
- Consumer 수와 파티션 수의 균형이 중요
- 파티션 수 ≥ Consumer 수가 효율적
관련 글 링크
'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 |
3. Kafka 단일 파티션 기반 리더-팔로워 동작 원리: 장애복구 (0) | 2025.03.28 |
1. 실시간 데이터 처리 플랫폼 Apache Kafka 이해하기 (0) | 2025.03.28 |