Kafka Streams 윈도우 도입기
박지환 · 컬리 · 컬리 기술 블로그
소개
재고 정산 처리에 Kafka Streams window를 도입하며 겪은 이야기
AI 핵심 요약
배치 정산의 실시간성과 특정 시간대에 몰리는 재고 변동 데이터의 DB 부하를 개선하기 위해, Kafka 이벤트 처리와 Kafka Streams의 5분 텀블링 윈도우를 도입했습니다. 중간 집계 발행을 막고 윈도우 종료 후 최종 결과만 내보내도록 구성했으며, 데이터 생성 시각과 Kafka 발행 시각의 차이는 TimestampExtractor로 보정했습니다. 이벤트가 없어 스트림 시간이 멈추는 문제는 Processor 내부 전달이나 WindowStore 직접 발행으로 해결되지 않았고, 파티션별 외부 더미 이벤트를 주입해 시간을 전진시키는 방식으로 풀었습니다. 윈도우 정산은 단순히 시간을 나누는 작업이 아니라 이벤트 시간, 지연 허용 범위, 파티션별 진행, 자정 경계와 재계산 정책을 함께 정의해야 한다는 점을 확인했습니다.
- 윈도우 집계의 기준 시각이 Kafka 발행 시각과 다르면 TimestampExtractor로 도메인의 생성 시각을 이벤트 시간으로 지정하세요.
- Grace period는 늦게 도착한 이벤트를 허용하지만, 윈도우 종료와 결과 발행은 스트림 시간이 충분히 전진해야 이뤄집니다.
- Processor 내부의 forward()는 소스 토픽의 이벤트 시간을 진전시키지 않으며, WindowStore를 직접 읽어 발행하면 중복 처리 위험이 있습니다.
- 유휴 파티션까지 윈도우를 닫으려면 파티션별로 외부 더미 이벤트를 주입해 스트림 시간을 전진시켜야 합니다.
- 일 단위 정산에서는 자정 경계의 늦은 이벤트와 장애 후 재계산 정책을 설계 단계에서 함께 정해야 합니다.
비슷한 학습 자료
서비스 조직에서 Kafka를 사용할 때 알아 두어야 할 것들 (4)
엔지니어링데이 2025 · YouTube
Kafka 파티션 증설 없이 처리량 한계 돌파하기: Parallel Consumer 적용기 #우아콘2025 #우아한형제들
우아콘 2025 · YouTube
토스증권 Apache Kafka 데이터센터 이중화 구성 #1
강병수 · 토스 기술 블로그
입수는 Datalake로! (feat. Iceberg)
조승완 · 토스 기술 블로그
ksqlDB를 활용한 증권사의 실시간 데이터 처리하기
강병수 · 토스 기술 블로그
컬리 검색이 카프카를 들여다본 이야기 2
서민우 · 컬리 기술 블로그