Skip to content

Iceberg Configuration

The Danube Iceberg sidecar is configured with a single YAML file. This page documents every configuration option in danube_iceberg.yaml.

Running with a config file
danube-iceberg --config danube_iceberg.yaml

danube_iceberg.yaml
broker:
address: "localhost:6650"
FieldTypeDefaultDescription
broker.addressString(required)gRPC address of any broker in the Danube cluster. Used for segment discovery (StorageService) and schema resolution (SchemaService).

Configures the storage backend for reading sealed .dnb1 segments and writing Parquet data files.

danube_iceberg.yaml
storage:
backend: "s3"
root: "s3://my-bucket/danube"
output_prefix: "iceberg"
options:
endpoint: "http://minio:9000"
region: "us-east-1"
access_key: "minioadmin"
secret_key: "minioadmin"
FieldTypeDefaultDescription
storage.backendString(required)Storage backend type. One of: s3, gcs, azure, fs.
storage.rootString(required)Root path for reading .dnb1 segments. Must match the cluster broker’s durable storage path.
storage.output_prefixString"iceberg"Subdirectory for checkpoint files within the storage root.
storage.optionsMap{}Backend-specific options (see below).
KeyDescription
endpointS3-compatible endpoint URL (required for MinIO, optional for AWS)
regionAWS region (e.g., us-east-1)
access_keyAWS access key ID
secret_keyAWS secret access key

Configures the Iceberg catalog where table metadata is committed. Omit this section entirely (or set type: "none") for Parquet-only mode without catalog integration.

danube_iceberg.yaml
catalog:
type: "rest"
name: "danube_catalog"
properties:
uri: "http://nessie:19120/api/v1"
warehouse: "s3://my-bucket/warehouse"
PropertyDescription
uriREST catalog endpoint URL
warehouseDefault warehouse location for new tables
credentialOptional OAuth2 credential
tokenOptional bearer token

Compatible with: Nessie, Polaris, Tabular, Snowflake Open Catalog, Databricks Unity.

FieldTypeDefaultDescription
catalog.typeString"none"Catalog type: rest, glue, s3tables, sql, or none.
catalog.nameString"danube_catalog"Catalog identifier used when loading.
catalog.propertiesMap{}Catalog-specific properties passed to the builder.

Global defaults for Parquet file generation. These can be overridden per topic.

danube_iceberg.yaml
compaction:
target_parquet_size_mb: 200
max_flush_interval_seconds: 300
FieldTypeDefaultDescription
compaction.target_parquet_size_mbInteger200Flush when the in-memory buffer reaches this size in MB.
compaction.max_flush_interval_secondsInteger300Maximum seconds between flushes, even if the size threshold is not reached.

Only explicitly configured topics are exported. Each entry maps one Danube topic to one Iceberg table.

danube_iceberg.yaml
topics:
- namespace: "default"
topic: "sensor-data"
table_name: "sensor_data"
- namespace: "default"
topic: "events"
table_name: "events"
compaction:
target_parquet_size_mb: 100
max_flush_interval_seconds: 60
FieldTypeRequiredDescription
namespaceStringYesDanube namespace. Combined with topic to form the fully qualified topic /{namespace}/{topic}.
topicStringYesDanube topic name.
table_nameStringYesIceberg table name. The table is created automatically if it does not exist.
compactionObjectNoPer-topic override for compaction thresholds. If omitted, global defaults apply.

Controls how frequently the sidecar checks the cluster for new sealed segments.

danube_iceberg.yaml
polling:
interval_seconds: 30
FieldTypeDefaultDescription
polling.interval_secondsInteger30Seconds between segment discovery polls. Lower values reduce latency; higher values reduce API calls.

danube_iceberg.yaml
# Broker connection — any broker in the Danube cluster.
broker:
address: "localhost:6650"
# Object storage — where segments are read from and Parquet files are written to.
storage:
backend: "s3"
root: "s3://my-bucket/danube"
output_prefix: "iceberg"
options:
endpoint: "http://minio:9000"
region: "us-east-1"
access_key: "minioadmin"
secret_key: "minioadmin"
# Iceberg catalog — manages table metadata for analytics engines.
catalog:
type: "rest"
name: "danube_catalog"
properties:
uri: "http://nessie:19120/api/v1"
warehouse: "s3://my-bucket/warehouse"
# Global compaction defaults.
compaction:
target_parquet_size_mb: 200
max_flush_interval_seconds: 300
# Topics to export — each topic maps to one Iceberg table.
topics:
- namespace: "default"
topic: "sensor-data"
table_name: "sensor_data"
- namespace: "default"
topic: "events"
table_name: "events"
compaction:
target_parquet_size_mb: 100
max_flush_interval_seconds: 60
# Polling — how often to check for new sealed segments.
polling:
interval_seconds: 30

The danube-iceberg binary is available as a Docker image target in the project’s multi-stage Dockerfile:

Build
docker build --target iceberg -t danube-iceberg .
Run
docker run \
-v ./danube_iceberg.yaml:/etc/danube_iceberg.yaml:ro \
danube-iceberg \
--config /etc/danube_iceberg.yaml
docker-compose.yml
services:
danube-iceberg:
build:
context: .
dockerfile: Dockerfile
target: iceberg
volumes:
- ./danube_iceberg.yaml:/etc/danube_iceberg.yaml:ro
environment:
- RUST_LOG=danube_iceberg=info
command: ["--config", "/etc/danube_iceberg.yaml"]
depends_on:
- broker1
VariableDescription
RUST_LOGControls log verbosity. Recommended: danube_iceberg=info for production, danube_iceberg=debug for troubleshooting.