白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

测试目的

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

测试分为以下几个阶段:

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

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

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

测试架构

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

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

测试环境

客户华为云 VPC

EMQX 集群、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
EMQX 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

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

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

  • EMQX 集群 Dashboard 统计:

    EMQX 集群 Dashboard 统计

  • EMQX 规则引擎统计:

    EMQX 规则引擎统计

  • Kafka 管理界面统计:

    Kafka 管理界面统计

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

带宽使用 800M 的 50%。

带宽使用情况

测试总结

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

详细测试结果

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