피드로 돌아가기
토스 기술블로그Backend
원문 읽기
Apache Flink + RocksDB 튜닝으로 광고 Frequency Capping 실시간 집계를 일주일까지 확장하기
Flink+RocksDB 튜닝으로 7일 실시간 집계 구현 및 Redis 조회 4회→1회 단축
AI 요약
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 방식의 내부 동작 차이 검증