ILUM Marquez: metadata service for data lineage (OpenLineage, GraphQL)
10K+
Ilum-maintained Marquez distribution — data lineage metadata server with OpenLineage compatibility and enhanced Search API.
ilum/marquez is Ilum's production-hardened distribution of Marquez, an open-source metadata service for data lineage collection, aggregation, and visualization. Starting with version 0.54.0, the API backend has been rewritten in Rust for improved performance and resource efficiency. This fork maintains 100% API compatibility with upstream Marquez while delivering critical fixes and additive enhancements like the Search API.
Ilum Fork Philosophy: We forked Marquez when upstream development slowed, shipped critical fixes, then realigned with upstream from version 0.52.x. All enhancements are non-breaking and intended for community contribution.
# 1. Start PostgreSQL
docker run -d --name marquez-postgres \
-e POSTGRES_USER=marquez \
-e POSTGRES_PASSWORD=marquez \
-e POSTGRES_DB=marquez \
-p 5432:5432 \
postgres:16
# 2. Start Marquez (wait ~5s for PostgreSQL to be ready)
docker run -d --name marquez \
--network=host \
-e POSTGRES_HOST=localhost \
-e POSTGRES_PORT=5432 \
-e POSTGRES_DB=marquez \
-e POSTGRES_USER=marquez \
-e POSTGRES_PASSWORD=marquez \
ilum/marquez:0.54.0
Endpoints:
http://localhost:5000http://localhost:5001# Clone repository and install with included PostgreSQL
git clone https://github.com/ilum-cloud/marquez.git
cd marquez/chart
helm install ilum-marquez . \
--dependency-update \
--set postgresql.enabled=true \
--set postgresql.auth.password=your-secure-password
Note
Docker: The image includes `marquez.dev.yml` with Figment environment variable substitution. Environment variables via `-e` work out of the box.Helm: Mounts custom
config.ymlvia ConfigMap with values injected through Kubernetes Secrets — the production pattern.
# Add Ilum Helm repository (if available) or clone directly
git clone https://github.com/ilum-cloud/marquez.git
cd marquez/chart
# Install with included PostgreSQL
helm install ilum-marquez . \
--dependency-update \
--set postgresql.enabled=true \
--set postgresql.auth.password=your-secure-password
# Or install connecting to existing PostgreSQL
helm install ilum-marquez . \
--set marquez.db.host=your-postgres-host \
--set marquez.db.name=marquez \
--set marquez.db.user=marquez \
--set marquez.db.password=your-password
| Parameter | Default | Description |
|---|---|---|
marquez.image.tag | 0.54.0 | Marquez API image version |
marquez.replicaCount | 1 | Number of API replicas |
marquez.existingSecretName | "" | Use existing secret for DB password |
web.enabled | true | Enable Marquez Web UI |
web.image.tag | 0.54.0 | Web UI image version |
postgresql.enabled | false | Deploy PostgreSQL with chart |
ingress.enabled | false | Enable Ingress |
# values-production.yaml
marquez:
replicaCount: 2
resources:
limits:
memory: 512Mi
cpu: 500m
requests:
memory: 256Mi
cpu: 250m
db:
host: "postgres.database.svc.cluster.local"
name: marquez
user: marquez
password: "" # Use existingSecretName instead
existingSecretName: "marquez-db-credentials"
migrateOnStartup: true
web:
enabled: true
resources:
limits:
memory: 512Mi
cpu: 500m
ingress:
enabled: true
className: nginx
hosts:
- lineage.example.com
helm install ilum-marquez . -f values-production.yaml
# Port-forward API
kubectl port-forward svc/ilum-marquez 5000:9555
# Port-forward Web UI
kubectl port-forward svc/ilum-marquez-web 3000:9444
0.54.0, latest — Rust backend (default), Marquez 0.54.0 + OpenLineage 2.0.20.54.0-java — Java backend (deprecated, transitional)0.53.1 — Previous stable release (Java backend)0.53.0 — Previous stable release (Java backend)Note
Starting with `0.54.0`, the default `ilum/marquez` image ships the Rust backend. The Java backend is available as `ilum/marquez:0.54.0-java` during the transition period.
GET /api/v1/search/full): Returns complete dataset/job objects instead of referencescolumn_lineage table| Marquez Version | OpenLineage Spec | Backend | Status |
|---|---|---|---|
0.54.0 | 2-0-2 | Rust | CURRENT |
0.53.1 | 2-0-2 | Java | PREVIOUS |
0.53.0 | 2-0-2 | Java | LEGACY |
| Variable | Default | Description |
|---|---|---|
POSTGRES_HOST | localhost | PostgreSQL hostname |
POSTGRES_PORT | 5432 | PostgreSQL port |
POSTGRES_DB | marquez | Database name |
POSTGRES_USER | marquez | Database username |
POSTGRES_PASSWORD | marquez | Database password |
Legacy aliases (MARQUEZ_DB_HOST, MARQUEZ_DB_PORT, MARQUEZ_DB, MARQUEZ_DB_USER, MARQUEZ_DB_PASSWORD) are also supported.
| Variable | Default | Description |
|---|---|---|
MARQUEZ_PORT | 5000 | HTTP API port |
MARQUEZ_ADMIN_PORT | 5001 | Admin interface port |
MARQUEZ_CONFIG | marquez.dev.yml | Path to configuration file |
| Variable | Default | Description |
|---|---|---|
RUST_LOG | info | Log level filter (trace, debug, info, warn, error). Supports per-module filtering, e.g. marquez_api=debug,tower_http=info |
| Variable | Default | Description |
|---|---|---|
SEARCH_ENABLED | false | Enable OpenSearch integration |
SEARCH_HOST | opensearch | OpenSearch hostname |
SEARCH_PORT | 9200 | OpenSearch port |
SEARCH_USERNAME | admin | OpenSearch username |
SEARCH_PASSWORD | (set in config) | OpenSearch password |
SEARCH_SCHEME | http | OpenSearch connection scheme |
The Rust backend uses Figment for configuration. Any config field can be overridden via environment variables with the MARQUEZ_ prefix and __ (double underscore) for nesting:
| Variable | Description |
|---|---|
MARQUEZ_DB__HOST | Database host |
MARQUEZ_DB__MAX_POOL_SIZE | Connection pool size (default: 10) |
MARQUEZ_SERVER__HOST | Bind address (default: 0.0.0.0) |
MARQUEZ_MIGRATE_ON_STARTUP | Run Flyway migrations on startup (default: true) |
Marquez stores all data in PostgreSQL. No container volumes required for the API server.
| External Dependency | Purpose |
|---|---|
| PostgreSQL 16 | Metadata storage |
| OpenSearch (optional) | Advanced search functionality |
| Port | Service |
|---|---|
5000 | HTTP API |
5001 | Admin interface (healthcheck, metrics) |
POST /api/v1/lineage — OpenLineage event ingestionGET /api/v1/namespaces — List namespacesGET /api/v1/namespaces/{namespace}/jobs — List jobsGET /api/v1/namespaces/{namespace}/datasets — List datasetsGET /api/v1/search/full — Full search with complete objectsFull API Documentation: OpenAPI Spec
The image runs as root by default. For production, consider:
# Kubernetes - run as non-root
securityContext:
runAsNonRoot: true
runAsUser: 1000
Important
By default, the HTTP API does not require authentication. For production:
- Use network policies to restrict access
- Deploy behind an API gateway with authentication
- Use service mesh (Istio, Linkerd) for mTLS
Caution
Never hardcode database credentials!
Use Kubernetes Secrets:
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: marquez-db-secret
key: password
# Trivy
trivy image ilum/marquez:0.54.0
Run from the repository root:
# Build default (Rust) image
docker build -t ilum/marquez:0.54.0 .
# Build deprecated Java image
docker build -f Dockerfile.java -t ilum/marquez:0.54.0-java .
dive ilum/marquez:0.54.0
syft ilum/marquez:0.54.0 -o spdx-json > sbom.json
rust:slim-bookworm (multi-stage build)debian:bookworm-slim with OpenSSL┌─────────────────────────────────────────────────────┐
│ Data Sources │
│ (Spark, Airflow, dbt, Flink via OpenLineage) │
└──────────────────────┬──────────────────────────────┘
│ OpenLineage Events
▼
┌─────────────────────────────────────────────────────┐
│ ilum/marquez (API) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Lineage API │ │ Search API │ │
│ └─────────────┘ └─────────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ ▼ ▼ │
│ PostgreSQL OpenSearch │
│ (metadata store) (optional search) │
└─────────────────────────────────────────────────────┘
When deployed as part of the Ilum data lakehouse platform:
Content type
Image
Digest
sha256:626b4e2dc…
Size
37.5 MB
Last updated
6 months ago
docker pull ilum/marquez