
분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기
두줄요약
Spring Kafka의 seek 기능으로 컨슈머 중단 없이 Kafka 메시지를 재처리하는 방식을 소개했습니다. Redis Pub/Sub로 요청을 전파해 분산된 모든 컨슈머에서 오프셋을 이동했습니다.
문제 상황
- 메시지 처리 실패에도 오프셋이 커밋되어 재처리가 필요한 상황
- Kafka CLI 기반 오프셋 재설정의 관리자 권한 의존과 컨슈머 그룹 중단 제약
- 중단·재기동 과정의 가용성 저하, Lag 증가, 다른 컨슈머 처리 중단
선택 이유
- Kafka CLI와 Admin API의 비활성 컨슈머 그룹 요구 사항으로 무중단 변경 불가
- Spring Kafka
ConsumerSeekAware·ConsumerSeekCallback기반seekAPI의 실행 중 오프셋 이동 지원 AbstractConsumerSeekAware를 통한 토픽·파티션별 콜백 관리 단순화
구조와 흐름
- HTTP API로 토픽, 선택 파티션, 이동 시작 시각을 포함한 오프셋 이동 요청 수신
- 요청을 Redis Pub/Sub 채널에 게시하고 분산 서버의 Redis 리스너로 전파
- 각 서버의 Spring Kafka 컨슈머가 폴링 전 seek 요청을 처리해 지정 시점부터 메시지 재처리
성능/운영 포인트
- 애플리케이션·컨슈머 그룹 중단 없이 컨슈머 그룹 수준의 재처리 지원
- 동일 전파 구조를 활용한 특정 컨슈머 그룹 또는 컨슈머의 시작·중지 기능 확장
- 구버전 콜백 조회 API에서 다중 컨슈머 그룹·동일 토픽 구독 시 콜백 누락 가능성


