분산 시스템 환경에서 Kafka Consumer 오프셋 이동하기
이보람 컬리 · 컬리 기술 블로그
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는 버전에 따라 동작과 제약이 다르므로, 여러 컨슈머 그룹이 같은 토픽을 구독하는 경우 버전별 문서를 확인해야 한다.
소개
Spring Kafka 활용한 오프셋 이동 및 메시지 재처리 방법
비슷한 학습 자료
컨퍼런스 엔지니어링데이 2025
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (5)
컨퍼런스 엔지니어링데이 2025
네이버 사내 기술 교류 행사인 NAVER ENGINEERING DAY 2025 에서 발표되었던 세션을 공개합니다. [발표 내용] Consumer Group Protocol v2를 소개합니다. [발표 대상] 조직에서 Kafka를 사용하거나 관심 있는 분들 Consumer Group Protocol 에 대해 관심 있는 분들 [목차] - Consumer Group Protocol (v1) 특징과 문제점 - Consumer Group Protocol (v2) 특징 - 장점 - 성능 - 사용법 - 설정 - 툴 - 마이그레이션
백엔드 네트워크
컨퍼런스 엔지니어링데이 2025
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (5)
컨퍼런스 엔지니어링데이 2025
네이버 사내 기술 교류 행사인 NAVER ENGINEERING DAY 2025 에서 발표되었던 세션을 공개합니다. [발표 내용] Consumer Group Protocol v2를 소개합니다. [발표 대상] 조직에서 Kafka를 사용하거나 관심 있는 분들 Consumer Group Protocol 에 대해 관심 있는 분들 [목차] - Consumer Group Protocol (v1) 특징과 문제점 - Consumer Group Protocol (v2) 특징 - 장점 - 성능 - 사용법 - 설정 - 툴 - 마이그레이션
백엔드 네트워크
컨퍼런스 엔지니어링데이 2025
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (4)
컨퍼런스 엔지니어링데이 2025
네이버 사내 기술 교류 행사인 NAVER ENGINEERING DAY에서 발표되었던 세션을 공개합니다. 1,2편의 경우 아쉽게도 사내용만 발표되어 3,4편 만 외부공개가 진행되는 점 양해 부탁드립니다. [발표 내용] Kafka 프로듀서 최적화하기 + 압축 기능 활용하기 [목차] 1. 배경: Kafka 자료 구조 - Kafka 자료 구조는 어떻게 생겼는가? 2. 프로듀서 동작 방식 및 최적화 방법 - 프로듀서와 브로커는 어떻게 메시지를 주고받는가? - linger.ms, batch.size, buffer.memory 사용법 3. 압축 동작 방식 및 최적화 방법 - (재)압축은 어떻게 이루어지는가? - compression.type, compression.{type}.level 사용법
백엔드 네트워크 로드맵 1개에 담김