개요
Apache Iceberg를 스트리밍 환경에서 활용할 때의 주요 과제와 해결책을 다루는 웨비나입니다. 연속적인 삽입 처리, 스몰 파일 문제, 스키마 진화, 삭제 처리 등의 도전 과제에 대한 구체적인 해결책을 제시하며, RisingWave와 StarRocks를 활용한 실용적인 아키텍처 전략을 소개합니다.
주요 내용
1. Apache Iceberg의 정의와 중요성
Iceberg는 단순한 오픈 데이터 포맷이 아니라 오픈 테이블 포맷입니다. Netflix에서 처음 도입되었으며, 데이터를 Parquet 포맷으로 저장하고 그 위에 추상화 레이어를 제공하여 테이블 포맷을 정의합니다. Spark, RisingWave, StarRocks, DuckDB, Snowflake 등 모든 시스템이 데이터를 읽고 쓸 수 있게 되며, GDPR 등의 이유로 데이터를 업데이트하거나 삭제해야 할 때 한 곳에서 관리할 수 있어 데이터 거버넌스가 단순화됩니다.
2. 스트리밍 데이터의 정의와 처리
스트리밍 데이터는 IoT 센서 데이터, 주식 시장 거래 데이터, 이커머스 주문 데이터, 웹사이트 사용자 행동 데이터 등을 포함합니다. 데이터 스트리밍은 Kafka처럼 데이터 저장에 초점을 맞추고, 스트림 프로세싱은 RisingWave처럼 데이터 계산에 초점을 맞춥니다. 스트림 프로세싱은 전체 데이터가 아닌 증분적인 데이터만 처리하는 증분 계산 개념입니다.
3. 연속적인 삽입 문제와 배치 커밋 전략
스트리밍 데이터를 Iceberg에 직접 삽입하면 시스템이 충돌할 수 있습니다. Iceberg의 근간은 컨럼 스토어 포맷인 Parquet이므로, 데이터를 지속적으로 삽입하는 것은 매우 어렵습니다. 해결책은 RisingWave와 같은 시스템에 데이터를 일시적으로 버퍼링하여 축적한 후, 배치 커밋 방식으로 한 번에 기록하는 것입니다. 커밋 주기는 일반적으로 5초 또는 10초가 합리적입니다.
4. 스몰 파일 문제와 압축(Compaction)
배치 커밋을 하더라도 스몰 파일 문제는 완전히 해결되지 않습니다. 스몰 파일은 쿼리 엔진에 좋지 않으며, S3 액세스 비용을 증가시키고, 메타데이터 파일을 많이 생성하여 쿼리 계획에 문제를 야기합니다. 해결책은 압축(Compaction)을 직접 수행하는 것이며, EMR Serverless/Spark, Glue Automation, 관리형 서비스(S3 Tables) 등을 사용할 수 있습니다. 압축의 핵심은 실행이 아닌 전략으로, 어떤 파일을 언제 압축할지 결정하는 것이 중요합니다.
5. Nimble Table 소개
Nimble Table은 RisingWave에서 개발한 Iceberg를 위한 관제탑/코파일럿 역할의 도구입니다. REST, JDBC, S3 Tables, Glue 등 모든 카탈로그에 연결할 수 있으며, 테이블별 파일 수와 파일 크기 분포를 시각화합니다. 스냅샷 보존, 압축 등의 최적화를 직접 실행할 수 있으며, 파일 수/크기, 삭제 유형, 스키마 진화를 추적합니다.
6. RisingWave와 StarRocks 아키텍처
RisingWave는 분산 SQL 스트리밍 데이터베이스로, Postgres 호환성을 가지며 S3 기반으로 데이터를 저장하여 비용 효율적입니다. 10-100밀리초의 낮은 지연 시간을 달성할 수 있으며, 대규모 상태를 S3에 영구적으로 저장하고 메모리에 캐시합니다.
StarRocks는 Apache Iceberg 위에서 작동하는 쿼리 엔진으로, 낮은 지연 시간으로 쿼리를 수행합니다. MPP 백엔드를 활용하여 메타데이터를 분산적으로 읽을 수 있으며, C 기반 실행 엔진으로 SIMD를 활용한 최적화된 처리가 가능합니다. Iceberg 테이블에서 고객 대면 분석을 직접 실행하는 데 적합합니다.
핵심 포인트
스트리밍 환경에서 Apache Iceberg를 활용할 때는 연속 삽입 문제와 스몰 파일 문제가 주요 과제입니다. 버퍼링 및 배치 커밋으로 삽입 문제를 해결하고, 주기적인 압축으로 스몰 파일 문제를 해결해야 합니다. Nimble Table과 같은 도구를 활용하면 Iceberg 테이블을 정확하고 쉽게 관리할 수 있습니다. RisingWave와 StarRocks를 조합한 아키텍처는 실시간 데이터 처리의 복잡성을 줄이고 비용 효율성을 극대화하는 실용적인 전략입니다.