Library or separate engine
Libraries run inside your service. Flink and Spark are separate engines: you run a cluster or pay for a managed one.
Pick your language or engine. Each guide compares the options side by side, checked against specific releases.
Options differ in where they run, which languages they support, and what happens to their state after a restart.
Libraries run inside your service. Flink and Spark are separate engines: you run a cluster or pay for a managed one.
Kafka Streams runs only on the JVM. Python, Go, and .NET have their own libraries. Flink and Spark also have Python APIs.
Kafka Streams reads and writes topics in one cluster. Flink and Spark also connect to files, tables, and databases.
Most options restore state from Kafka topics or checkpoints. Watermill leaves it to you, and go-streams keeps windows in memory.
Goka has no built-in windows, Faust no built-in joins, and most Kafka Streams joins need co-partitioned topics.
Exactly-once output works in Kafka Streams, Flink, Quix, Faust, and Streamiz. Spark's Kafka sink and Goka are at-least-once.
Unit tests check the logic, not what reaches Kafka. On a test cluster, check six things.
Work out the expected result by hand, then read the output topic, with read_committed if it is exactly-once. Results can lag until the next commit or window close.
Most joins in Kafka Streams and Goka need a key on the same partition number in both topics, but default partitioners differ across clients. Compare partitions for the same key.
Check that output decodes with the schema consumers expect. Serdes.Long() writes 8 raw bytes, and the Spring Cloud Stream binder can fall back to JSON on Avro topics.
Kafka Streams commits to a group named after application.id, and Flink when checkpoints complete. Spark commits nothing, so copy its offsets into a group.
Give each input a unique ID and restart mid-run. For one-to-one output, compare IDs: duplicates fit at-least-once, missing IDs don't. For aggregates, check each key's totals.
Send a record the processor cannot read. Depending on the framework and settings, it reaches a dead letter topic, gets skipped, or stops the application.
Whichever framework you choose, Kafma helps you check the records it reads and writes, and how far it has read.
Available for macOS, Windows, Linux