Skip to content

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.messages
  • dev_streaming.platform_events
  • dev_streaming.events_per_min
  • dev_streaming.platform_metrics
  • dev_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