The Danube Iceberg sidecar is configured with a single YAML file. This page documents every configuration option in danube_iceberg.yaml.
danube-iceberg --config danube_iceberg.yaml
Tip
Values shown below are the defaults from the shipped config-example.yaml. At minimum, you must configure broker.address, storage, and at least one entry in topics.
address : " localhost:6650 "
Field Type Default Description 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.
root : " s3://my-bucket/danube "
endpoint : " http://minio:9000 "
Field Type Default Description 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).
Key Description 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
Key Description service_account_pathPath to GCP service account JSON key file
Key Description account_nameAzure storage account name account_keyAzure storage account key
No additional options needed. The root path should be a local directory path.
Configures the Iceberg catalog where table metadata is committed. Omit this section entirely (or set type: "none") for Parquet-only mode without catalog integration.
uri : " http://nessie:19120/api/v1 "
warehouse : " s3://my-bucket/warehouse "
Property Description 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.
warehouse : " s3://my-datalake/warehouse "
Property Description warehouseS3 path for table data
Uses AWS credentials from the environment (IAM role, env vars, or ~/.aws/credentials).
table_bucket_arn : " arn:aws:s3tables:us-east-1:123456789012:bucket/my-table-bucket "
Property Description table_bucket_arnARN of the S3 Tables bucket endpoint_urlOptional custom endpoint
uri : " sqlite://iceberg_catalog.db "
warehouse : " /tmp/warehouse "
uri : " postgresql://user:pass@localhost:5432/iceberg "
warehouse : " s3://my-bucket/warehouse "
Property Description uriDatabase connection string (SQLite or PostgreSQL) warehousePath or S3 location for table data
Field Type Default Description 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.
target_parquet_size_mb : 200
max_flush_interval_seconds : 300
Field Type Default Description compaction.target_parquet_size_mbInteger 200Flush when the in-memory buffer reaches this size in MB. compaction.max_flush_interval_secondsInteger 300Maximum seconds between flushes, even if the size threshold is not reached.
Caution
For demos and testing, use small values (e.g., 1 MB and 30 seconds) to see data quickly. For production, use 200 MB and 300 seconds to produce optimally-sized Parquet files.
Only explicitly configured topics are exported. Each entry maps one Danube topic to one Iceberg table.
table_name : " sensor_data "
target_parquet_size_mb : 100
max_flush_interval_seconds : 60
Field Type Required Description namespaceString Yes Danube namespace. Combined with topic to form the fully qualified topic /{namespace}/{topic}. topicString Yes Danube topic name. table_nameString Yes Iceberg table name. The table is created automatically if it does not exist. compactionObject No Per-topic override for compaction thresholds. If omitted, global defaults apply.
Controls how frequently the sidecar checks the cluster for new sealed segments.
Field Type Default Description polling.interval_secondsInteger 30Seconds between segment discovery polls. Lower values reduce latency; higher values reduce API calls.
# Broker connection — any broker in the Danube cluster.
address : " localhost:6650 "
# Object storage — where segments are read from and Parquet files are written to.
root : " s3://my-bucket/danube "
endpoint : " http://minio:9000 "
# Iceberg catalog — manages table metadata for analytics engines.
uri : " http://nessie:19120/api/v1 "
warehouse : " s3://my-bucket/warehouse "
# Global compaction defaults.
target_parquet_size_mb : 200
max_flush_interval_seconds : 300
# Topics to export — each topic maps to one Iceberg table.
table_name : " sensor_data "
target_parquet_size_mb : 100
max_flush_interval_seconds : 60
# Polling — how often to check for new sealed segments.
The danube-iceberg binary is available as a Docker image target in the project’s multi-stage Dockerfile:
docker build --target iceberg -t danube-iceberg .
-v ./danube_iceberg.yaml:/etc/danube_iceberg.yaml:ro \
--config /etc/danube_iceberg.yaml
- ./danube_iceberg.yaml:/etc/danube_iceberg.yaml:ro
- RUST_LOG=danube_iceberg=info
command : [ " --config " , " /etc/danube_iceberg.yaml " ]
Variable Description RUST_LOGControls log verbosity. Recommended: danube_iceberg=info for production, danube_iceberg=debug for troubleshooting.