
Kafka·Flink 스트리밍 파이프라인에서 S3 카산드라 백업 직접 조회 방식까지의 아키텍처 진화기
넷플릭스는 급증하는 시계열(TimeSeries) 데이터의 보존 비용을 절감하기 위해 계층화 스토리지(Tiered Storage) 아키텍처를 도입했습니다. 기존의 Kafka/Flink 기반 S3 스트리밍 파이프라인에서 발생하는 복잡성과 인프라 비용을 극복하고, 카산드라 4.1의 커스텀 Memtable을 활용해 S3 백업을 직접 읽어오는 네이티브 구조로 진화시킨 아키텍처 혁신을 소개합니다.
대규모 Cassandra 및 S3 기반 계층화 스토리지 구축을 고민하는 데이터 플랫폼 엔지니어와 백엔드 아키텍트에게 실무 적용 관점의 훌륭한 레퍼런스가 될 것입니다.
Netflix의 TimeSeries 플랫폼은 페타바이트 규모의 대용량 시계열 데이터를 관리하지만, 밀리초 단위 저지연 조회를 위해 구축된 카산드라 핫 스토리지에 오래된 이력 데이터를 계속 보관하는 것은 비효율적이고 극심한 인프라 비용을 발생시킵니다.
초기에는 Kafka/Flink를 이용해 S3에 Parquet 파일로 데이터를 실시간 저장하고 압축(Compaction)하는 방식을 도입했습니다. 이후 스트리밍 파이프라인의 인프라 비용과 운용 복잡성을 줄이기 위해 Cassandra 4.1의 플러그러블 Memtable과 새 컴팩션 전략(ROCS)을 활용하여 S3에 저장된 카산드라 스냅샷 백업을 직접 읽는 네이티브 콜드 스토리지 방식으로 전환했습니다.
이중 스트리밍 파이프라인과 추가 S3 데이터 전송 비용을 없애고 EBS 스토리지 비용을 크게 절감했습니다. 콜드 티어 데이터 조회 시 p50 지연시간 ~150ms, p99 지연시간 ~500ms 수준의 안정적인 읽기 성능을 달성했습니다.
Trade-off
카산드라 백업 기반 리드는 초기 Memtable 준비 시 S3에서 인덱스 및 메타데이터를 로컬 디스크로 다운로드하는 비동기 초기화 과정이 필요합니다. 또한 불변(Immutable) 콜드 데이터 특성에 맞추어 Read Repair 및 Speculative Retry 등의 일부 카산드라 장애 복구 기능이 제한됩니다.
데이터가 불변(Immutable) 상태가 된 시점에 SSTable들을 토큰 경계에 맞춰 단 1회 재압축함으로써 파일 간 영역 겹침을 없애는 읽기 최적화 컴팩션 전략입니다.
Apache Cassandra 4.1부터 제공되는 커스텀 Memtable 플러그인 아키텍처로, 데이터를 메모리 대신 외부 저장소 등 다른 위치에서 조작하도록 재정의할 수 있습니다.
실시간 스트리밍 시 분산 생성된 소형 Parquet 파일들을 모아 정렬 및 최적화된 대형 Parquet 파일로 재구성하는 배치 작업입니다.




