목록 보기
분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기
백엔드

분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기

마켓컬리
마켓컬리
2024년 12월 2일

두줄요약

Spring Kafka의 seek 기능으로 컨슈머 중단 없이 Kafka 메시지를 재처리하는 방식을 소개했습니다. Redis Pub/Sub로 요청을 전파해 분산된 모든 컨슈머에서 오프셋을 이동했습니다.

문제 상황

  • 메시지 처리 실패에도 오프셋이 커밋되어 재처리가 필요한 상황
  • Kafka CLI 기반 오프셋 재설정의 관리자 권한 의존과 컨슈머 그룹 중단 제약
  • 중단·재기동 과정의 가용성 저하, Lag 증가, 다른 컨슈머 처리 중단

선택 이유

  • Kafka CLI와 Admin API의 비활성 컨슈머 그룹 요구 사항으로 무중단 변경 불가
  • Spring Kafka ConsumerSeekAware·ConsumerSeekCallback 기반 seek API의 실행 중 오프셋 이동 지원
  • AbstractConsumerSeekAware를 통한 토픽·파티션별 콜백 관리 단순화

구조와 흐름

  • HTTP API로 토픽, 선택 파티션, 이동 시작 시각을 포함한 오프셋 이동 요청 수신
  • 요청을 Redis Pub/Sub 채널에 게시하고 분산 서버의 Redis 리스너로 전파
  • 각 서버의 Spring Kafka 컨슈머가 폴링 전 seek 요청을 처리해 지정 시점부터 메시지 재처리

성능/운영 포인트

  • 애플리케이션·컨슈머 그룹 중단 없이 컨슈머 그룹 수준의 재처리 지원
  • 동일 전파 구조를 활용한 특정 컨슈머 그룹 또는 컨슈머의 시작·중지 기능 확장
  • 구버전 콜백 조회 API에서 다중 컨슈머 그룹·동일 토픽 구독 시 콜백 누락 가능성

다음 읽기

#Kafka 주제를 이어서 읽기

분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기

Spring Kafka의 seek 기능으로 컨슈머를 멈추지 않고 오프셋을 이동하는 방법을 정리했습니다. 분산 환경에서는 HTTP API와 Redis Pub/Sub로 요청을 전파해 그룹 단위 재처리를 구현했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...