Opensource Broker | Version |
---|---|
EMQX 4 | 4.4.16 |
EMQX 5 | 5.0.21 |
Mosquitto | 2.0.15 |
NanoMQ | 0.17.0 |
In this use case, 50,000 publishers publish messages to 50,000 topics, and 50,000 subscribers subscribe messages. Specially, the use case is executed in the following way:
- All publishers and subscribers connect to the TCP port of the broker.
- Once the connection of a subscriber is established, the subscriber immediately subscribes to a topic using QoS 1. Different subscribers subscribe to different topics.
- When all the connections are established, each publisher publishes message to a topic using QoS 1 with Retain as 0. Different publishers subscribe to different topics. The publish rate for each publisher is 1 message per second. The payload size of each message is 16 bytes.
- Keep the publish and subscribe for 30 minutes. The expected total publish rate is 50,000 messages per second, and the expected total subscribe rate is 50,000 messages per second.
MQTT protocol 3.1.1 is used for the use case, and other configured MQTT properties are:
TLS authentication enablement | No |
Authentication enablement | No |
Keep Alive (seconds) | 300 |
Clean Session | 1 |
The use case is executed on single node. XMeter (version 3.2.4) is used as the benchmark tool.
HW Details
- public cloud: AWS
- instance type: c5.4xlarge 16C32G
- OS: Ubuntu 22.04.1 amd64
Actual msg rate | Average pub-to-sub latency (ms) | Max CPU user+system | Avg CPU user+system | Max memory used | Avg memory used | |
---|---|---|---|---|---|---|
EMQX 4 | 50k:50k | 1.68 | 88% | 80% | 6.19G | 5.22G |
EMQX 5 | 50k:50k | 2.17 | 89% | 82% | 6.7G | 5.9G |
Mosquitto | 37k:37k | 335.94 | 7% | 6% | 354M | 328M |
NanoMQ | 50k:50k | 64.48 | 34% | 31% | 1.3G | 1.3G |
in this scenario, Mosquitto couldn't reach to the designed message rate. It stabilized at 37300/s for both pub and sub.
EMQX 4, EMQX 5 and NanoMQ kept the stable pub & sub rate at 50000/s during the test.