Extended workMicros bench sweep: 10–100ms (the production regime) #156
Closed
eschizoid
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The bench sweep #148 asked for is on
main. We used to stop atworkMicros=1000(1ms), which is below where most production Kafka consumers actually sit. HTTP/DB hops are 10–100ms. Chuck Larrieu Casias (Conduktor) flagged the gap on LinkedIn; this sweep covers it.Full writeup:
benchmarks/results/2026-06-07.md. Raw JSON next to it.100ms per record (≈ a normal HTTP call)
KafkaConsumer+ virtual threadskpipe leads the next framework (CPC UNORDERED) at this cell by ~47×. Reactor and CPC PARTITION couldn't drain 25k records inside the wait window. Read those DNFs as architecture, not flakiness: CPC PARTITION caps in-flight at
partitions / workMicros≈ 80 ops/s with 8 partitions and 100ms work, and Reactor collapses underSchedulers.parallel()blocking work.The cross-library number I find most interesting is KPipe KEY_ORDERED vs Confluent PC KEY. Same per-key FIFO guarantee, different implementations (VT per key queue vs platform-thread pool with key gating). 5,210 vs 968 at 100ms, ~5.4× lead. Bigger at the lighter cells.
The honest caveat
Raw
KafkaConsumer+ a virtual-thread executor beats kpipe by 3-4× at every cell. 561k vs 372k at 0µs, 166k vs 45k at 100ms. That's the Loom floor without a framework, and it's the real ceiling for everything else in this table. The kpipe pitch isn't "fastest". It's framework conveniences (lowest-pending-offset commits, lag/in-flight backpressure, DLQ, batching, tracing) for ~3× of the bare-Loom number. I keep that disclaimer next to every kpipe number I quote, and you should too.A few things to know before you quote a number
singleThreadwas excluded. 25k records × 100ms sequentially is ~42 minutes per iteration; the full sweep would have been ~11 hours just for that one cell. The 0/100/1000 numbers in2026-05-30.mdestablish the per-partition floor and the rest is trivially worse.0.5.3.0artifact. I'll rerun onceastubbs/parallel-consumerpublishes to Maven Central. That fork is the live one per Confluent's CSID team.Refs: #148, PR #153.
Thanks @chuck-alt-delete for the original push.
(cc @igfasouza, @astubbs)
Beta Was this translation helpful? Give feedback.
All reactions