Skip to content

turbine-bench

Side-by-side throughput / CPU benchmarks for Turbine and competing Python stream processors. One directory per product, identical workloads, shared Redpanda + a shared synthetic input topic. The goal is relative comparison, not absolute numbers — all results here are same-machine.

How it works

Each product is benched on its own with the orchestrator:

just bench turbine            # all workloads for a product
just bench quix stateless     # a single workload

Every run measures throughput (from Kafka offsets), CPU and memory across the full process tree (utime+stime deltas from /proc, PSS), end-to-end or window-close latency where the run keeps up, records written to any topic other than the input/output (a broker hop), the host it ran on, and sanity indicators (selectivity vs theory, breach rate, pane cadence). Each run is appended to the results store and the comparison pages are regenerated.

Two questions drive the tables: how much flow one Kafka partition yields (each product using its own in-process mechanism to spread that partition over cores), and how much flow per core and per GB it costs.

Results

See Results for the per-workload comparison (latest result of every product, side by side) and the full run history.

Workloads

Workload Description
stateless Filter European regions (eu-*), compute latency_ratio + sla_status, republish — fed beyond capacity (a ceiling)
latency The same app at an iso-rate every product keeps up with, with the latency probe on
windowed-lowcard Group-by region (16 keys), count + avg(latency_ms), tumbling 30 s event-time
windowed-highcard Same, grouped by user_id (≈ 2 × rate keys) — the keyed-state store
inference Score every record with one frozen MLP: Turbine's native infer= operator vs the same model as eager PyTorch in every framework