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 |