Deployment shape

What you actually have to run

If you have Kafka and a job that fits on one machine, these are your real alternatives. Deployment shape only. For our delivery guarantee, the harness that proves it.

UbikKafka StreamsProtonFlink
What you runone process, or a library inside yoursa library inside your JVM appa servera JobManager and TaskManagers
Query languageSQLJava or KotlinSQLSQL or Java
Where window state livesone local fileRocksDB, plus a changelog topic in your brokerserver-localRocksDB, plus a checkpoint store
Embed in your own processyes, C ABI, any languageJVM onlynono
Runtime dependencieslibc and libstdc++a JVMa servera JVM and a cluster
Limits, up front

What Ubik is not

Not a Flink replacement at hyperscale

Above a few million events/s sustained, state beyond one machine’s NVMe, or hot-state sub-second failover, that is Flink territory.

Not a message broker

It reads and writes logs, it never becomes the log of record. You bring the durable Kafka-shaped thing upstream. Rebuilding one is out of scope.

Not append-and-correct

Windows close on the watermark and emit once: no retractions, no late corrections downstream. Two streams join only on an equi key plus a bounded time band; anything unbanded is refused at plan time rather than accumulating state without bound. No Protobuf. That disqualifies some workloads.

Not a distributed system

No distributed code path will ever land in the core. A second machine would make it the thing it replaces.

A CLUSTERfour services and a Maven build before the first resultKubernetesJobManagerTaskManagerRocksDBTaskManagerRocksDBtopic intopic outUBIKone binaryone processreal SQL · exactly-onceone state filetopic intopic out
The same job, twice. Most production stream jobs run under 100k events/s and fit on two cores; ubik collapses the deployment to one process next to the Kafka you already run, with one state file for checkpoint and recovery. Past a few million events/s sustained, or state beyond one machine's NVMe, take the cluster. The docs say so.
One published rate, and division

What the cluster costs you in cash

Confluent Cloud for Apache Flink publishes $0.21 per CFU-hour. A statement consumes at least one unit, and a stateful windowed job usually more. One unit running continuously for a year is $1 840, the documented floor. That is stream-processing compute alone, before the Kafka cluster and data transfer.

Three modest continuous jobs at that floor is roughly $5 500 a year and climbs with every job you add. Self-managing Flink instead moves the cost from an invoice to a salary line.

Ubik Team is $1,200/yr for up to ten production instances, on machines you already have, with no usage-based licence fees. Infrastructure costs are separate. There is no per-job cost, because there is no control plane charging for one.

Run the division against your own usage. If you pay for stream-processing compute today, that number is on an invoice you already have.

Rate as published by the vendor, A statement consumes at least one CFU and a stateful windowed job usually consumes more, so this is the documented floor. Flink compute only: the Kafka cluster and data transfer are billed separately.