Benchmarks and Performance

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.

ScenarioThroughputLoss
QoS 0, 1 publisher × 1 subscriber, 100,000 messages~577,000 msg/s0%
QoS 1, 1 publisher × 1 subscriber, 100,000 messages~94,000 msg/s0%
QoS 2, 1 publisher × 1 subscriber, 100,000 messages~33,000 msg/s0%
QoS 0, 10 publishers × 10 subscribers~160,000 msg/s0%
QoS 1, 10 publishers × 10 subscribers~183,000 msg/s0%
QoS 0 fan-out, 1 publisher × 100 subscribers~32,000 msg/s0%
QoS 0 fan-in, 100 publishers × 1 subscriber~62,000 msg/s0%

Round-trip latency on the same run (publish → subscriber receipt, one client pair):

QoSp50p99p99.9
027 µs48 µs68 µs
143 µs72 µs100 µs
298 µs145 µs203 µ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.

ScenarioThroughputLoss
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/s0%
QoS 2, 1 publisher × 1 subscriber, persistent connection~900 msg/s0%
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

TestDurationClientsQoSResult
QoS 0 sustained3,600s1000✅ zero loss
QoS 1 sustained3,600s1001✅ zero loss
QoS 2 sustained3,600s1002✅ zero loss
Connection churn3,600s0✅ no fd leak, no deadlock
Will message delivery3,600s✅ 100% delivered
Session resumption3,600s1✅ 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

VariantSizeFeatures
Full (x86_64)~4.6 MBAll features (TLS, HA, protocols, UI, rules)
Full (armv7)~3.6 MBAll features on industrial ARM gateways
Lite (armv7)~1.0 MBMQTT + licensing for constrained devices
Docker image (scratch)~4.6 MBNo OS layer, single static binary

Memory Footprint

Measured on the x86_64 laptop above; memory scales with configured limits and connections.

DeploymentIdle RSSPer Connection1,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.

BrokerQoS 0 (msg/s)Binary SizeDependenciesProtocol Translation
Mosquitto~500k (vendor-published)300 KB + libsOpenSSL, libwebsockets
NanoMQ~500k (vendor-published)1.2 MBnng, mbedTLS
rumqttd~800k (vendor-published)4 MB+tokio, 50+ crates
EMQXmillions (cluster, vendor-published)200 MB+Erlang VMPlugin
RelayQ~580k (measured, 2-core laptop)4.6 MB full / 1.0 MB litestd-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.