EMQX企业版单节点桥接Pulsar

EMQX 企业版技术支持发表于:2022年03月10日 14:11:38更新于:2022年03月10日 14:12:26

一、测试目的

测试 EMQ X 企业版 4.3.6 单节点每秒 10 万 QoS 1、payload 1KB 的消息桥接至 Pulsar 集群所需 EMQ X 资源及响应时间等性能指标。

二、测试架构

image.png

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

  • 测试环境:华为云北京四区VPC

  • 测试工具:XMeter企业版v3.2.0

  • EMQX、Pulsar集群配置、测试机配置:

    服务数量版本操作系统CPU内存云主机型号
    EMQX1企业版v4.3.6Centos7.832核64GC6.8xlarge2
    Pulsar12.8.1Centos7.8
    16核64GC6.4xlarge4
    XMeter管理机23.2.0Centos7.8
    8核16GC6.2xlarge2
    XMeter压力机10/Centos7.8
    8核16GC6.2xlarge2

四、测试场景

如测试架构图中所示,XMeter 压力机模拟 10 万 MQTT 客户端向 EMQ X 发起连 接,新增连接速率为每秒 5000,客户端心跳间隔(keep alive)300 秒。所有 连接成功后每个客户端每秒发送一条 QoS 为 1、payload 为 1kB 的消息,所有消 息通过规则引擎桥接转发至 Pulsar 单节点。 

测试执行 1 个小时。
规则引擎配置如下:

  • Pulsar资源设置

    image.png

  • 规则设置

    image.png

    image.png

    使用了数据压缩 zlib

    Pulsar 主题为 10 个分区,1 个副本

    image.png

  • Pulsar调优配置

    pulsar_env.sh 和 bk_env.sh 中,设置 heap 和 direct memory 为 8GB, 16GB

    BOOKIE_MEM=${BOOKIE_MEM:-${PULSAR_MEM:-"-Xms8g -Xmx8g -XX:MaxDirectMemorySize=16g"}} 
    PULSAR_MEM=${PULSAR_MEM:-"-Xms8g -Xmx8g -XX:MaxDirectMemorySize=16g"}

    在 standalone.conf 和 bookeeper.conf 中设置 journalSyncData=false

五、测试结果

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

  • EMQX Dashboard统计:

    image.png

  • EMQX Dashboard规则引擎统计:

    image.png

    测试结束规则引擎上统计的命中及成功次数:

    image.png

  • EMQX Dashboard消息数统计:

    image.png

    从以上截图可以看到测试结束后 EMQ X Dashboard 上统计的测试期间的消息 数,和规则上的命中次数、成功数一致。

  • EMQX 节点资源使用:

    image.png

  • XMeter测试报告截图:

    image.png

    image.png

    image.png

六、测试总结

如以上结果所示,EMQ X 32C64G 配置下可以支持 10 万连接、每秒 10 万 QoS 1、payload 1kB 的消息桥接转发至 Pulsar,消息吞吐期间,EMQ X 所在 机器 CPU user 使用范围 52% ~ 65%,平均使用 59%;CPU idle 范围 8% ~ 31%,平均 20%。内存使用稳定,最高使用不超过 23G。

附录1:操作系统调优

可参考:https://docs.emqx.io/enterprise/latest/cn/tutorial/tune.html 

亦可直接 sh 附录 3 中的文件 sys_tune.sh。

附录2:测试工具试用、下载地址

XMeter 简介 (https://www.xmeter.net/):XMeter 是基于开源测试工具 JMeter 扩展的性能测试平台。针对物联网具有的接入规模大、弹性扩展要求、 多种接入协议、混合场景等特点,XMeter 对 JMeter 进行了改造,实现了百万 级别并发测试支持,并对测试数据进行实时处理并图形化展示。 

• XMeter 官网和试用地址:https://www.xmeter.net/ 

• XMeter MQTT 插件下载:https://github.com/xmeter-net/mqtt-jmeter 

• JMeter 下载地址:https://jmeter.apache.org

附录3:系统调优脚本

#!/bin/sh 

## Linux Kernel Tuning
sysctl -w fs.file-max=2097152 
sysctl -w fs.nr_open=2097152 
echo 2097152 > /proc/sys/fs/nr_open 
echo 2097152 > /proc/sys/fs/file-max 

## The limit on opened file handles for current session 
ulimit -n 1048576 

## Add the ‘fs.file-max’ to /etc/sysctl.conf, make the changes permanent 
## /etc/security/limits.conf 
##  
##  
## * soft nofile 1048576 
## * hard nofile 1048576 

cat <<- 'EOF' >> /etc/security/limits.conf 
root soft nofile 1048576 
root hard nofile 1048576 
emqx soft nofile 1048576 
emqx hard nofile 1048576 
EOF 

## Network Tuning 
## Increase number of incoming connections backlog 
sysctl -w net.core.somaxconn=32768 
sysctl -w net.ipv4.tcp_max_syn_backlog=16384 
sysctl -w net.core.netdev_max_backlog=16384 

## Local Port Range: 
sysctl -w net.ipv4.ip_local_port_range="1000 65535" 

## Read/Write Buffer for TCP connections: 
sysctl -w net.core.rmem_default=262144 
sysctl -w net.core.wmem_default=262144 
sysctl -w net.core.rmem_max=16777216 
sysctl -w net.core.wmem_max=16777216 
sysctl -w net.core.optmem_max=16777216 
sysctl -w net.ipv4.tcp_rmem="1024 4096 16777216" 
sysctl -w net.ipv4.tcp_wmem="1024 4096 16777216" 
sysctl -w net.nf_conntrack_max=1600000 
sysctl -w net.netfilter.nf_conntrack_max=1600000 
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 

## Timeout for FIN-WAIT-2 sockets: 
sysctl -w net.ipv4.tcp_fin_timeout=15 

cat <<- 'EOF' >> /etc/sysctl.conf 
net.core.somaxconn=32768 
net.ipv4.tcp_max_syn_backlog=16384 
net.core.netdev_max_backlog=16384 
net.ipv4.ip_local_port_range=1000 65535 
net.core.rmem_default=262144 
net.core.wmem_default=262144 
net.core.rmem_max=16777216 
net.core.wmem_max=16777216 
net.core.optmem_max=16777216 
net.ipv4.tcp_rmem=1024 4096 16777216 
net.ipv4.tcp_wmem=1024 4096 16777216 
net.ipv4.tcp_max_tw_buckets=1048576 
net.ipv4.tcp_fin_timeout=15 
net.nf_conntrack_max=1600000 
net.netfilter.nf_conntrack_max=1600000 
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 
EOF


    您需要登录后才可以回复