EMQX Dedicated New Feature: Event History is available for private beta test. →

MQTT Performance Benchmark Testing: EMQX-MySQL Integration

EMQX Team
Aug 19, 2023
MQTT Performance Benchmark Testing: EMQX-MySQL Integration

IoT scenarios often face challenges like a large number of devices, high data generation rates, and the huge accumulated data volumes. Therefore, how to access, store, and process these massive amounts of data has become a critical issue.

EMQX, as a highly scalable, powerful and feature-rich MQTT broker for the IoT, can handle billions of concurrent connections and millions of messages per second in a single cluster. Furthermore, its built-in Data Integration functionality provides an out-of-the-box solution, which enables seamless integrating IoT data with more than 40 cloud services and enterprise systems, including Kafka, SQL, NoSQL, and time-series databases.

This blog series presents the benchmark test results of the integrations against a single node EMQX server.

In this post, we provide the benchmarking result of MySQL integration - a single node EMQX processes and inserts 100,000 QoS1 messages per second to MySQL.

Test Scenario

This benchmark testing simulates 100,000 MQTT clients connecting to EMQX, with a connection rate of 5,000 per second. After all connections are established, each client publishes one QoS 1 message with a payload of 200 bytes per second, and all messages, via the rule engine, are written into MySQL.

  • Concurrent connections: 100,000

  • Topics: 100,000

  • CPS (newly established connections per sec.): 5000

  • QoS: 1

  • Keep alive: 300s

  • Payload: 200 bytes

  • Message publish TPS: 100,000/second

Testbed

The test environment is configured on Alibaba Cloud, and all virtual machines are within a VPC (virtual private cloud) subnet.

Machine Details

Service Deployment Version OS CPU Memory Cloud Host model
EMQX single node 5.1.0 Centos 7.8 32C 64G c6.8xlarge
MySQL standalone 8.0.27 Centos 7.8 32C 64G c6.8xlarge

Test Tool

XMeter is used in this benchmark test to simulate MQTT clients. XMeter is built on top of JMeter but with enhanced scalability and more capabilities. It provides comprehensive and real-time test reports during the test. Additionally, its built-in monitoring tools are used to track the resource usage of the EMQX and MySQL machines.

XMeter provides a private deployment version (on-premise) and a public cloud SaaS version. A private XMeter is deployed in the same VPC as the EMQX and MySQL in this testing.

Test Tool

Preparation

For the detailed steps of configuring EMQX-MySQL integration, please refer to EMQX Doc. The three figures below are MySQL Bridge settings used in this benchmark testing.

MySQL Bridge & Rule Config

MySQL Bridge

Rule Config 1

Rule Config 2

After the bridge and rule were created, the data flow below can be seen from the Dashboard.

data flow

System Tuning

Please refer to EMQX Doc for the Linux Kernel tuning.

MySQL Tuning

For this test, MySQL config file my.conf was modified as follows:

[mysqld]
# The default is 128M, modified to 70% of 64G
# Start at 70% of total RAM for dedicated server
innodb_buffer_pool_size = 48000M

innodb_buffer_pool_instances = 12

max_heap_table_size = 8192M
tmp_table_size = 8192M

Benchmark Results

Observations

  • the usage of CPU and memory keeps stable

  • the average of CPU user: 67%

  • Memory used: Max 18GB

  • the average of response time of publish: 0.72ms

  • After the test was completed, by comparing the data statistics from the EMQX Dashboard Data Bridge Statistics with the number of queries in the corresponding table of the database from cli, it was observed that all messages were written to MySQL in real-time and successfully.

Result Charts

Screenshots of EMQX Dashboard & Rule Engine during the test

Cluster Overview

Data Bridge

The above two screenshots show that both the incoming message rate & processing rate by Data Bridge are 100,000+ per second, and all messages hit by the rule are written to the database in real time.

Screenshots after the test completed

Screenshot 1

Screenshot 2

The above screenshots show that all messages EMQX received were forwarded to MySQL table successfully.

XMeter report chart

XMeter report chart

Wrapping up

This benchmark report has proved the capability of EMQX single-node deployment. With the ability to handle 100,000 QoS 1 messages per second and store the messages in MySQL by one node, the EMQX cluster is a reliable and efficient choice for managing large amounts of IoT data.

Try EMQX Enterprise for Free
Connect any device, at any scale, anywhere.
Get Started →

Related Posts