![]() | ||||
| 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: ClusterFour Nodes, One Client, One Shared StoreThe XMQ cluster has four broker nodes, each on its own AWS The comparison covers only brokers that can form a cluster in their community editions. XMQ and EMQX 5.8.9 both do so without a commercial licence; brokers whose community editions do not support clustering were not tested here, because a single-node result would not answer the question this page asks. Every scenario starts on a freshly restarted cluster, with the other broker stopped. Each node is a separate process on a separate machine, so the numbers include the cluster links, not just one broker's event loop. Latency is end-to-end delivery; memory and CPU are the sum of the four nodes. See the Test Environment page for the single-node method and the client. The four throughput scenarios use MQTT clean sessions ( Throughput is only half of what a cluster has to do. What happens when a node dies under load — whether the survivors keep serving and the victim comes back — is on the Cluster Survivability page. 500K Connections500,000 clients connecting at 5,000/s, spread evenly over the four nodes: 125,000 each. Client: AWS c5n.4xlarge, 29 bound source addresses, xmq_scn 1.0.0, no CPU affinity
EMQX XMQ Delivery latency over the testBroker memory (RSS) over the testLatency 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. Fan-In 50K50,000 publishers send one QoS 1 message each second to a cluster-wide shared subscription with 500 subscribers. Client: AWS c5n.4xlarge, 29 bound source addresses, xmq_scn 1.0.0, no CPU affinity
EMQX XMQ Delivery latency over the testBroker memory (RSS) over the testLatency 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. Fan-Out 250KFive publishers send 250 messages/second in total to 1,000 subscribers: 250,000 deliveries/second. Client: AWS c5n.4xlarge, 29 bound source addresses, xmq_scn 1.0.0, no CPU affinity
EMQX XMQ Delivery latency over the testBroker memory (RSS) over the testLatency 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. Point-to-Point 50K50,000 publishers and 50,000 subscribers, one topic each, 2 messages/second per publisher: 100,000 messages/second. Client: AWS c5n.4xlarge, 29 bound source addresses, xmq_scn 1.0.0, no CPU affinity
EMQX XMQ Delivery latency over the testBroker memory (RSS) over the testLatency 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. Stateful session migrationThis check is separate from the four throughput scenarios and does not use a clean session. A subscriber with
Every message published during the outage reached the persistent session on the node it reconnected to, with no loss and no duplicates. The live subscriber shows that publishing itself continued while the owner was gone. QoS 1 is at-least-once, so a retransmission would have been allowed; none occurred. Connection-rate headroom (XMQ only)The 500K scenario above paces 5,000 connections per second, because that is a pace both products sustain and a comparison has to be like for like. This is the other question: how fast can XMQ accept connections before something in the stand gives. The same 500,000 clients, at four rising paces, each on a freshly restarted cluster.
XMQ holds 10,000/s with sub-millisecond connect latency. At 20,000/s the clients still all connect, but half a second of queue has built up behind them, and above that the stand settles near 21,000/s however fast the scenario asks. Neither the brokers nor the client are the constraint: each broker stays under one core of its eight and the client's 16 vCPUs sit mostly idle. The connection path is: it makes about seven round trips to the shared Redis per connection — 3.5 million commands for 500,000 clients, measured with |
