RisingWave의 Iceberg 테이블 엔진 소개: SQL로 스트리밍 데이터를 Iceberg에서 관리하기

RisingWave·2025년 4월 10일

RisingWave

목록 보기
2/6

SQL로 스트리밍 데이터를 Iceberg에서 관리하기

Apache Iceberg는 현대적인 데이터 레이크에서 테이블 포맷의 개방형 표준으로 빠르게 자리 잡았습니다. Iceberg는 강력한 기능—스키마 진화, 숨겨진 파티셔닝, 타임 트래블, ACID 준수—을 통해 확장 가능하고 신뢰할 수 있으며 벤더 중립적인 데이터 아키텍처를 가능하게 합니다

그러나 Iceberg는 스토리지 포맷만 정의하고, 데이터 수집처리—특히 실시간 스트림 데이터의 경우—는 별도의 시스템에 맡깁니다. TrinoAthena와 같은 쿼리 엔진은 정적인 데이터셋에서는 뛰어나지만, Iceberg로의 지속적이고 저지연의 데이터 수집 및 변환에는 적합하지 않습니다. 이로 인해 엔지니어들은 종종 여러 복잡한 도구들을 통합해야 하며, 운영 부담과 시스템 불안정성이 증가합니다.


Iceberg로의 스트리밍의 과제

우리는 다양한 엔지니어링 팀들과 협업하면서, Iceberg로 데이터를 적재하는 실시간 파이프라인을 구축할 때 반복적으로 마주치는 주요 과제를 확인했습니다:

1. 실시간 ETL은 자주 필요하지만 복잡함

원시 스트리밍 데이터는 Iceberg에 저장되기 전에 종종 변환이 필요합니다. 예를 들어, 규제 준수를 위해 민감한 필드를 필터링해야 하며 (GDPR을 위한 PII 마스킹), 비즈니스 로직에 따라 참조 데이터를 조인해 이벤트를 풍부화할 필요도 있습니다. 이러한 지속적인 ETL을 기존의 배치 도구나 일부 스트리밍 시스템으로 안정적으로 구현하는 것은 복잡하고 많은 리소스를 요구합니다.

2. Change Data Capture (CDC)를 정확하게 처리해야 함

운영 데이터베이스(Postgres, MySQL 등)에서 CDC를 통해 Iceberg로 변경사항을 전파하려면 세심한 처리가 필요합니다. Iceberg 테이블은 저장 계층에서 기본 키 제약을 갖지 않는 경우가 많기 때문에, 업데이트 및 삭제는 equality delete 방식—이전 행을 삭제하고 새 행을 삽입—으로 구현해야 합니다. 스트리밍 수집 엔진은 다음을 안정적으로 수행해야 합니다:

  • CDC 포맷(예: Debezium)을 해석
  • 변경사항을 결정론적으로 적용
  • 장애나 스케일링 상황에서도 데이터 손실 또는 중복 없이정확히 한 번 처리 보장

3. 낮은 지연 시간으로 데이터 확인 가능해야 함

엔지니어와 분석가는 데이터를 빠르게 조회해야 합니다—검증, 디버깅, 품질 보증 또는 실시간 모니터링 등을 위해. 전통적인 파이프라인은 종종 데이터 도착부터 Iceberg에서 쿼리 가능해지기까지 상당한 지연을 발생시키는데, 이는 마이크로 배치 주기나 비동기 압축(compaction) 과정 때문입니다.

일반적인 접근 방식의 한계

Iceberg로 스트리밍 데이터를 적재하는 일반적인 두 가지 접근 방식은 Kafka 또는 Flink를 사용하는 것입니다. 그러나 이들 각각은 몇 가지 트레이드오프가 존재합니다:

  • Kafka: 데이터 전송에는 탁월하지만, 고유의 처리 기능은 부족합니다. 변환, 조인, CDC 처리 등을 위해서는 Kafka Streams, ksqlDB, 또는 커스텀 애플리케이션과 같은 추가 도구가 필요하며, 이는 복잡성을 증가시킵니다.
  • Flink: ETL 및 Iceberg로의 쓰기 기능을 제공하는 강력한 스트림 프로세서입니다. 그러나 학습 곡선이 가파르며 (복잡한 작업은 Java/Scala로 작성해야 함), SQL 방언이 표준 SQL과 다르고, 대규모 다중 조인과 같은 복잡한 연산의 상태를 관리하는 것도 까다롭습니다.

이러한 시스템을 대규모로 안정적으로 운영하려면 상당한 수준의 엔지니어링 투자가 필요합니다. Iceberg로의 스트리밍 수집 및 관리를 단순화하고, 더 통합되고 SQL 친화적인 환경을 제공하는 솔루션이 요구되고 있습니다.


RisingWave의 Iceberg 테이블 엔진 소개

RisingWaveIceberg 테이블 엔진은 위의 문제들을 직접적으로 해결하기 위해 설계되었습니다. 이를 통해 Iceberg 테이블을 RisingWave 내의 기본 테이블처럼 취급할 수 있으며, 정의, 수집, 변환을 모두 표준 SQL로 수행할 수 있습니다. RisingWave의 분산 스트림 처리 엔진 위에 구축되어 있으며, Iceberg로 향하는 실시간 데이터를 통합적으로 처리하는 플랫폼을 제공합니다.

