Benchmarks and Performance
Lab measurements. Every figure on this page was measured by RelayQ engineering on the stated hardware, build and configuration under lab conditions. Throughput, latency and footprint depend on hardware, network, configuration and workload; results in your environment will differ. Measure on your own target before relying on any number.
Only figures backed by a recorded measurement appear here. Figures previously published without one – HA failover time, replication lag and bridge store-and-forward throughput – have been withdrawn until a reproducible harness produces them.
Test Methodology
All benchmarks are reproducible using the included benchmark suite. Results below are from sustained runs (not burst), using conservative p50 values. Hardware specs and test parameters are documented for reproducibility.
x86_64 Results
Hardware: HP EliteBook 850 G1, Intel Core i7-4600U (2 cores / 4 threads, 2.1 GHz base, 3.3 GHz max),
16 GB RAM, Linux Mint 22.3, kernel 6.8.0. Release build with -C target-cpu=native.
Measured 2026-05-15. The runtime build under test predates 3.0.0-rc.2, so these figures are due for
re-measurement on the release candidate.
| Scenario | Throughput | Loss |
|---|---|---|
| QoS 0, 1 publisher × 1 subscriber, 100,000 messages | ~577,000 msg/s | 0% |
| QoS 1, 1 publisher × 1 subscriber, 100,000 messages | ~94,000 msg/s | 0% |
| QoS 2, 1 publisher × 1 subscriber, 100,000 messages | ~33,000 msg/s | 0% |
| QoS 0, 10 publishers × 10 subscribers | ~160,000 msg/s | 0% |
| QoS 1, 10 publishers × 10 subscribers | ~183,000 msg/s | 0% |
| QoS 0 fan-out, 1 publisher × 100 subscribers | ~32,000 msg/s | 0% |
| QoS 0 fan-in, 100 publishers × 1 subscriber | ~62,000 msg/s | 0% |
Round-trip latency on the same run (publish → subscriber receipt, one client pair):
| QoS | p50 | p99 | p99.9 |
|---|---|---|---|
| 0 | 27 µs | 48 µs | 68 µs |
| 1 | 43 µs | 72 µs | 100 µs |
| 2 | 98 µs | 145 µs | 203 µs |
Raspberry Pi 3 Results
Hardware: Raspberry Pi 3 Model B+, ARMv7 1.2 GHz, 969 MB RAM. Measured 2026-05-19 and 2026-05-21.
On this board the
mosquitto_pub/mosquitto_sub client tools are the bottleneck (~3.5k msg/s ceiling); the runtime itself
was not saturated.
| Scenario | Throughput | Loss |
|---|---|---|
| QoS 0, 1 publisher × 1 subscriber, persistent connection | ~3,700 msg/s (client-bound; ~4,400 msg/s with a compiled client, 4 publishers) | 0% |
| QoS 1, 1 publisher × 1 subscriber, persistent connection | ~3,900 msg/s | 0% |
| QoS 2, 1 publisher × 1 subscriber, persistent connection | ~900 msg/s | 0% |
| QoS 0 fan-out, 1 publisher × 10 subscribers | ~450 msg/s publish rate (4,500 msg/s delivered) | 0% |
Soak Test Results (6 × 1 h, Isolated Processes)
Six one-hour runs (QoS 0/1/2 at 100 clients, plus three further scenarios), each in its own OS process, on the x86_64 laptop above; 6/6 passed with zero loss. Measured 2026-05-15.
Run: 2026-05-15 · native Linux · i7-4600U · 1 hour per test × 6 tests
| Test | Duration | Clients | QoS | Result |
|---|---|---|---|---|
| QoS 0 sustained | 3,600s | 100 | 0 | ✅ zero loss |
| QoS 1 sustained | 3,600s | 100 | 1 | ✅ zero loss |
| QoS 2 sustained | 3,600s | 100 | 2 | ✅ zero loss |
| Connection churn | 3,600s | – | 0 | ✅ no fd leak, no deadlock |
| Will message delivery | 3,600s | – | – | ✅ 100% delivered |
| Session resumption | 3,600s | – | 1 | ✅ correct redelivery |
6/6 passed. 0 failures. Final RAM available: 14 GiB. Swap used: 0 B.
High Availability Metrics
High-availability failover and WAL replication are exercised by the acceptance suites and on a two-node
test pair. The runtime publishes $SYS/ha/replication_lag_ms and $SYS/ha/last_transition, so you can
measure both on your own pair. No failover-time or lag figure is published until a reproducible timing
harness produces one.
Bridge Store-and-Forward
The MQTT bridge buffers to disk while the upstream is unreachable and replays in order on reconnect; buffer
depth is visible at $SYS/broker/bridge/buffered_messages. Bridge throughput and replay-rate figures are
withdrawn pending a reproducible harness.
Binary Size
| Variant | Size | Features |
|---|---|---|
| Full (x86_64) | ~4.6 MB | All features (TLS, HA, protocols, UI, rules) |
| Full (armv7) | ~3.6 MB | All features on industrial ARM gateways |
| Lite (armv7) | ~1.0 MB | MQTT + licensing for constrained devices |
| Docker image (scratch) | ~4.6 MB | No OS layer, single static binary |
Memory Footprint
Measured on the x86_64 laptop above; memory scales with configured limits and connections.
| Deployment | Idle RSS | Per Connection | 1,000 Clients |
|---|---|---|---|
| Minimal config | ~4 MB | ~8 KB | ~12 MB |
| Full config (all features) | ~8 MB | ~32 KB (with QoS queue) | ~40 MB |
Competitive Comparison
Figures for other products are as published by their vendors and have not been re-measured by us; check them against the vendor’s current documentation before relying on them. The RelayQ row is our own lab measurement, under the disclaimer at the top of this page.
| Broker | QoS 0 (msg/s) | Binary Size | Dependencies | Protocol Translation |
|---|---|---|---|---|
| Mosquitto | ~500k (vendor-published) | 300 KB + libs | OpenSSL, libwebsockets | ❌ |
| NanoMQ | ~500k (vendor-published) | 1.2 MB | nng, mbedTLS | ❌ |
| rumqttd | ~800k (vendor-published) | 4 MB+ | tokio, 50+ crates | ❌ |
| EMQX | millions (cluster, vendor-published) | 200 MB+ | Erlang VM | Plugin |
| RelayQ | ~580k (measured, 2-core laptop) | 4.6 MB full / 1.0 MB lite | std-only core, TLS optional | ✅ Modbus, DNP3, OPC UA, BACnet/IP |
How to Reproduce
Benchmark tooling ships with the binary package. If it is not present in your distribution, email support@relayq.dev for access to the benchmark suite.