핵심 인사이트 (3줄 요약)

  1. 본질: Kafka에서 오프셋(Offset)은 파티션 내 메시지의 순서 번호이고, 컨슈머 그룹(Consumer Group)은 하나의 토픽을 병렬로 소비하는 컨슈머 집합으로 파티션이 그룹 내 컨슈머에 1:1로 할당된다.
  2. 가치: 오프셋 기반 소비는 "메시지가 한 번 전달되면 삭제되는" 전통 MQ와 달리, 컨슈머가 자신의 소비 위치를 독립적으로 관리하므로 다른 컨슈머 그룹이 같은 메시지를 독립적으로 재소비할 수 있다. 이것이 Pub/Sub 멀티 컨슈머 패턴을 가능하게 한다.
  3. 판단 포인트: 오프셋 커밋(Commit)의 세 가지 의미 보장: ①At-Most-Once(최대 1회): 처리 전 커밋 → 실패 시 손실, ②At-Least-Once(최소 1회): 처리 후 커밋 → 실패 시 재처리(중복 가능), ③Exactly-Once(정확히 1회): 트랜잭션 + idempotent 프로듀서. 대부분의 실무는 At-Least-Once + 멱등 처리로 구현한다.

Ⅰ. 개요 및 필요성

┌────────────────────────────────────────────────────────┐
│       Kafka 오프셋 & 컨슈머 그룹 구조                   │
├────────────────────────────────────────────────────────┤
│                                                         │
│ 파티션 0: [msg0:off=0] [msg1:off=1] [msg2:off=2] ...   │
│                                   ↑                    │
│                        Consumer A가 off=2까지 읽음      │
│                        (Committed Offset = 3)          │
│                                                         │
│ Consumer Group-1: Consumer A(P0), Consumer B(P1)       │
│ Consumer Group-2: Consumer X(P0), Consumer Y(P1)       │
│                                                         │
│ 두 그룹은 서로 독립 — 같은 메시지를 별도 오프셋으로 소비 │
└────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: Kafka 오프셋은 책의 페이지 북마크다. 독자(컨슈머)마다 자신의 북마크를 독립적으로 관리하여 같은 책(토픽)을 다른 속도로 읽을 수 있다.

Ⅱ. 아키텍처 및 핵심 원리

컨슈머 그룹 파티션 할당 규칙

파티션 수 = 3, 컨슈머 수 = 2:
  Consumer A → Partition 0, 1 (2개 담당)
  Consumer B → Partition 2    (1개 담당)

파티션 수 = 2, 컨슈머 수 = 3:
  Consumer A → Partition 0
  Consumer B → Partition 1
  Consumer C → (유휴 — 담당 파티션 없음)

규칙: 컨슈머 수 > 파티션 수 → 일부 컨슈머 유휴

오프셋 커밋 전략

전략특징위험
Auto Commitenable.auto.commit=true처리 전 커밋 → 손실 가능
Manual SynccommitSync()처리 후 커밋, 성능 저하
Manual AsynccommitAsync()비동기, 순서 보장 필요
  • 📢 섹션 요약 비유: 컨슈머 그룹 파티션 할당은 바리스타 배치다. 커피 머신(파티션) 3대에 바리스타(컨슈머) 2명이면 한 명이 2대를 담당한다. 바리스타가 4명이면 1명은 할 일이 없다.

Ⅲ. 비교 및 연결

비교Kafka 오프셋RabbitMQ ACK전통 MQ
소비 기록컨슈머 측 오프셋브로커 ACK브로커 메시지 삭제
재처리오프셋 리셋재전송 요청불가
멀티 소비그룹별 독립 오프셋큐 방식 1회불가
  • 📢 섹션 요약 비유: Kafka 오프셋은 스트리밍 서비스 시청 기록이다. Netflix가 내 시청 위치를 기억해서 어디서든 이어보기가 가능하다. 전통 TV(전통 MQ)는 방송이 지나가면 다시 볼 수 없다.

Ⅳ. 실무 적용 및 기술사 판단

Consumer Lag 모니터링

  • Consumer Lag = Latest Offset - Committed Offset.
  • Lag이 증가 → 컨슈머 처리 속도 < 프로듀서 생산 속도.
  • 대응: 컨슈머 인스턴스 수 증가 or 파티션 수 증가.

Kafka Rebalancing

  • 컨슈머 추가·제거 시 파티션 재할당 발생 → 짧은 소비 중단(Rebalance).

  • 최소화 방법: Sticky Assignor, Static Membership.

  • 📢 섹션 요약 비유: Consumer Lag은 콜센터 대기열이다. 상담 전화(메시지)가 처리 속도보다 빠르게 쌓이면 대기 줄(Lag)이 길어진다. 상담원(컨슈머)을 더 추가하면 해소된다.


Ⅴ. 기대효과 및 결론

기대효과내용
독립 소비다수 컨슈머 그룹이 같은 토픽 독립 소비
재처리 가능오프셋 리셋으로 과거 메시지 재소비
수평 확장파티션 수에 비례한 컨슈머 병렬 확장

Kafka 3.x에서 도입된 KRaft 모드는 ZooKeeper 없이 Kafka 자체가 메타데이터·오프셋을 관리하며, 컨슈머 그룹 재조정 알고리즘이 더 효율적으로 개선되었다.

  • 📢 섹션 요약 비유: KRaft는 도시 교통 관제 시스템이 외부 컨트롤 타워(ZooKeeper) 없이 자체 AI로 신호를 제어하는 것이다. 더 빠르고 안정적으로 컨슈머 그룹을 관리한다.

📌 관련 개념 맵

개념연결 포인트
파티션오프셋이 관리되는 단위 로그
Consumer LagCommitted Offset 대비 최신 오프셋 차이
Rebalancing컨슈머 추가·제거 시 파티션 재할당
Exactly-Once트랜잭션+멱등 프로듀서의 의미 보장
KRaftZooKeeper 없는 자체 메타데이터 관리

📈 관련 키워드 및 발전 흐름도

[전통 MQ — 소비 후 메시지 삭제, 재처리 불가]
    │
    ▼
[Kafka 오프셋 — 컨슈머별 독립 소비 위치 관리]
    │
    ▼
[컨슈머 그룹 — 파티션 병렬 소비 + 독립 재처리]
    │
    ▼
[Exactly-Once 의미론 — 트랜잭션 기반 중복 방지]
    │
    ▼
[KRaft — ZooKeeper 없는 Kafka 자체 완결 관리]

👶 어린이를 위한 3줄 비유 설명

  1. Kafka 오프셋은 책 북마크예요! 여러 독자(컨슈머 그룹)가 같은 책(토픽)을 각자 북마크를 꽂아서 독립적으로 읽어요.
  2. 컨슈머 그룹은 바리스타 팀이에요 — 커피 머신(파티션) 개수만큼 바리스타를 배정해서 빠르게 주문(메시지)을 처리해요!
  3. 처리 속도가 느리면 대기 줄(Consumer Lag)이 길어지니 바리스타(컨슈머)를 더 추가해야 해요!