测试目的
验证 EMQX 单集群可支撑 100 万并发连接,并通过规则引擎桥接方式每秒转发 100 万消息至 Kafka 集群,为某车联网客户上线做准备。
测试分为以下几个阶段:
百万 TPS 直连 ELB 内网,无桥接
百万 TPS 直连 ELB 内网,桥接 Kafka
百万 TPS 直连域名加桥接,查看带宽占用情况
测试架构
测试环境、机器配置及测试工具
测试环境
客户华为云 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 规则设置
规则引擎配置如下:
- Produce 类型:异步,ACK 策略:learder only,缓存模式:Memory
- payload 为 1kB 时使用了数据压缩 gzip,100B 时使用 no_compression。
Kafka 主题为 12 个分区,3 个副本
测试结果
本次 PoC 共完成了以下测试:
内网:
- 百万连接百万 TPS,payload 100B,桥接 Kafka,2 小时稳定
- 百万连接百万 TPS,payload 1kB,桥接 Kafka,2 小时稳定
公网域名:
- 公网带宽设置 800M,百万连接百万 TPS,payload 1B,桥接 Kafka
具体测试结果及 EMQX 资源使用截图如下:
内网,百万连接百万TPS,payload 1kB,桥接 Kafka
EMQX 集群 Dashboard 统计:
EMQX 规则引擎统计:
Kafka 管理界面统计:
公网域名,百万连接百万TPS,payload 1B,桥接Kafka
带宽使用 800M 的 50%。
测试总结
如以上结果所示,在目前的部署架构下,可以满足客户对于百万并发连接、百万 1k 字节大小的消息桥接转发至 Kafka 的验证需求。
详细测试结果
详细测试结果请填写右侧表单获取完整版 PDF 文件。