분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기
이보람 · 컬리 · 컬리 기술 블로그
소개
Spring Kafka 활용한 오프셋 이동 및 메시지 재처리 방법
AI 핵심 요약
메시지 처리가 누락됐을 때 기존 Kafka CLI 방식은 권한 있는 담당자에게 의존하고 컨슈머 그룹을 중단해야 해, 가용성과 처리 지연에 부담을 줬다. Kafka Admin API도 그룹이 비어 있어야 하므로 무중단 요구를 충족하지 못했고, Spring Kafka의 `AbstractConsumerSeekAware`와 `ConsumerSeekCallback`을 사용해 실행 중인 컨슈머의 파티션 오프셋을 이동하는 방식을 선택했다. 여러 호스트에 요청을 적용하기 위해 HTTP API로 토픽·파티션·기준 시각을 받고 Redis Pub/Sub으로 각 서버에 전파해, 각 컨슈머가 자체적으로 seek를 수행하도록 구성했다. 이 방식으로 컨슈머 그룹을 중단하지 않고 분산 환경에서 메시지를 재처리할 수 있었으며, 기술 선택 전 요구 사항과 각 API의 제약을 확인하고 내부 동작을 이해하는 것이 중요하다는 점을 얻었다.
- Kafka CLI와 Admin API의 오프셋 재설정은 컨슈머 그룹이 비어 있어야 하므로, 무중단 변경 요구에 적합하지 않다.
- Spring Kafka의 `ConsumerSeekAware`와 `ConsumerSeekCallback`을 이용하면 컨슈머를 멈추지 않고 파티션별 오프셋을 이동할 수 있다.
- 분산 환경에서는 HTTP API로 요청을 받고 Redis Pub/Sub으로 각 서버에 전파해, 각 호스트의 컨슈머가 로컬 콜백을 실행하도록 구성할 수 있다.
- 오프셋 이동 요청에 토픽, 파티션, 기준 시각을 포함하면 재처리 범위를 상황에 맞게 지정할 수 있다.
- Spring Kafka 콜백 조회 API는 버전에 따라 동작과 제약이 다르므로, 여러 컨슈머 그룹이 같은 토픽을 구독하는 경우 버전별 문서를 확인해야 한다.
비슷한 학습 자료
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (5)
엔지니어링데이 2025 · YouTube
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (5)
엔지니어링데이 2025 · YouTube
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (4)
엔지니어링데이 2025 · YouTube
Kafka 파티션 증설 없이 처리량 한계 돌파하기: Parallel Consumer 적용기 #우아콘2025 #우아한형제들
우아콘 2025 · YouTube
토스증권 Apache Kafka 데이터센터 이중화 구성 #3: Offset Sync
김용우 · 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #1
강병수 · 토스 기술 블로그