Skip to content

Why not Apache Fluss ​

Apache Fluss replaces Kafka with its own streaming storage. Producers, consumers and engines move to Fluss clients, and a Flink job tiers its tables into Paimon or Iceberg. The data is then held in two forms, the Fluss log and the lake table. Mink keeps Kafka and its clients as they are, and serves topics as Iceberg tables.

How Fluss works ​

PartFluss
ServersCoordinatorServers and TabletServers, with ZooKeeper
ClientsIts own Java, Rust, Python and C++ clients, and Flink and Spark connectors. The Kafka protocol is off by default and still in development.
TablesLog tables in Arrow, and primary key tables in RocksDB
LakeA Flink tiering job writes Paimon, Iceberg or Lance tables, at most table.datalake.freshness behind, 3 minutes by default
Fresh readsUnion reads of Fluss and the lake, in Flink and Spark. Other engines read the lake only.

Differences ​

FlussMink
ClientsA Fluss integration in every producer, consumer and engineKafka clients stay. Engines use Iceberg.
CopiesThe Fluss log, and the lake tablesKafka only. The bucket holds metadata.
FreshnessWhat the tiering job last committedEvery record committed when the table loads
Moving partsFluss cluster, ZooKeeper, Flink tiering jobMink nodes and Postgres
UpdatesPrimary key tables, written to Iceberg as equality deletesNone. One row per record.
HistoryLake tables outlive the log's TTLAs far back as Kafka's retention

When Fluss fits ​

  • Primary key tables with updates and point lookups.
  • Flink and Spark pipelines that read fresh data through union reads.
  • Lake history kept longer than the log.

Sources ​