Basic benchmarks of 5 different MQTT brokers

In the context of my Master’s thesis I conducted a very basic performance comparison of several different MQTT brokers and quickly wanted to share my insights. Please note that these benchmarks are quite superficial only. I did not aim to perform an in-depth evaluation, but rather get a basic idea of their performance in general.

Setup

  • To perform load tests in a publish scenario, I used takanorig/mqtt-bench, an MQTT benchmarking tool written in Go.
  • All tests were run with the options -count 10000, -clients 25 and -size 4096, which means to simulate 25 concurrent MQTT clients, each sending 10,000 messages of 4 KBytes size each.
  • Both load testing tool as well as the respective broker were run locally on a 6-core, 12-thread, 3.6 Ghz machine with Ubuntu 18.04.
  • Unless otherwise stated, the brokers were started with default configuration.

Brokers

The following brokers were tested.

Broker Written In Version Runtime Additional Info
hbmqtt Python 0.8 CPython 3.6 –
hbmqtt (PyPy) Python 0.8 PyPy 3.6 v7.1.1 –
HiveMQ CE Java 2019.1 Oracle JDK 12 –
Mosca JavaScript 2.8.1 Node 4.8.0 –
Mosquitto C 1.6.3 – –
RabbitMQ Erlang 3.7.4 – enabled_plugins=[rabbitmq_management, rabbitmq_management_agent, rabbitmq_management_visualiser, rabbitmq_shovel_management, rabbitmq_stomp, rabbitmq_mqtt,rabbitmq_web_stomp, rabbitmq_web_mqtt]

Results

These are the results that I obtained. Higher is better.

MQTT benchmark results

Comments