피드로 돌아가기
Apache Flink + RocksDB 튜닝으로 광고 Frequency Capping 실시간 집계를 일주일까지 확장하기
토스 기술블로그토스 기술블로그
Backend

Apache Flink + RocksDB 튜닝으로 광고 Frequency Capping 실시간 집계를 일주일까지 확장하기

Flink+RocksDB 튜닝으로 7일 실시간 집계 구현 및 Redis 조회 4회→1회 단축

2026년 4월 16일35advanced

Context

기존 Airflow 기반 Head/Mid/Tail 3계층 배치 구조로 인해 서빙 시 Redis를 최대 4회 조회하는 오버헤드 발생. 이벤트 단위의 정밀한 Sliding Window 집계 구현의 한계와 다수의 DAG 관리로 인한 운영 복잡도 증가가 병목 지점으로 작용.

Technical Solution

  • 윈도우 규모별 병목 패턴 차이에 따른 3개 앱(Minutes/Hours/Days) 분리 설계
  • RocksDB Write Stall 해결을 위한 Write Buffer Manager 튜닝 및 Filter Block Cache 최적화 통한 CPU 포화 해소
  • 7일치 대규모 State 처리를 위한 Flink Changelog 도입 및 Checkpoint I/O 병목 제거
  • 백필(카운트 누적)과 캐치업(타이머 등록) 파이프라인 분리를 통한 초기 데이터 적재 정합성 확보
  • Native Savepoint와 Changelog 간 ID 불일치 교착 상태 해결을 위해 CANONICAL Savepoint로 전환
  • State를 Single Source of Truth(SSOT)로 정의하여 장애 시 Redis 재구성이 가능한 구조 설계

- Flink State 규모 급증 시 Checkpoint I/O 병목 확인 및 Changelog 도입 검토 - 실시간 전환 시 '단순 누적'과 '타이머 기반 만료' 로직의 충돌 여부 확인 - RocksDB 기반 StateBackend 사용 시 Filter Block Cache Miss 및 Write Stall 지표 모니터링 - Savepoint 전략 선택 시 Native와 Canonical 방식의 내부 동작 차이 검증

원문 읽기