Skip to main content

Stress Test Results

Long-running stress tests comparing sustained performance between Dekaf and Confluent.Kafka under real-world load.

Last Updated: 2026-08-27 11:20 UTC

info

The paired Dekaf vs Confluent comparison runs weekly (Sunday 2 AM UTC) and updates this page. Manual dispatches stay Dekaf-only unless full_run explicitly requests the same paired publish path. Tests measure sustained performance over 15+ minutes with real Kafka instances.

At a glance

Each row is a like-for-like comparison: both clients run the same sustained workload sequentially on the same VM, and repeated samples are aggregated with a geometric mean across both run orders.

Paired same-VM stress runSustained throughputBroker-confirmed messages per second for the same workload.

Bars are scaled within each scenario for a direct client-to-client comparison.

Median client CPU timeCPU cost per messageCPU time needed to deliver one message; shorter bars are better.

Bars are scaled within each scenario for a direct client-to-client comparison.

ScenarioDekafConfluentThroughputCPU per message
Produce — fire-and-forget1,369,359 msg/s1,014,593 msg/s1.3× faster2.1× less
Produce — fire-and-forget (3 brokers)1,029,417 msg/s652,006 msg/s1.6× faster1.9× less
Produce — acks=all1,191,980 msg/s901,326 msg/s1.3× faster2.1× less
Produce — acks=all (3 brokers)987,486 msg/s738,149 msg/s1.3× faster1.8× less
Produce — fire-and-forget, idempotent1,245,247 msg/s971,117 msg/s1.3× faster1.8× less
Produce — fire-and-forget, idempotent (3 brokers)759,039 msg/s627,177 msg/s1.2× faster1.7× less
Produce + consume round-trip3,037,259 msg/s1,254,153 msg/s2.4× faster2.2× less
Produce — transactional (exactly-once) (3 brokers)1,095 msg/s159 msg/s6.9× faster1.4× less
Consume — messages1,611,723 msg/s1,128,564 msg/s1.4× faster1.6× less
Consume — batches1,654,431 msg/s
Consume — raw bytes3,020,532 msg/s
Consume — raw byte batches3,912,585 msg/s

"On par" means within ±5% — differences that small are run-to-run noise. "CPU per message" compares the client CPU cost of delivering one message; "less" means Dekaf needs less CPU. Rows showing "—" have no Confluent counterpart in this run (for example, batch and raw consume APIs that librdkafka does not expose). The full per-run data is below.

Full results

Each section holds the measured per-run data behind the summary: repeated same-VM samples in both client orders, CPU per message and per request, and throughput drift across the run.

Producer (Fire-and-Forget) (15 minutes, 1000B messages)

Order-Balanced Aggregate

ClientSamplesGeomean comparison msg/sSample rangeMedian CPU μs/msgComparison Ratio
Dekaf21,369,3591,292,733–1,450,5270.821.35x
Confluent21,014,593975,031–1,055,7611.751.00x

The aggregate uses the geometric mean across balanced same-VM samples run in both dekaf-first and confluent-first order. Raw ordered samples remain below.

ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf (3conn)0.76723.201,787,9451,787,044-5.7%-0.31%1705.121,787,94501.35
Dekaf (dekaf-first)0.74760.231,413,9071,450,527-6.1%-0.50%1348.411,413,90701.04
Dekaf (confluent-first)0.90921.541,271,5621,292,733+10.5%+0.74%1212.661,271,56201.14
Confluent (confluent-first)1.74-981,3751,055,761-26.0%-2.88%935.91981,37501.71
Confluent (dekaf-first)1.77-961,996975,031+3.3%+0.58%917.43961,99601.70

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer (Fire-and-Forget), 3 Brokers (15 minutes, 1000B messages)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf (3conn)1.02952.181,260,3411,220,523-20.1%-1.72%1201.951,260,34101.28
Dekaf1.211114.311,040,1801,029,417+10.6%+1.14%991.991,040,18001.26
Confluent2.29-660,092652,006-9.2%-0.83%629.51660,09201.51

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer (Acks All) (15 minutes, 1000B messages)

Order-Balanced Aggregate

ClientSamplesGeomean comparison msg/sSample rangeMedian CPU μs/msgComparison Ratio
Dekaf21,191,9801,144,856–1,241,0420.891.32x
Confluent2901,326826,049–983,4641.911.00x

The aggregate uses the geometric mean across balanced same-VM samples run in both dekaf-first and confluent-first order. Raw ordered samples remain below.

ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf (dekaf-first)0.80766.051,230,0031,241,042-6.2%-0.60%1173.021,230,00300.99
Dekaf (confluent-first)0.981001.951,140,3191,144,856+6.3%+0.36%1087.491,140,31901.11
Confluent (dekaf-first)1.75-981,544983,464-20.7%-1.56%936.07981,54401.72
Confluent (confluent-first)2.07-837,255826,049+1.9%+0.16%798.47837,25501.73

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer (Acks All), 3 Brokers (15 minutes, 1000B messages)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf1.181140.16984,732987,486-1.4%-0.09%939.11984,73201.16
Confluent2.12-741,759738,149-0.4%+0.08%707.40741,75901.58

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer (Fire-and-Forget, Idempotent) (15 minutes, 1000B messages)

