Zettelkasten

카프카에서 파티션과 컨슈머 사이의 관계

·수정 2026.04.23·수정 2

요약

  • 핵심 아이디어 한 줄 요약
  • “이 노트는 왜 중요한가?” → 맥락 설명

본문

파티션과 컨슈머 사이의 관계

  • 카프카 토픽의 파티션은 메시지가 실제로 저장되는 단위, 각 파티션 내에세 메시지는 순서대로 쌓이고, 각 메시지에는 0부터 시작하는 오프셋을 붙인다.
  • 컨슈머 그룹 내에세 하나의 파티션은 반드시 하나의 컨슈머에게만 할당된다.
    • 파티션 4개, 컨슈머 2개면 각 컨슈머가 2개씩 맡는다.

오프셋 관리

  • 컨슈머가 메시지를 읽으면 "여기까지 읽었다"는 정보를 Kafka의 내부 토픽(__consumer_offsets)에 커밋함, 이 커밋은 컨슈머 그룹 단위 X 파티션 단위로 저장됨
  • 커밋 시점
    • 자동 커밋: 일정 주기마다 마지막으로 읽은 오프셋을 자동 커밋
    • 수동 커밋: 어플리케이션이 처리 완료 후 명시적 커밋

컨슈머가 죽었을 때 -- 리밸런싱

  • 컨슈머 A-1이 죽으면 Kafka 브로커는 일정 시간 동안 하트 비트가 오지 않는 것을 감지
  • 리밸런싱이 트리거됨, 컨슈머 그룹내에세 파티션 할당을 다시 하는 과정
  • A-1이 맡던 파티션 2가 A-2에게 재할당 됨, 이때 A-2는 __consumer_offsets에 기록된 마지막 커밋 오프셋부터 읽기 시작함
  • 여기서 2가지 시나리오로 갈림
    • A-1이 오프셋 57까지 커밋 후 죽은 경우: A-2는 오프셋 58부터 읽는다.
    • A-1이 오프셋 55까지만 커밋하고, 56-57은 읽었지만 커밋 전에 죽은 경우
      • A-2는 오프셋 56부터 다시 읽는다. 56,57이 중복처리 되기때문에 멱등성 처리가 필요함

참고