주요 기능

  • SQL을 통한 통합 테이블 관리: 표준 SQL DDL을 사용하여 RisingWave 내에서 Iceberg 테이블을 직접 생성하고 관리할 수 있습니다(CREATE TABLE ... ENGINE = 'iceberg';)). 다른 테이블과 마찬가지로 INSERT, UPDATE, DELETE 작업을 친숙한 SQL DML로 수행할 수 있습니다.
  • CDC 수집 및 처리의 네이티브 지원: CDC 소스(Postgres, MySQL 등, Debezium을 통해)와 직접 연결할 수 있습니다. RisingWave는 변경 이벤트를 자동으로 해석하고, UPDATEDELETE 연산을 Iceberg에 equality delete 형식으로 정확히 적용합니다. RisingWave의 내결함성 메커니즘을 통해 정확히 한 번 처리(Exactly-once semantics)가 보장됩니다.
  • SQL 기반 실시간 ETL: 필터, 조인, 집계를 포함한 복잡한 스트리밍 변환을 표준 SQL로 정의할 수 있습니다. RisingWave는 이를 지속적으로 갱신되는 스트리밍 작업으로 실행하여, 수신되는 데이터를 지속적으로 처리하고 대상 Iceberg 테이블에 결과를 적재합니다.
  • 낮은 지연 시간으로 쿼리 가능: 데이터가 Iceberg 파일에 커밋 및 압축되기 전에, RisingWave의 테이블이나 물리화 뷰(materialized view)를 통해 실시간으로 상태를 쿼리할 수 있습니다. 이를 통해 즉시 유효성 검증 및 점검이 가능합니다.
  • Iceberg 포맷과의 네이티브 통합: 이 엔진은 공식 Iceberg 라이브러리를 사용해 데이터를 작성하므로, 완전한 호환성이 보장됩니다. 파티셔닝 및 스키마 진화와 같은 Iceberg 기능을 지원합니다. 테이블은 표준 Iceberg 포맷으로 저장되며(예: S3), Trino, Spark, Athena, DuckDB 등 Iceberg 호환 엔진을 통해 공유 카탈로그(AWS Glue, AWS S3 Tables, REST, JDBC)를 통해 쿼리할 수 있습니다. 압축(compaction)은 필요 시 외부 도구로 처리할 수 있습니다.

아키텍처 예시: Postgres CDC를 RisingWave를 통해 Iceberg로 스트리밍

전형적인 설정은 다음과 같은 단계를 포함합니다:

  1. 소스: Postgres 데이터베이스가 CDC 이벤트를 방출함(Debezium 포맷 사용).
  2. 수집 및 저장: CDC 데이터를 수집하고 Iceberg 테이블에 저장. RisingWave만으로 이 작업을 수행할 수 있으며, 몇 개의 SQL 명령과 기본적인 설정만으로 충분합니다.
--- 테이블 엔진을 위한 연결 생성
CREATE CONNECTION ...

--- 테이블 엔진에 연결 구성
SET iceberg_engine_connection = 'public.conn';
ALTER system SET iceberg_engine_connection = 'public.conn';

--- 소스 생성
CREATE SOURCE pg_source WITH (
    connector='postgres-cdc',
    hostname='localhost',
    port='5432',
    username='your_user',
    password='your_password',
    database.name='your_database',
    schema.name='public' -- 선택 사항, 기본값은 'public'
);

-- 소스에 있는 테이블로부터 Iceberg 테이블 생성
CREATE TABLE my_table (
    id INT PRIMARY KEY,
    name VARCHAR
)
FROM pg_source TABLE 'public.my_upstream_table'
ENGINE = iceberg;

이러한 아키텍처는 Kafka, Flink 또는 커스텀 코드 배포 없이도 실시간 데이터 수집 및 Iceberg로의 저장을 가능하게 합니다.

요약

Apache Iceberg는 강력한 데이터 레이크 기반을 제공하지만, 실시간 스트림 통합은 여전히 도전 과제입니다. RisingWave의 Iceberg 테이블 엔진은 다음을 통해 이 문제를 단순화합니다:

  • 스트리밍 환경에서의 SQL 기반 Iceberg 테이블 관리
  • CDC 스트림 및 equality delete의 내장 처리 기능
  • 표준 SQL을 사용한 실시간 ETL 기능
  • 스트리밍 데이터 파이프라인에 대한 저지연 가시성
  • Iceberg 생태계와의 완전한 호환성

Iceberg를 대상으로 하는 스트리밍 데이터 파이프라인을 구축하고 있으며, 보다 통합되고 효율적이며 SQL 친화적인 접근 방식을 원한다면, RisingWave Iceberg 테이블 엔진을 확인해 보세요.

👉 버전 2.3에서 곧 출시됩니다.

자세히 알아보기:

profile
SQL stream processing with Postgres-like experience ;10X faster and more efficient than Apache Flink. Join our Slack to connect, discuss, and engage with the RisingWave community!

0개의 댓글