Stream Processing Systems — The Engines That Run It

The concepts of stream processing — events, time, windows, state, fault tolerance — are realized by a handful of systems, and choosing among them is one of the main practical decisions in building a streaming pipeline. This post maps the landscape: the engines, the models they embody, and how to think about which fits a problem. It's the bridge from understanding stream processing to actually running it.

Posts 2–6 built the concepts; this post covers the systems that implement them. You rarely build a stream processor from scratch (post 5’s lesson — the state and fault-tolerance machinery is why frameworks exist), so the real engineering is choosing and using the right engine. Understanding the landscape and its tradeoffs is what lets you pick well.

The landscape of stream processing systems

The systems cluster into a few categories, each embodying a different model:

The practical reality: for serious stateful streaming, Flink is the leading open-source engine; if Kafka is your backbone and you want lightweight processing, Kafka Streams fits; if you want managed/no-ops, a cloud service; and the concepts (Beam/Dataflow model) are common across all of them, so learning the concepts transfers between engines.

How to choose

Choosing a stream processing system comes down to a few decisive questions, not a “best engine” ranking:

The meta-point: there’s no universally best stream processor — the right choice depends on state/correctness needs, existing ecosystem, operational capacity, and latency requirements. The good news is that because the concepts (this series) are shared across engines, you can reason about any of them with the same mental model, and switching engines is more about operations than relearning streaming.

Stream processing SQL and the trend toward accessibility

A significant trend worth knowing: streaming SQL. Tools like ksqlDB, Flink SQL, and Spark Structured Streaming let you express stream processing in SQL — “SELECT count(*) FROM transactions GROUP BY TUMBLE(…)” — rather than low-level code. This matters because: - It makes stream processing accessible to analysts and engineers who know SQL but not stream-processing APIs, broadening who can build streaming pipelines. - It expresses the concepts of this series (windows, aggregations, joins over streams) in a familiar declarative form — windowing becomes a GROUP BY over a window, etc. - It’s part of a broader convergence of batch and streaming (post 1): the same SQL increasingly runs over both bounded and unbounded data, blurring the line.

The direction of the field is toward more accessible, more unified stream processing — SQL interfaces, the common Beam/Dataflow model, managed services — lowering the barrier that once made streaming a specialist skill. For an engineer, this means the concepts (events, time, windows, state, fault tolerance) are the durable knowledge, while the interface (code vs SQL, this engine vs that) is increasingly a choice rather than a steep separate learning curve. Learn the concepts, and the systems become approachable.

The throughline: you rarely build a stream processor (the state/fault-tolerance machinery is why frameworks exist), so the real decision is choosing an engine. The landscape: heavyweight frameworks (Flink — the leading open-source true stream processor with full event-time/state/exactly-once; Spark Structured Streaming — micro-batch, good in the Spark ecosystem), Kafka-native (Kafka Streams — a library embedded in your app, lightweight, ideal when Kafka is your backbone; ksqlDB for SQL), cloud-managed services (Dataflow/Kinesis/Azure — no-ops, some lock-in), and the unifying Apache Beam/Dataflow model (the concept set as a portable API). Choose by state/correctness needs (heavy stateful + exactly-once → Flink), existing ecosystem (Kafka → Kafka Streams; Spark → Structured Streaming; cloud → managed — often the dominant factor), build-vs-operate capacity, and latency. Streaming SQL (ksqlDB, Flink SQL) and the common Beam model are making streaming more accessible and unified — so the concepts are the durable knowledge, and the interface/engine is increasingly a choice.

Key takeaways

Further reading

Sources & References