Kafka Streams 윈도우 도입기
박지환 컬리 · 컬리 기술 블로그
AI 핵심 요약
배치 정산의 실시간성과 특정 시간대에 몰리는 재고 변동 데이터의 DB 부하를 개선하기 위해, Kafka 이벤트 처리와 Kafka Streams의 5분 텀블링 윈도우를 도입했습니다. 중간 집계 발행을 막고 윈도우 종료 후 최종 결과만 내보내도록 구성했으며, 데이터 생성 시각과 Kafka 발행 시각의 차이는 TimestampExtractor로 보정했습니다. 이벤트가 없어 스트림 시간이 멈추는 문제는 Processor 내부 전달이나 WindowStore 직접 발행으로 해결되지 않았고, 파티션별 외부 더미 이벤트를 주입해 시간을 전진시키는 방식으로 풀었습니다. 윈도우 정산은 단순히 시간을 나누는 작업이 아니라 이벤트 시간, 지연 허용 범위, 파티션별 진행, 자정 경계와 재계산 정책을 함께 정의해야 한다는 점을 확인했습니다.
- 윈도우 집계의 기준 시각이 Kafka 발행 시각과 다르면 TimestampExtractor로 도메인의 생성 시각을 이벤트 시간으로 지정하세요.
- Grace period는 늦게 도착한 이벤트를 허용하지만, 윈도우 종료와 결과 발행은 스트림 시간이 충분히 전진해야 이뤄집니다.
- Processor 내부의 forward()는 소스 토픽의 이벤트 시간을 진전시키지 않으며, WindowStore를 직접 읽어 발행하면 중복 처리 위험이 있습니다.
- 유휴 파티션까지 윈도우를 닫으려면 파티션별로 외부 더미 이벤트를 주입해 스트림 시간을 전진시켜야 합니다.
- 일 단위 정산에서는 자정 경계의 늦은 이벤트와 장애 후 재계산 정책을 설계 단계에서 함께 정해야 합니다.
소개
재고 정산 처리에 Kafka Streams window를 도입하며 겪은 이야기
비슷한 학습 자료
컨퍼런스 엔지니어링데이 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개에 담김
문서 서민우