피드로 돌아가기
Guaranteed Message Ordering in Apache Kafka: What It Really Takes in Production (Spring Boot)
Dev.toDev.to
Backend

Producer-Broker-Consumer 전 계층 설계를 통한 Kafka 메시지 순서 보장 전략

Guaranteed Message Ordering in Apache Kafka: What It Really Takes in Production (Spring Boot)

Yogesh Kale2026년 4월 22일20advanced

Context

@RetryableTopic 도입 시 메시지가 Retry Topic으로 이동하며 발생하는 파티션 내 순서 보장 파괴 문제 분석. Kafka의 기본 순서 보장 범위가 Topic이 아닌 Partition 단위라는 제약 사항에 따른 아키텍처적 대응 방안 필요.

Technical Solution

  • 비즈니스 의미를 가진 Stable Partition Key 설정을 통해 동일 엔티티의 이벤트를 동일 파티션으로 라우팅하는 구조 설계
  • Producer 단계의 enable.idempotence=true 및 max.in.flight.requests.per.connection=1 설정으로 네트워크 재전송 시 순서 뒤바뀜 방지
  • Consumer의 concurrency=1 설정을 통한 단일 스레드 처리 및 @Async 핸드오프 제거로 처리 순서 일관성 유지
  • enable.auto.commit=false와 AckMode.RECORD 조합을 통한 레코드 단위 정밀한 오프셋 제어 구현
  • @RetryableTopic 대신 DefaultErrorHandler 기반의 Blocking Retry를 채택하여 순서 보장을 위해 처리량(Throughput)을 희생한 Trade-off 결정
  • CooperativeStickyAssignor 및 Static Group Membership 적용으로 리밸런싱 시 발생하는 메시지 중복 및 순서 역전 최소화

- 파티션 개수 변경 시 기존 키의 해시 맵핑이 변경되므로 운영 중 파티션 확장 금지 및 사전 오버 프로비저닝 검토 - 메시지 페이로드 내 Sequence Number를 포함하여 소비자 단계에서 Gap Detection 로직 구현 - Consumer Lag 및 Offset Gap 모니터링을 통해 순서 보장 시스템의 헬스 체크 지표 설정 - 멱등성 처리를 위해 Topic + Partition + Offset 조합의 중복 제거 키 설계

원문 읽기