tmingl
1
EMQX 版本
EMQX v4.0.0
EMQX 安装部署方式
k8s
EMQX 集群情况
未使用集群,仅单节点
服务器(运行 EMQX 的机器)硬件配置
阿里云ECS,4核 16GB,CPU 型号:2.5 GHz主频的Intel ® Xeon ® E5-2682 v4(Broadwell)或Platinum 8163(Skylake)
服务器操作系统和平台
centOS7
测试场景
共计约60台设备使用不同topic发送数据到MQTT,使用3个客户端(使用ssl连接,同一套密钥)以共享订阅的方式消费这些数据。
具体问题
1.数据无法完全消费,甚至客户端接收后马上丢弃不做处理也不行。
2.当我再多开启一个客户端时,之前的3个客户端每分钟的数据处理量明显下降,4个客户端的数据处理量大致为之前3个客户端的总和,不论开启多少个都是同样的效果。
下图为dashboard
“共享订阅” 的共享概念为:发布者发布的一条消息,只会投递到某一个共享订阅者处。
意为,三个/或多个客户端将互为负载均衡,以处理这 60 个设备发布的消息。当发布者数量不变时,增加共享订阅者的数量,必然会导致每个订阅者需要处理的消息量减少,这也是共享订阅的设计目标之一:降低每个订阅者的负载和处理压力。
请参考:
https://www.emqx.io/docs/zh/v5.3/messaging/mqtt-shared-subscription.html#共享订阅
tmingl
3
请问我想要提升消费者的消费能力该如何设置呢,因为在只有一个消费者时,我仍然不能消费完数据
“数据无法完全消费” 是指什么现象呢?
是指同一个客户端接收到的消息量变少么。
共享订阅者是无法接收到所有 60 多个发布者发布的消息的,这是预期行为。
tmingl
5
指的是我在只开一个消费者订阅所有消息,并且没做任何数据处理时,还是无法把设备上传的数据消费完,造成了数据堆积
这个就是共享订阅的设计目标呀。
多个订阅者 “共享” 订阅某个主题,发布到这个主题的消息只会投递到其中一个消费者处。而不是让单个消费者处理该主题下所有的消息。
通过 “共享” 来降低每个消费者的负载,提高总体处理能力。在消费者负载过高时,或者消息堆积无法被有效处理时,增加共享订阅者(消费者)的数量即可快速增加消费能力。
tmingl
7
我现在的情况是:
1.只有一个消费者
2.该消费者没有任何处理数据的操作,从主题拿到后直接丢弃,只做一个计数处理
3.无法将生产者上传的数据消费干净,造成堆积(数量级大概只有每秒几百条数据上传)
tmingl
9
消费者的qos为0
尝试过升级为5.3.2,有些和4.x对应的环境变量有所不同,还未成功
tmingl
10
升级失败主要是没找到4.x环境变量EMQX_LISTENER__SSL__EXTERNAL__KEYFILE证书路径相关对应5.3.2的什么 ,尝试配置EMQX_LISTENER_SSL_OPTS__KEYFILE好像不对