Implementation:Risingwavelabs Risingwave Docker Compose Lakekeeper
| Knowledge Sources | |
|---|---|
| Domains | Deployment, Iceberg, Infrastructure |
| Last Updated | 2026-02-09 07:00 GMT |
Overview
Docker Compose configuration for running a distributed RisingWave cluster with a Lakekeeper Iceberg REST catalog, including automatic warehouse bootstrapping and S3-compatible storage via MinIO.
Description
The docker/docker-compose-with-lakekeeper.yml file extends the standard distributed RisingWave deployment with a full Lakekeeper (Apache Iceberg REST catalog) stack. It defines 14 services: the core RisingWave components (meta-node-0, compute-node-0, frontend-node-0, compactor-0, compactor-1), infrastructure services (postgres-0, minio-0, prometheus-0, grafana-0, message_queue), and the Lakekeeper stack (lakekeeper, lakekeeper-migrate, lakekeeper-db, lakekeeper-bootstrap). The compactor-1 instance runs in dedicated-iceberg mode for Iceberg-specific compaction. The lakekeeper-bootstrap init container automatically creates a warehouse named risingwave-warehouse with MinIO as the S3-compatible storage backend.
Usage
Use this compose file to test or develop RisingWave's Apache Iceberg integration locally. It provides a complete self-contained environment with catalog, storage, and message queue services.
Code Reference
Source Location
- Repository: risingwave
- File: docker/docker-compose-with-lakekeeper.yml
- Lines: L1-563
Signature
# Start the full Lakekeeper-integrated RisingWave stack
docker compose -f docker/docker-compose-with-lakekeeper.yml up -d
# Use a specific RisingWave image
RW_IMAGE=risingwavelabs/risingwave:v2.7.1 \
docker compose -f docker/docker-compose-with-lakekeeper.yml up -d
Import
# No import needed - Docker Compose files are used directly
# Ensure Docker and Docker Compose are installed
docker compose version
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| RW_IMAGE | Environment variable | No | RisingWave Docker image (default: risingwavelabs/risingwave:v2.7.1) |
| LAKEKEEPER__SERVER_IMAGE | Environment variable | No | Lakekeeper catalog image (default: quay.io/lakekeeper/catalog:latest-main) |
| ENABLE_TELEMETRY | Environment variable | No | Enable/disable telemetry (default: true) |
| RW_SECRET_STORE_PRIVATE_KEY_HEX | Environment variable | No | Secret store encryption key |
Outputs
| Name | Type | Description |
|---|---|---|
| Frontend | Port 4566 | PostgreSQL wire protocol endpoint for SQL queries |
| Meta node | Port 5690 | Meta service gRPC endpoint |
| Dashboard | Port 5691 | Built-in web dashboard |
| MinIO | Ports 9301, 9400 | Object storage API and console |
| Prometheus | Port 9500 | Metrics endpoint |
| Grafana | Port 3001 | Monitoring dashboards |
| Redpanda | Ports 9092, 29092 | Kafka-compatible message queue |
| Lakekeeper | Port 8181 | Iceberg REST catalog API |
| Lakekeeper DB | Port 8433 | PostgreSQL backing the catalog (mapped from 5432) |
Service Architecture
The services are organized into three layers:
RisingWave Core:
- meta-node-0 -- Metadata management, connects to postgres-0 and minio-0
- compute-node-0 -- Stream/batch execution (8 GB memory limit)
- frontend-node-0 -- SQL endpoint (port 4566)
- compactor-0 -- Standard compaction (2 GB memory limit)
- compactor-1 -- Iceberg-dedicated compaction mode (8 GB memory limit)
Infrastructure:
- postgres-0 -- PostgreSQL 15 for RisingWave metadata
- minio-0 -- MinIO for Hummock object storage and Iceberg data
- prometheus-0 -- Metrics collection
- grafana-0 -- Dashboard visualization
- message_queue -- Redpanda for Kafka-compatible streaming
Lakekeeper Stack:
- lakekeeper-db -- PostgreSQL 16 backing the Lakekeeper catalog
- lakekeeper-migrate -- One-shot migration init container
- lakekeeper -- Iceberg REST catalog service
- lakekeeper-bootstrap -- Init container that creates the risingwave-warehouse with MinIO storage credentials
Usage Examples
Starting the Environment
cd docker
# Start all services
docker compose -f docker-compose-with-lakekeeper.yml up -d
# Wait for bootstrap to complete
docker compose -f docker-compose-with-lakekeeper.yml logs -f lakekeeper-bootstrap
# Connect to RisingWave
psql -h localhost -p 4566 -d dev -U root
Creating an Iceberg Sink
-- Connect to RisingWave (port 4566)
CREATE SOURCE orders (
id INT,
product VARCHAR,
quantity INT
) WITH (
connector = 'kafka',
topic = 'orders',
properties.bootstrap.server = 'message_queue:29092'
) FORMAT PLAIN ENCODE JSON;
CREATE SINK orders_iceberg FROM orders WITH (
connector = 'iceberg',
type = 'upsert',
primary_key = 'id',
catalog.type = 'rest',
catalog.uri = 'http://lakekeeper:8181',
catalog.name = 'risingwave-warehouse',
s3.endpoint = 'http://minio-0:9301',
s3.access.key = 'hummockadmin',
s3.secret.key = 'hummockadmin',
s3.region = 'us-east-1',
database.name = 'default',
table.name = 'orders'
);
Stopping the Environment
cd docker
docker compose -f docker-compose-with-lakekeeper.yml down -v
Related Pages
Implements Principle
Related Implementations
- Implementation:Risingwavelabs_Risingwave_Docker_Compose_Deployment -- Base distributed deployment without Lakekeeper
- Implementation:Risingwavelabs_Risingwave_IcebergSink_New -- Iceberg sink writer implementation
- Implementation:Risingwavelabs_Risingwave_CI_Docker_Compose -- CI environment with Iceberg test setup