본문으로 이동
문서

Kafka Streams 윈도우 도입기

박지환 컬리 · 컬리 기술 블로그

원문 보기

AI 핵심 요약

배치 정산의 실시간성과 특정 시간대에 몰리는 재고 변동 데이터의 DB 부하를 개선하기 위해, Kafka 이벤트 처리와 Kafka Streams의 5분 텀블링 윈도우를 도입했습니다. 중간 집계 발행을 막고 윈도우 종료 후 최종 결과만 내보내도록 구성했으며, 데이터 생성 시각과 Kafka 발행 시각의 차이는 TimestampExtractor로 보정했습니다. 이벤트가 없어 스트림 시간이 멈추는 문제는 Processor 내부 전달이나 WindowStore 직접 발행으로 해결되지 않았고, 파티션별 외부 더미 이벤트를 주입해 시간을 전진시키는 방식으로 풀었습니다. 윈도우 정산은 단순히 시간을 나누는 작업이 아니라 이벤트 시간, 지연 허용 범위, 파티션별 진행, 자정 경계와 재계산 정책을 함께 정의해야 한다는 점을 확인했습니다.

  • 윈도우 집계의 기준 시각이 Kafka 발행 시각과 다르면 TimestampExtractor로 도메인의 생성 시각을 이벤트 시간으로 지정하세요.
  • Grace period는 늦게 도착한 이벤트를 허용하지만, 윈도우 종료와 결과 발행은 스트림 시간이 충분히 전진해야 이뤄집니다.
  • Processor 내부의 forward()는 소스 토픽의 이벤트 시간을 진전시키지 않으며, WindowStore를 직접 읽어 발행하면 중복 처리 위험이 있습니다.
  • 유휴 파티션까지 윈도우를 닫으려면 파티션별로 외부 더미 이벤트를 주입해 스트림 시간을 전진시켜야 합니다.
  • 일 단위 정산에서는 자정 경계의 늦은 이벤트와 장애 후 재계산 정책을 설계 단계에서 함께 정해야 합니다.

소개

재고 정산 처리에 Kafka Streams window를 도입하며 겪은 이야기

비슷한 학습 자료

컨퍼런스 엔지니어링데이 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개에 담김

컨퍼런스 우아콘 2025

[세션 설명] 배달의민족 앱 내의 이벤트 전송 플랫폼인 LaaS(Logistics as a Service)에서 Kafka 처리량 한계를 겪으면서 파티션을 늘리지 않고도 처리량을 확장할 수 있는 방안을 고민한 경험을 공유합니다. 이 과정에서 Parallel Consumer 라이브러리를 도입하게 된 배경과 적용 과정, 운영 중 마주쳤던 이슈 및 해결 방안, 그리고 실제 운영 성과를 중심으로 소개합니다. [발표자 소개] 남민정(서버 개발자)

백엔드 로드맵 1개에 담김

문서 강병수

토스증권은 데이터센터 장애 상황에도 유저에게 정상적으로 서비스를 제공하기 위해 대부분의 시스템을 이중화했습니다. Kafka 이중화 구성에 대한 개요를 소개드려요.

백엔드 데이터베이스

문서 조승완

오늘은 데이터 효율성을 높이기 위해 도입한 ‘Iceberg’에 대해 이야기해 보려고 합니다. Iceberg의 기본적인 정보는 다른 곳에서도 쉽게 찾아볼 수 있지만, 저는 특히 유지보수와 운영 측면에 집중해서 이야기하려 합니다.

데이터베이스

문서 강병수

이번 글에서 토스증권 실시간 데이터 프로세싱에 활용 중인 ksqlDB에 대해서 소개하려고 합니다.

백엔드 데이터베이스

문서 서민우

카프카 스트림즈를 추가하다

백엔드 데이터베이스