Skip to content

Configuration ​

A node reads its settings from the defaults, then a TOML file given with -c, then MINK_* environment variables. An unknown setting fails startup.

toml
postgres = "postgres://mink:mink@db:5432/mink"
warehouse = "s3://lake/mink"

[kafka]
bootstrap = ["kafka-1:9092", "kafka-2:9092"]

[storage]
region = "us-east-1"

[schema_registry]
type = "confluent"
url = "http://registry:8081"

Every setting has a variable: MINK_ and its name in capitals, with __ between a table and its keys. Lists take their TOML form.

bash
MINK_POSTGRES=postgres://mink:mink@db:5432/mink
MINK_KAFKA__BOOTSTRAP='["kafka-1:9092", "kafka-2:9092"]'
MINK_KAFKA__SASL__PASSWORD=secret
MINK_SCHEMA_REGISTRY__TYPE=confluent
MINK_SCHEMA_REGISTRY__URL=http://registry:8081

Durations are a number and a unit: ms, s, m or h. Sizes are bytes. Every duration and size must be positive.

Roles and listeners ​

SettingDefaultPurpose
roles["catalog", "s3", "indexer", "admin"]Roles this node runs. See Overview.
catalog_address127.0.0.1:8181Where the REST catalog listens
s3_address127.0.0.1:9100Where the S3 endpoint listens
admin_address127.0.0.1:9180Where the admin API, the console and /metrics listen
admin_remotefalseAllow an admin_address that is not loopback. The admin API has no authentication.

Addresses others reach ​

SettingDefaultPurpose
catalog_endpointhttp://127.0.0.1:8181The catalog URL as engines reach it, shown on the console's Connect page
s3_endpointhttp://127.0.0.1:9100The S3 endpoint URL as engines reach it, handed out by the catalog
advertised_addresshttp://{s3_address}The URL other nodes forward data file reads to
advertised_admin_addresshttp://{admin_address}The URL other nodes forward admin requests to

Services ​

SettingDefaultPurpose
postgrespostgres://mink:mink@localhost:5432/minkPostgres connection URL. TLS is set in the URL: sslmode=verify-full checks the server's certificate against sslrootcert, or the Mozilla CA certificates without it. require encrypts without checking the certificate.
kafka.bootstrap["localhost:9092"]Kafka brokers to bootstrap from
kafka.tlsnoneTLS to the brokers, verified against the system's CA certificates. {} turns it on.
kafka.tls.canoneA PEM file of more CA certificates to trust
kafka.sasl.mechanismnonePLAIN, SCRAM-SHA-256 or SCRAM-SHA-512, as Kafka names them
kafka.sasl.username, kafka.sasl.passwordnoneThe SASL credentials
warehouses3://mink/warehouseWhere Iceberg metadata lives, and the root of every table location
storage.endpointnoneAn S3-compatible store such as RustFS or MinIO, addressed in path style. Without it, AWS S3 in storage.region.
storage.regionus-east-1The bucket's region
storage.credentialsnone{ access_key_id, secret_access_key }. Without them, AWS's own sources: the AWS_* environment variables, web identity, the ECS task role, EKS Pod Identity, or the instance profile.
schema_registry.typenoneconfluent, for Confluent Schema Registry or a registry with its API, or glue, for AWS Glue Schema Registry.
schema_registry.urlnoneFor confluent: the registry's URL
schema_registry.username, schema_registry.passwordnoneFor confluent: Basic authentication
schema_registry.namenoneFor glue: the registry's name. A record's schema must be a version of the schema named after its topic.
schema_registry.regionnoneFor glue: the registry's region. Without it, the AWS SDK's own sources, such as AWS_REGION. Credentials come from AWS's own sources, as for storage.credentials.
namespacekafkaThe catalog's one namespace

Indexing ​

SettingDefaultPurpose
historyallHow far backfill goes: all, none, or { since = "<RFC 3339 time>" }
file_bytes134217728A range of records becomes files when their key, value and header bytes reach this
file_window60sA range ends when its timestamps span this, or its first record was read this long ago
backfill_offsets100000Offsets per backfill chunk
retention_check60sHow often indexers check Kafka's earliest offsets
granularityhourTime partitioning for tables added without one: hour, day, month or none
max_partitionsunlimitedThe most partition leases one node holds
lease_ttl30sLease lifetime. Leases renew every third of it.

Snapshots and retention ​

SettingDefaultPurpose
snapshot_interval10sHow often a writer commits
snapshot_retention24hHow long snapshots are kept
collection_interval10mHow often a writer deletes unused metadata objects
collection_grace1hHow long an unused object waits before deletion
assembly_delay10mHow long after its end a time bucket is assembled
assembled_bytes1073741824The largest assembled file
statistics_interval1hHow often a writer publishes a statistics file. Must be shorter than snapshot_retention.

Cache ​

SettingDefaultPurpose
cache_bytes1073741824Memory for built data files and metadata objects
cache_dirnoneDirectory of the disk tier. Without it, the cache has no disk tier.
cache_disk_bytes53687091200Size of the disk tier
cache_admissionreusedWhich blocks go to disk: reused, fetched or evicted. See Reads.
max_buildsthe number of CPUsBuilds the node runs at once

Console ​

SettingDefaultPurpose
duckdb_enginenone, jsDelivrBase URL of the DuckDB-Wasm files the SQL page loads
duckdb_extensionsnone, DuckDB's ownDuckDB extension repository for the SQL page. A mirror holds iceberg, httpfs, parquet, avro and json.