
백엔드
분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기
두줄요약
Spring Kafka의 seek 기능으로 컨슈머를 멈추지 않고 오프셋을 이동하는 방법을 정리했습니다. 분산 환경에서는 HTTP API와 Redis Pub/Sub로 요청을 전파해 그룹 단위 재처리를 구현했습니다.
문제 상황
- 분산 환경의 Kafka Consumer에서 메시지 누락이나 의도적 재처리를 위해 오프셋 이동이 필요한 상황
- 기존 CLI 기반 재설정은 컨슈머 그룹 비활성 상태를 요구해 중단과 재기동이 불가피한 제약
- 권한 의존성과 가용성 저하, lag 처리 지연, 다른 컨슈머 영향이 함께 발생하는 문제
원인 분석
- Kafka의 오프셋 재설정과 Admin API가 모두 비활성 컨슈머 그룹을 전제로 하는 구조
- 특정 토픽, 파티션만 조정해도 컨슈머 그룹 전체 중단이 필요해 분산 운영에 비효율적
해결 방법
- Spring Kafka의 ConsumerSeekAware와 ConsumerSeekCallback, AbstractConsumerSeekAware를 활용한 런타임 오프셋 이동
- seekToBeginning 등 seek 계열 API로 애플리케이션 중단 없이 재처리 수행
- HTTP API와 Redis Pub/Sub로 분산 서버에 요청을 전파해 컨슈머 그룹 수준으로 확장