Order-Balanced Aggregate

ClientSamplesGeomean comparison msg/sSample rangeMedian CPU μs/msgComparison Ratio
Dekaf21,245,2471,184,729–1,308,8571.001.28x
Confluent2971,117970,002–972,2331.761.00x

The aggregate uses the geometric mean across balanced same-VM samples run in both dekaf-first and confluent-first order. Raw ordered samples remain below.

ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf (3conn)0.84787.331,645,2561,593,636-0.1%-0.01%1569.041,645,25601.38
Dekaf (confluent-first)0.91912.871,298,1661,308,857+0.5%-0.04%1238.031,298,16601.18
Dekaf (dekaf-first)1.101124.151,174,9341,184,729-7.4%-0.78%1120.501,174,93401.29
Confluent (dekaf-first)1.75-982,564972,233+3.9%+0.63%937.05982,56401.72
Confluent (confluent-first)1.78-942,558970,002+15.6%+1.37%898.89942,55801.67

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer (Fire-and-Forget, Idempotent), 3 Brokers (15 minutes, 1000B messages)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf (3conn)1.461374.93842,558823,261-16.8%-1.52%803.53842,55801.23
Dekaf1.571554.09760,858759,039+8.3%+0.65%725.61760,85801.20
Confluent2.62-624,978627,177+10.5%+0.86%596.03624,97801.63

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Producer → Consumer Round-Trip Steady State (15 minutes, 128B messages)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf0.985274.001,336,2263,037,259+44.2%+689.79%163.111,336,22601.31
Confluent2.17-125,2991,254,153+24.0%+148.48%15.30125,29900.27

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Round-Trip Validation

ClientExpectedConsumedMissingDuplicatesCorruptOut of OrderWrong PartitionUnexpectedTimed OutResult
Confluent19,792,47719,792,477000000noPASS
Dekaf19,792,47719,792,477000000noPASS
Producer (Transactional EOS), 3 Brokers (15 minutes, 1000B messages)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf253.88253.888081,095+11.5%+1.09%0.771,07800.27
Confluent356.45-119159+3.9%+0.31%0.1115800.06

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Messages/sec counts broker-confirmed deliveries (end-offset delta). Accepted msg/s is the client-side append rate — a large gap means messages were buffered or dropped without ever reaching the broker.

Transaction Verification

ClientAcceptedCommittedAbortedDeliveredDuplicatesShortfallAborted leaksUnexpectedMissing sentinelsStatus
Confluent142,300106,80035,500106,80000000PASS
Dekaf970,000727,500242,500727,50000000PASS
Consumer (15 minutes, 1000B messages, 16,384B seed batches)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf0.83-1,602,1521,611,723+8.1%+0.64%1527.93-01.33
Confluent1.28-1,089,9521,128,564-5.5%+0.02%1039.46-01.40

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Consumer (Batch) (15 minutes, 1000B messages, 16,384B seed batches)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf0.80-1,652,2541,654,431+0.1%+0.01%1575.71-01.33

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Consumer (Raw Bytes) (15 minutes, 1000B messages, 16,384B seed batches)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf0.52-3,057,8213,020,532+7.7%+0.70%2916.17-01.58

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Consumer (Raw Batch) (15 minutes, 1000B messages, 16,384B seed batches)
ClientCPU μs/msgCPU μs/requestMessages/secMedian msg/sDriftSlope %/minMB/secAccepted msg/sErrorsStanding cores
Dekaf0.40-3,886,4123,912,585+11.4%+1.09%3706.37-01.56

Median msg/s is the median sampled client-side throughput interval; it shows steady-state throughput without letting a short late-run stall dominate the whole-run average.

Rows and Comparison Ratio use Median msg/s when available; older result files without interval samples fall back to Messages/sec.

Drift compares last-third with first-third average throughput. Slope is the normalized least-squares trend; steady-state below 85% of peak or slope below -1%/min fails the regression gate.

