Kafka Messaging

Kafka 소비 흐름

Kafka 기반 Nest 마이크로서비스는 메시지 발행 코드와 함께 파티션 순서, offset 커밋, 재처리, 멱등성 보장을 설계해야 합니다.

01

이벤트 발행

도메인 이벤트를 topic과 key 기준으로 발행해 같은 key의 순서를 유지합니다.

produce
02

파티션 배치

Kafka는 key hash로 partition을 선택하고 partition 안에서 순서를 보장합니다.

partition
03

그룹 소비

consumer group 안의 인스턴스들이 partition을 나눠 처리하며 수평 확장됩니다.

group
04

처리와 커밋

DB 반영이나 외부 호출이 성공한 뒤 offset을 커밋해야 손실을 줄입니다.

offset
05

재시도와 격리

실패 메시지는 retry topic 또는 DLQ로 보내 전체 소비가 막히지 않게 합니다.

recovery
Key
순서 보장 단위 주문 ID, 사용자 ID처럼 같은 순서로 처리되어야 하는 기준을 key로 둡니다.
파티션 쏠림 한계
Offset
처리 위치 기록 커밋 시점이 너무 빠르면 손실, 너무 늦으면 중복 처리가 늘어납니다.
at-least-once
Idempotency
중복 처리 안전성 메시지는 재전달될 수 있으므로 event id 기반 중복 방지 테이블이나 상태 검사가 필요합니다.
필수 안전장치

운영 확인 기준

Lag 감시 consumer lag가 증가하면 처리량, 장애, 특정 partition 쏠림을 확인합니다.
DLQ 정책 실패 메시지를 버리지 말고 원인과 재처리 기준을 기록합니다.
스키마 호환성 이벤트 payload 변경은 소비자 버전과 역호환성을 고려해야 합니다.