EMQX 版本
生产端大量生产消息的时候5w消息每秒,用paho.mqtt.golang包,初始化了一个client订阅消息只有1000消息/s的消费速率。
大部分消息都被丢弃了:发送时由于消息队列满而被丢弃,看后台是因为这个原因
EMQX 安装部署方式
docker compose单机,mac本地部署
EMQX 集群情况
未使用集群,仅单节点
服务器(运行 EMQX 的机器)硬件配置
mac :Apple M3 Pro
36 GB内存
服务器操作系统和平台
mac
压测工具
jmeter
有什么方式可以提升性能吗。
单一client消费的话,性能正常能达到多少消息/s。
我这边尝试初始化多个client的时候,感觉性能能有所提升,还是说要提高消费性能,必须初始化多个client?
我用jmeter生产,在用jmeter消费,能达到10w+,但是用paho.mqtt.golang初始化client消费的话,只能达到几千的消费,差很多
提升性能可以从 2 方面入手:
1.提高单个 client 的接收效率,接收线程收到消息后,处理让别的线程(池)来处理,接收线程只负责收消息。
2.多个 client 使用共享订阅。
关于单个 client 极限能处理多少条消息,这个跟你的实现方式,还有 payload 的大小,网络各种都有影响,所以需要结合自己的实际场景测的。
目接收端目前是使用了协程池来异步处理消息的。消息体很小。
那么我这个场景下,可以考虑在我一个服务里面考虑初始化多个client,来共享订阅来提供消费能力是吗?
如果用了异步处理,不应该啊,主要是看你用 jmeter 消费能 10W+。