测试目的

验证 EMQ X 单集群可支撑 100 万并发连接,并通过规则引擎桥接方式每秒转发 100 万消息至 Kafka 集群,为某车联网客户上线做准备。

测试分为以下几个阶段:

  1. 百万 TPS 直连 ELB 内网,无桥接

  2. 百万 TPS 直连 ELB 内网,桥接 Kafka

  3. 百万 TPS 直连域名加桥接,查看带宽占用情况

测试架构

车联网客户桥接 Kafka 测试架构

测试环境、机器配置及测试工具

测试环境

客户华为云 VPC

EMQ X 集群、Kafka 集群、HA 配置

服务 数量 版本 操作系统 CPU 内存 云主机型号 内网网卡数量 开放端口
SLB 配置域名 1 18083 1883 8883 8081
HA 4 2.4.3 Centos 7.6 16核 32G c6.4xlarge.2 存储:普通 8 1883 8883
EMQ X 10 企业版v4.3.3 Centos 7.6 64核 128G c6.16xlarge.2 存储:普通 1 18083 1883 8883 8081
Kafka 云服务 4 2.3.0 Centos 7.6 16核 32G c6.4xlarge.2 存储: 超高I/O 1

测试工具:emqtt_bench

Emqtt_bench 压力机配置: 10 台,每台配置相同。

服务 数量 版本 操作系统 CPU 内存 云主机型号 内网网卡数量 开放端口
测试机 10 Centos 7.6 16核 32G c6.4xlarge.2 存储:普通 2 1883 8883

测试场景

如测试架构图中所示,10 个压力机使用 emqtt_bench 模拟 100 万 MQTT 客户端,通过 TLS(8883端口)连接华为云 ELB,TLS 终结在 Haproxy。ELB 和 Haproxy 的分配策略均为不加权轮询。客户端心跳间隔(keep alive)60秒。每个客户端连接成功后随即开始每秒发送一条 QoS 为 0、payload 为 1kB 的消息(测试初期 payload 为 100B),所有消息通过规则引擎桥接转发至 Kafka。

Kafka 资源设置

Kafka 资源设置

Kafka 规则设置

规则引擎配置如下:

Kafka 规则设置

Kafka 规则设置 2

  • Produce 类型:异步,ACK 策略:learder only,缓存模式:Memory
  • payload 为 1kB 时使用了数据压缩 gzip,100B 时使用 no_compression。
  • Kafka 主题为 12 个分区,3 个副本

    Kafka 主题

测试结果

本次 PoC 共完成了以下测试:

  • 内网:

    • 百万连接百万 TPS,payload 100B,桥接 Kafka,2 小时稳定
    • 百万连接百万 TPS,payload 1kB,桥接 Kafka,2 小时稳定
  • 公网域名:

    • 公网带宽设置 800M,百万连接百万 TPS,payload 1B,桥接 Kafka

具体测试结果及 EMQ X 资源使用截图如下:

内网,百万连接百万TPS,payload 1kB,桥接 Kafka

  • EMQ X 集群 Dashboard 统计:

    EMQ X 集群 Dashboard 统计

  • EMQ X 规则引擎统计:

    EMQ X 规则引擎统计

  • Kafka 管理界面统计:

    Kafka 管理界面统计

公网域名,百万连接百万TPS,payload 1B,桥接Kafka

带宽使用 800M 的 50%。

带宽使用情况

测试总结

如以上结果所示,在目前的部署架构下,可以满足客户对于百万并发连接、百万 1k 字节大小的消息桥接转发至 Kafka 的验证需求。

详细测试结果

详细测试结果请填写右侧表单获取完整版 PDF 文件。

想要获取完整版?

下载地址将会发送至您填写的邮箱