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: Point-to-Point

Point-to-point

Point-to-point pairs every publisher with its own subscriber on its own topic, so each message has exactly one recipient and the broker does no fan-out. It isolates the per-message cost of routing: latency is measured end to end, publisher to subscriber, and reported as an average per interval so that latency drifting upward over a run is visible rather than averaged away.

50,000 publisher/subscriber pairs, QoS 1, run at two publish rates: one and two messages per second per publisher, giving 50K and 100K messages/second in aggregate. Every broker sees an identical client and scenario; only the broker changes between runs.

Mosquitto is absent from these results because it could not complete the test. It fails to sustain rates above roughly 40K messages/second: its single event-loop thread saturates one core, and past that point the delivery backlog grows without bound rather than settling. Since it cannot hold the 50K rate for the duration of a run, there is no comparable figure to publish here. See the fan-in and fan-out pages for rates it does sustain.

This is not specific to our setup: EMQX's own published results for the same scenario record Mosquitto missing the target as well, settling at 37.3K messages/second against the 50K offered.

50.0K messages/second — 1 msg/s per publisher

ServerVersionQOSCPU LoadMessagesAchieved rateAvg latency
XMQ-1364%89,971,69349,984/s215us
FlashMQ1.26.21232% mean / 232% peak89,975,52949,986/s198us
EMQX-11071%89,920,47949,955/s53.0ms
XMQ
FlashMQ
EMQX
Average latency per interval, by broker100us1.0ms10.0ms100.0ms0s360s720s1080s1440selapsed

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

100.0K messages/second — 2 msg/s per publisher

ServerQOSCPU LoadMessagesAchieved rateAvg latency
XMQ1636%179,950,22599,972/s278us
EMQX11584%152,288,25684,604/s149s
XMQ
EMQX
Average latency per interval, by broker100us1.0ms10.0ms100.0ms1.0s10s100s1000s0s360s720s1080s1440selapsed

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

Reading the results

  • XMQ holds sub-millisecond latency at both rates. Doubling the load from 50K to 100K messages/second moves the average from 215us to 278us — a 29% rise for twice the work — while CPU goes from 364% to 636%, slightly better than linear.
  • EMQX completes the 50K run but two orders of magnitude slower, at 53.0ms against XMQ's 215us, and needs 1071% CPU against 364% to do it.
  • At 100K messages/second EMQX does not keep up. It achieves 84.6K/s against the 100K/s offered, and its latency climbs steadily through the whole run — 17.6s at the first interval to 263s at the last, rising by roughly 25 seconds every interval. A latency that grows linearly with elapsed time is a queue filling faster than it drains, so the figure is bounded only by run length and would keep climbing. Its 149s average is a property of when the run stopped, not a steady state.