RisingWave は v2.5 における REST カタログ対応の導入により、Apache Iceberg との統合を大きく前進させました。
この強化により、標準化された API を通じて、任意のモダンな Iceberg カタログサービスと RisingWave を接続できるようになります。
特に注目すべきは、新しいオープンソースの自己ホスト型 Iceberg REST カタログ Lakekeeper とのシームレスな連携です。
この組み合わせにより、メタデータを完全に自分で管理でき、ベンダーロックインを回避した、真にオープンで柔軟なストリーミング・レイクハウス構成が可能になります。
なぜ REST カタログが重要なのか
Iceberg のカタログは、レイクハウスの「中枢神経系」にあたる役割を担い、テーブルのスキーマ、スナップショット、データファイルの位置などを追跡します。
Iceberg REST Catalog 仕様は、Spark、Flink、RisingWave といった異なる処理エンジンが、共通のメタデータサービスを介してやり取りできるようにするモダンな相互運用標準として定着しています。
この API 駆動の方式により、スタック全体でデータに対する一貫性と統一的な見え方を保証できます。
Lakekeeper で掌握する:自己ホスト型カタログ
この新しい REST カタログ機能を活用するために、ここで紹介したいのが Lakekeeper です。
Lakekeeper は Rust で実装された、高速かつ軽量なオープンソースの Iceberg REST カタログです。
管理されたクラウドサービス(たとえば AWS Glue)に依存する代わりに、自分自身の環境へ Docker や Kubernetes を使ってデプロイできます。
これにより、モダンなカタログ機能を利用しつつ、インフラやコストを完全にコントロールできます。
Lakekeeper は REST カタログの仕様を正しく実装しており、標準的な Iceberg REST クライアントと互換性があります。
また、認証機構やアクセス制御(OpenID、Open Policy Agent など)も統合できる設計です。
RisingWave + Lakekeeper を使うメリット
-
完全なコントロール & ベンダーロックイン回避
Lakekeeper を自己ホストすることで、メタデータの所有権をあなたが持つことになります。
独自のクラウドサービスに依存せず、自分のスタックに最適なツールを自由に選べるようになります。 -
オープンで相互運用可能
この統合は公式の Iceberg REST プロトコルに基づいて構築されています。
それゆえ、この標準に対応したどのツールも、RisingWave で管理するテーブルと相互作用できます。 -
シンプルでモダンなスタック
Lakekeeper は単一バイナリで構成され、デプロイと運用が非常に簡単です。
本番環境のストリーミング・レイクハウスを、これまでになく容易に実現できます。 -
ストリーミングと管理を統合
RisingWave を使ってデータを取り込み、リアルタイム変換を行い、その結果を Lakekeeper 管理下の Iceberg テーブルに直接書き込む。
これらすべてが SQL ベースの一貫したワークフロー内で完結します。
導入手順:実用ガイド
まず、Lakekeeper と S3 互換のオブジェクトストレージ(例:Minio)が稼働していることを確認してください。
最も簡便な方法としては、RisingWave リポジトリ 内にある
docker-compose-with-lakekeeper.yml を使う方法があります。これで環境の立ち上げが自動的に行われます。
RisingWave では、目的に応じて 2 つの方法で Iceberg REST カタログとやり取りできます。
ユースケース 1:データを Iceberg テーブルにシンクする
この方法は、RisingWave のソースまたはマテリアライズドビューから Iceberg テーブルにストリーミングデータを出力したい場合に適しています。
カタログおよびストレージの接続パラメータは、すべて CREATE SINK ステートメント内で定義します。
CREATE SINK users_sink
FROM user_profiles_stream
WITH (
connector = 'iceberg',
type = 'upsert',
primary_key = 'user_id',
-- カタログ設定
catalog.type = 'rest',
catalog.uri = '<http://lakekeeper:8181>', -- Lakekeeper のエンドポイント
-- ウェアハウスおよびテーブル情報
warehouse.path = 's3://warehouse/',
database.name = 'users',
table.name = 'profiles',
-- S3 設定
s3.endpoint = '<http://minio:9301>',
s3.access.key = 'minioadmin',
s3.secret.key = 'minioadmin'
);
(注:RisingWave の “deliver to Iceberg” 機能では、REST カタログ設定を含む CREATE SINK を通じてデータを Iceberg テーブルに出力できます)
ユースケース 2:ネイティブ Iceberg テーブルを作成・管理する
この方式では、RisingWave が Iceberg テーブルをネイティブに管理できるようになります。
SQL で直接テーブル操作を行い、その際まず再利用可能な CONNECTION オブジェクトを定義します。
ステップ 1:再利用可能な接続を作成
Iceberg カタログとウェアハウスの情報を格納する CONNECTION を定義します。
これにより、設定が整理され使い回しができるようになります。
CREATE CONNECTION lakekeeper_catalog_conn
WITH (
type = 'iceberg',
catalog.type = 'rest',
catalog.uri = '<http://lakekeeper:8181/catalog/>', -- Lakekeeper サービスの URI
warehouse.path = 'my-warehouse',
s3.endpoint = '<http://minio:9301>',
s3.access.key = 'minioadmin',
s3.secret.key = 'minioadmin',
s3.region = 'us-east-1'
);
ステップ 2:接続をアクティブ化
この接続をセッションまたはシステム全体でのデフォルトとして有効化します。
SET iceberg_engine_connection = 'public.lakekeeper_catalog_conn';
ALTER SYSTEM SET iceberg_engine_connection = 'public.lakekeeper_catalog_conn';
ステップ 3:ネイティブ Iceberg テーブルを作成
この時点で、アクティブな CONNECTION からカタログ設定とストレージ設定を継承できるため、WITH 句は最小限で構いません。
CREATE TABLE users (
user_id INT,
user_name VARCHAR
) WITH (
connector = 'iceberg'
);
まとめ
RisingWave の Iceberg REST カタログ対応、および自己ホスト型カタログ Lakekeeper との組み合わせは、モダンなストリーミング・レイクハウス構築における重要なマイルストーンです。
この仕組みは、柔軟性・コスト効率・完全な所有権を兼ね備えており、ベンダーロックインからの脱却と、オープンなデータエコシステムとの相互運用性を実現します。
あなたがこの技術でどんなシステムを構築するか、とても楽しみにしています。
詳しい情報は公式ドキュメントをご覧ください: Iceberg REST Catalog(公式)