Dynamic Repartitioning for Time Series Workloads (Netflix)
Author: Rajiv Shringi, Kaidan Fullerton, Oleksii Tkachuk, Kartik Sathyanarayanan | Source: Netflix Tech Blog | Published: 2026-06-03
한 줄 요약
Netflix TimeSeries Abstraction이 Cassandra의 wide partition으로 인한 초 단위 tail latency를 해소하기 위해, 테이블 단위 재파티셔닝과 ID 단위 동적 분할(읽기 경로 탐지 → 비동기 분할 → Bloom filter 투명 라우팅)을 도입.
핵심 주장/내용
- wide partition + 고읽기 처리량 → 초 단위 tail latency, 타임아웃, GC pause, CPU 고갈, thread queueing. 클러스터 스케일업은 비용만 늘리는 미봉책
- Solution 1 — Time Slice 재파티셔닝: 백그라운드 워커가 파티션 히스토그램(nodetool tablehistograms) 모니터 → 설정 density(2~10 MiB) 미달 시 미래 Time Slice의 time_bucket 간격 조정(예: 60s→604800s). 단, 테이블 대부분이 문제일 때만 유효
- Solution 2 — ID 단위 동적 분할: 일부 ID만 wide한 경우. 3단계 — ① Detection(읽기 시 바이트 추적, 임계 초과 시 Kafka 이벤트, immutable 파티션만 우선) ② Planning & Splitting(전체 파티션 1회 읽어 split plan, checkpointing, EventBucketPartitionSplitStrategy로 event bucket 추가, ultra-wide는 capping) ③ Serving(완료 split을 in-memory Bloom filter에 로드 → 읽기마다 체크해 투명 라우팅)
- 신뢰 구축: pre/post-split 체크섬 일치 검증, Data Bridge(Spark)로 오프라인 검증, shadow 모드 bytes 비교, 단계적 롤아웃. 원본 wide partition은 절대 삭제 안 함(안전 fallback)
- 추가 옵션: Partial Returns(SLO 초과 시 수집분만 반환), Block IDs(스팸/테스트 ID 차단)
주요 수치 / 사실
- wide partition 평균 읽기 지연 초 단위 → low double-digit ms; tail latency 수 초 → ~200ms 이하
- 500MB+ 파티션도 페이지네이션으로 가용성 유지(41초 소요하되 타임아웃 없음)
- Bloom filter 체크 지연 single-digit microseconds(라우팅 사실상 invisible)
- “다른 데이터스토어에도 동일 기법 적용 가능”
관련 위키
- Partition Sizing and Management
- Distributed Systems Reliability
- Knowledge Graph Infrastructure
- Large-Scale Data Migration
Source: 원문 보기