1.시스템&인프라/Apache Kafka

2. Kafka 단일 노드 동작 원리: 파티션 분배부터 Consumer 전략까지

쿼드큐브 2025. 3. 28. 15:40
728x90

Kafka 단일 노드 환경에서의 동작 원리를 정리합니다. 파티션 분배 구조, 메시지 저장 방식, Producer에서 Consumer까지의 데이터 흐름, 그리고 효율적인 Consumer 전략까지 실습 기반으로 이해할 수 있습니다. 

 

Kafka 단일 노드 동작 원리: 파티션 분배부터 Consumer 전략까지

 

목차

1. Kafka 단일 노드 구성:Test 환경

2. 파티션 구성과 브로커 동작 방식

3. Producer→Broker→Consumer: 메세지 흐름

4. Consumer 수에 따른 처리 방식 비교

5. 효율적인 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 단일 노드에서의 메시지 처리 흐름은 다음과 같습니다:

  1. Producer가 메시지를 생성하여 broker-1에 전송합니다.
  2. Broker는 내부 알고리즘(라운드로빈 등)에 따라 메시지를 3개의 파티션에 나눠 저장합니다.
  3. Consumer Group이 구성되어 있다면 각 Consumer가 특정 파티션의 데이터를 읽습니다.
  4. 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 수가 효율적

 

관련 글 링크

 

 

 

728x90