Memory & GC statistics — latest run
ClientScenarioGen0Gen1Gen2Total AllocatedAlloc/msg
ConfluentConsumer19267002229.16 GB2.38 KB
ConfluentProducer (Fire-and-Forget)203753111059.96 GB1.26 KB
ConfluentProducer (Fire-and-Forget)211321811039.04 GB1.26 KB
ConfluentProducer (Fire-and-Forget), 3 Brokers14404411712.95 GB1.26 KB
ConfluentProducer (Acks All)16432011904.24 GB1.26 KB
ConfluentProducer (Acks All)218254811060.16 GB1.26 KB
ConfluentProducer (Acks All), 3 Brokers15346200801.11 GB1.26 KB
ConfluentProducer (Fire-and-Forget, Idempotent)187967111018.01 GB1.26 KB
ConfluentProducer (Fire-and-Forget, Idempotent)2187414811061.41 GB1.26 KB
ConfluentProducer (Fire-and-Forget, Idempotent), 3 Brokers13763700674.99 GB1.26 KB
ConfluentProducer → Consumer Round-Trip Steady State53604415.77 GB856 B
ConfluentProducer (Transactional EOS), 3 Brokers8111213.09 MB1.53 KB
DekafConsumer239661522718.54 GB1.98 KB
DekafConsumer (Batch)24703322803.87 GB1.98 KB
DekafConsumer (Raw Bytes)421408.28 MB0 B
DekafConsumer (Raw Batch)821913.06 MB0 B
DekafProducer (Fire-and-Forget)24332108.84 MB0 B
DekafProducer (Fire-and-Forget)21732839.40 MB1 B
DekafProducer (Fire-and-Forget), 3 Brokers12632235.54 MB0 B
DekafProducer (Acks All)17132130.63 MB0 B
DekafProducer (Acks All)17832654.24 MB1 B
DekafProducer (Acks All), 3 Brokers12932144.51 MB0 B
DekafProducer (Fire-and-Forget, Idempotent)17721115.13 MB0 B
DekafProducer (Fire-and-Forget, Idempotent)17631598.43 MB1 B
DekafProducer (Fire-and-Forget, Idempotent), 3 Brokers10032198.31 MB0 B
DekafProducer → Consumer Round-Trip Steady State110121286.91 MB15 B
DekafProducer (Transactional EOS), 3 Brokers7911110.58 MB120 B
Dekaf (3conn)Producer (Fire-and-Forget)25732948.77 MB1 B
Dekaf (3conn)Producer (Fire-and-Forget), 3 Brokers17442714.18 MB1 B
Dekaf (3conn)Producer (Fire-and-Forget, Idempotent)27162880.94 MB1 B
Dekaf (3conn)Producer (Fire-and-Forget, Idempotent), 3 Brokers11631556.14 MB1 B

Confluent.Kafka uses native librdkafka; .NET GC allocation counters exclude unmanaged allocations.


About These Tests

Stress tests measure sustained performance over extended periods against real Kafka brokers, with both clients paired on the same VM for a fair comparison.

Methodology — how these numbers are produced
  • Real Kafka: Tests run against actual Apache Kafka instances
  • CPU Isolation: Brokers are pinned to dedicated cores and the client under test to its own cores, so the client — not the broker — is the measured bottleneck
  • RAM-backed Broker Logs: Kafka log dirs are mounted on tmpfs so disk I/O never caps broker ingestion
  • Delivered Throughput: producer tables report broker-confirmed throughput, measured as the end-offset delta across all partitions — not the client-side append rate, which can run far ahead of what the broker ever accepts
  • Median Interval Throughput: table order and comparison ratios use median sampled client-side msg/s when available, which is less sensitive to short late-run stalls than the whole-run mean
  • Same-VM Pairing: comparable Dekaf and Confluent scenarios run sequentially inside one job/VM; 1-broker producer acceptance lanes run twice in opposite client orders and publish a geometric-mean aggregate, while other lanes alternate order by workflow run number
  • Backpressure Parity: both producers are bounded to the same 512 MB local buffer (Dekaf BufferMemory, librdkafka queue.buffering.max) and block on a full buffer, so neither client can absorb an unbounded backlog into RAM
  • Consumer Loop Replay: Consumer tests re-read a pre-seeded topic (seek to beginning when drained) instead of racing a live feeder, so the consumer itself is measured; table headings report the 16KB seed batch size because it amplifies per-batch costs relative to well-batched workloads
  • Delivery Latency Sampling: 1 in 1000 produced messages is awaited end-to-end to record true broker round-trip latency
  • Round-Trip Correctness: Bounded sequenced payloads are consumed back and checked for corruption, wrong partitions, gaps, duplicates, and reordering
  • Round-Trip CPU Scope: CPU time covers both bulk production and consumer validation; it is not a producer-only metric
  • Round-Trip Alloc Scope: the GC/alloc window likewise spans production plus consume-side validation; values are deliberately consumed as byte[] on both clients for parity, so each consumed payload is materialized as a fresh array (~152 B at 128 B messages) — the expected allocation floor for this lane, not a leak
  • CPU Efficiency: CPU time per message differentiates client efficiency even at equal throughput
  • Noise-Aware Trends: each scenario is compared with its last 10 matching runs using a median ± 2×MAD band; one adverse excursion warns and two consecutive regressions fail the workflow
  • Parallel Execution: Each scenario runs in its own isolated environment
  • Both Clients: Direct comparison between Dekaf and Confluent.Kafka
  • Memory Monitoring: Tracks GC behavior and memory usage over time
  • Error Rates: Ensures stability under load