XMQ
Credits:The XMQ web site is provided by Linotex.The XMQ and SPTK Windows installers are created with Advanced Installer free Open-Source license.
There were 0 unique visitors to this page

MQTT Performance Tests: Fan-In

Fan-in

Fan-in is the many-to-few case: a large number of publishers, each on its own topic, feeding a small pool of subscribers that share the load through a shared subscription. Every message is delivered to exactly one subscriber, so the broker does no delivery amplification — what this measures is ingest at scale plus the cost of dispatching across a shared subscription group.

50,000 publishers on 50,000 topics at one message per second, so 50,000 messages/second in aggregate, consumed by 500 subscribers sharing $share/benchmark/test/#. QoS 1, 16-byte payload, 30 minutes. The scenario mirrors the Open MQTT Benchmark Suite's singlenode-sharesub-50K-500-50K-50K case so the figures can be read against those published there; see the Test Environment page for hardware, tuning and method.

ServerVersionMessagesAchieved rateAvg latencyCPUPeak RAM
XMQ0.9.1389,999,80349,999/s217us267% mean / 341% peak242 Mb
EMQX5.8.975,524,82841,958/s(below target)103s1323% mean / 1649% peak9.78 Gb
Mosquitto2.0.22-5build189,967,83449,982/s379.4ms100% mean / 101% peak31.4 Gb
FlashMQ1.26.289,999,81149,999/s201us201% mean / 213% peak242 Mb
XMQ
EMQX
Mosquitto
FlashMQ
Average latency per interval, by broker100us1.0ms10.0ms100.0ms1.0s10s100s1000s0s360s720s1080s1440selapsed

Latency uses a logarithmic axis: the brokers differ by several orders of magnitude in this scenario, and a linear axis would flatten the faster ones onto the baseline. Hover the chart for per-interval values.

Reading the results

  • XMQ holds the full rate at 217µs, and holds it flat: the ten interval averages span 215–218µs across the whole thirty minutes. It does so on 2.7 of the 8 vCPUs it is pinned to — a third of its own allowance, an eighth of the machine — in 242 MB.
  • Mosquitto also holds the rate, at 379 ms, and is the one overloaded case here whose latency improves over the run rather than diverging (946 ms down to 145 ms), on a single core. The cost is memory: 31.4 GB peak on a 40 GB host. This configuration leaves the in-flight and queued message limits unbounded, so the early backlog is absorbed as heap rather than as dropped messages.
  • EMQX did not reach the offered rate here: 41,958/s of 50,000/s, with latency climbing from 226 ms to 260 s, while saturating all 16 vCPUs. That does not match EMQX's own published result for this scenario (50,000/s at 2.51 ms), and the explanations within our control were checked and ruled out: its configuration follows EMQX's performance tuning guide, the load generator sat at 275% of the 1600% available, memory was never constrained, and the hardware is equivalent. What remains is the broker version (5.8.9 here against 5.0.21 there) and the load generator. It is reported as a result for this version under this harness, not as a general statement about EMQX — particularly since Mosquitto held the same rate on one core while EMQX saturated thirteen, which points at something specific to shared-subscription dispatch in this build.