ADR: Migrate Gravitino → Lakekeeper¶
Date: 2026-07-17
Status: Approved
Decision Maker: Luc ND
Context¶
Homelab data platform sử dụng Apache Gravitino (v1.3.0) làm Iceberg REST catalog cho Trino. Gravitino phục vụ 5 Iceberg tables trên MinIO:
chat.messagesdev_streaming.platform_eventsdev_streaming.events_per_mindev_streaming.platform_metricsdev_streaming.platform_logs_v2
Decision¶
Migrate từ Apache Gravitino sang Lakekeeper làm Iceberg REST catalog.
Rationale¶
Lý do 1: Lakekeeper nhẹ hơn đáng kể¶
| Metric | Gravitino (hiện tại) | Lakekeeper |
|---|---|---|
| Ngôn ngữ | Java (JVM) | Rust (single binary) |
| RAM | ~500MB-1GB | ~200MB |
| Startup time | 60-90s (JVM warmup) | ~3s |
| Container size | ~800MB image | ~150MB image |
| Dependencies | JVM + Tomcat | None (static binary) |
Trên Unraid shared host (RAM giới hạn), tiết kiệm ~300-800MB RAM là đáng kể. Lakekeeper thêm được OpenFGA authz + OPA policy enforcement trong cùng footprint mà Gravitino vẫn nhỏ hơn.
Lý do 2: Không có plan cho multi-catalog¶
Gravitino là metal catalog — thiết kế để quản lý nhiều loại catalog (Iceberg, PostgreSQL, MySQL, Kafka, File...). Đây là lợi thế khi cần unified catalog cho nhiều data sources.
Tuy nhiên, homelab hiện tại và roadmap:
- Iceberg tables: ✅ cần (MinIO + Trino)
- PostgreSQL catalog: ❌ không cần ( RisingWave quản lý trực tiếp)
- MySQL catalog: ❌ không cần
- Kafka catalog: ❌ không cần (Redpanda quản lý trực tiếp)
- File catalog: ❌ không cần
Chỉ sử dụng 1 catalog type (Iceberg). Multi-catalog capability của Gravitino là overhead không cần thiết.
Additional Benefits¶
Sau khi research (Apache Ranger + data governance tools), Lakekeeper mang thêm:
- Built-in authz qua OpenFGA — Gravitino không có
- OPA bridge cho Trino — row-level + column masking enforcement
- Vended credentials — S3 credential vending cho query engines
- Multi-tenant — projects + warehouses (nếu cần trong tương lai)
- Standard API — Apache Iceberg REST spec thuần (không custom API)
What We Lose¶
- Multi-catalog capability (MySQL/PG/Kafka catalog) — không cần
- Gravitino dashboard UI — Lakekeeper có management API
- Apache Gravitino brand/community — Lakekeeper nhỏ hơn nhưng active
Alternatives Considered¶
| Alternative | Lý do loại |
|---|---|
| Giữ Gravitino + thêm OPA | OPA enforce được trên Trino nhưng Gravitino vẫn nặng không cần thiết |
| Apache Ranger | 5-6GB RAM, 4 JVM containers — quá nặng cho 1 plugin (Trino) |
| Apache Polaris | JVM (Java/Quarkus), heavier hơn Lakekeeper |
| Unity Catalog OSS | Dành cho Databricks ecosystem, deployment phức tạp |
Migration Path¶
Phase 1: Deploy Lakekeeper (song song Gravitino)
Phase 2: Re-register 5 Iceberg tables (không move data trên MinIO)
Phase 3: Switch Trino catalog config (1 line change)
Phase 4: Decommission Gravitino
Data trên MinIO không thay đổi — chỉ catalog metadata chuyển từ Gravitino DB sang Lakekeeper DB.
References¶
- Lakekeeper docs
- Lakekeeper GitHub
- Apache Iceberg REST spec
- Trino OPA access control
- Prior research:
plans/260706-1052-data-platform-deploy/phase-90-deferred-ranger-and-future.md