Skip to content

Why not connectors ​

A connector is a stream processor that copies a topic into an Iceberg table: Flink, the Iceberg Kafka Connect sink, Spark Structured Streaming, RisingWave or Amazon Data Firehose. Some run as one binary, some as a cluster. The table is a second copy, as fresh as the last commit. Mink serves the topic itself as the table.

connectorKafkarecordsconnectorperiodic commitsbucketParquet, metadataenginereads the copyMinkKafkathe only copyMinkbuilds on readenginereads up to the endbucketmetadata only

Freshness ​

A connector's table changes only when it commits. Records written since the last commit are not in it.

ConnectorCommitsDefault
FlinkAfter each checkpointCheckpointing is off by default, and without it nothing commits
Iceberg Kafka Connect sinkEvery iceberg.control.commit.interval-ms5 minutes
Spark Structured StreamingEvery triggerIceberg recommends at least 1 minute
RisingWaveEvery commit_checkpoint_interval checkpoints60, about 60 seconds
Amazon Data FirehoseWhen its buffer fills or its interval ends300 seconds or 5 MiB

A Mink table load covers every record committed in Kafka at that moment. Snapshots set nothing but how much of a load is tail, see Snapshots.

Upkeep ​

Frequent commits write small files and many snapshots. A connector's table needs maintenance jobs.

TaskConnectorMink
Small filesrewrite_data_filesAssembly joins an ended time bucket's files, without reading Kafka
Old snapshotsexpire_snapshotsExpired after snapshot_retention
Unused filesremove_orphan_filesCollected after collection_grace
Manifestsrewrite_manifestsGrouped by time bucket, one per bucket once assembled

Expiring snapshots or deleting orphan files under a running Flink job can break its state. Mink's writer runs all of these itself, see Retention.

Differences ​

ConnectorMink
CopiesKafka, and Parquet in the bucketKafka only. The bucket holds metadata.
FreshnessThe last commitEvery record committed when the table loads
Moving partsA Flink, Connect, Spark or RisingWave deployment, a catalog, maintenance jobsMink nodes and Postgres
Schema changesOff by default in the Connect sink. Firehose drops fields the table lacks.New Schema Registry versions evolve the table
HistoryKept in the table after Kafka deletes itAs far back as Kafka's retention
TransformsAny, in the jobNone. One row per record.

When a connector fits ​

  • Tables kept longer than the topic's retention.
  • Records transformed, joined or filtered before they land.
  • Engines that read only from cloud storage.

Sources ​