
Apache Iceberg는 현대적인 데이터 레이크에서 테이블 포맷의 개방형 표준으로 빠르게 자리 잡았습니다. Iceberg는 강력한 기능—스키마 진화, 숨겨진 파티셔닝, 타임 트래블, ACID 준수—을 통해 확장 가능하고 신뢰할 수 있으며 벤더 중립적인 데이터 아키텍처를 가능하게 합니다
그러나 Iceberg는 스토리지 포맷만 정의하고, 데이터 수집 및 처리—특히 실시간 스트림 데이터의 경우—는 별도의 시스템에 맡깁니다. Trino나 Athena와 같은 쿼리 엔진은 정적인 데이터셋에서는 뛰어나지만, Iceberg로의 지속적이고 저지연의 데이터 수집 및 변환에는 적합하지 않습니다. 이로 인해 엔지니어들은 종종 여러 복잡한 도구들을 통합해야 하며, 운영 부담과 시스템 불안정성이 증가합니다.
우리는 다양한 엔지니어링 팀들과 협업하면서, Iceberg로 데이터를 적재하는 실시간 파이프라인을 구축할 때 반복적으로 마주치는 주요 과제를 확인했습니다:
원시 스트리밍 데이터는 Iceberg에 저장되기 전에 종종 변환이 필요합니다. 예를 들어, 규제 준수를 위해 민감한 필드를 필터링해야 하며 (GDPR을 위한 PII 마스킹), 비즈니스 로직에 따라 참조 데이터를 조인해 이벤트를 풍부화할 필요도 있습니다. 이러한 지속적인 ETL을 기존의 배치 도구나 일부 스트리밍 시스템으로 안정적으로 구현하는 것은 복잡하고 많은 리소스를 요구합니다.
운영 데이터베이스(Postgres, MySQL 등)에서 CDC를 통해 Iceberg로 변경사항을 전파하려면 세심한 처리가 필요합니다. Iceberg 테이블은 저장 계층에서 기본 키 제약을 갖지 않는 경우가 많기 때문에, 업데이트 및 삭제는 equality delete 방식—이전 행을 삭제하고 새 행을 삽입—으로 구현해야 합니다. 스트리밍 수집 엔진은 다음을 안정적으로 수행해야 합니다:
엔지니어와 분석가는 데이터를 빠르게 조회해야 합니다—검증, 디버깅, 품질 보증 또는 실시간 모니터링 등을 위해. 전통적인 파이프라인은 종종 데이터 도착부터 Iceberg에서 쿼리 가능해지기까지 상당한 지연을 발생시키는데, 이는 마이크로 배치 주기나 비동기 압축(compaction) 과정 때문입니다.
Iceberg로 스트리밍 데이터를 적재하는 일반적인 두 가지 접근 방식은 Kafka 또는 Flink를 사용하는 것입니다. 그러나 이들 각각은 몇 가지 트레이드오프가 존재합니다:
이러한 시스템을 대규모로 안정적으로 운영하려면 상당한 수준의 엔지니어링 투자가 필요합니다. Iceberg로의 스트리밍 수집 및 관리를 단순화하고, 더 통합되고 SQL 친화적인 환경을 제공하는 솔루션이 요구되고 있습니다.
RisingWave의 Iceberg 테이블 엔진은 위의 문제들을 직접적으로 해결하기 위해 설계되었습니다. 이를 통해 Iceberg 테이블을 RisingWave 내의 기본 테이블처럼 취급할 수 있으며, 정의, 수집, 변환을 모두 표준 SQL로 수행할 수 있습니다. RisingWave의 분산 스트림 처리 엔진 위에 구축되어 있으며, Iceberg로 향하는 실시간 데이터를 통합적으로 처리하는 플랫폼을 제공합니다.
CREATE TABLE ... ENGINE = 'iceberg';)). 다른 테이블과 마찬가지로 INSERT, UPDATE, DELETE 작업을 친숙한 SQL DML로 수행할 수 있습니다.UPDATE 및 DELETE 연산을 Iceberg에 equality delete 형식으로 정확히 적용합니다. RisingWave의 내결함성 메커니즘을 통해 정확히 한 번 처리(Exactly-once semantics)가 보장됩니다.전형적인 설정은 다음과 같은 단계를 포함합니다:
--- 테이블 엔진을 위한 연결 생성
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 테이블 엔진은 다음을 통해 이 문제를 단순화합니다:
Iceberg를 대상으로 하는 스트리밍 데이터 파이프라인을 구축하고 있으며, 보다 통합되고 효율적이며 SQL 친화적인 접근 방식을 원한다면, RisingWave Iceberg 테이블 엔진을 확인해 보세요.
👉 버전 2.3에서 곧 출시됩니다.
자세히 알아보기: