消费者使用共享订阅接收的消息数疑似被限制

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#共享订阅

请问我想要提升消费者的消费能力该如何设置呢,因为在只有一个消费者时,我仍然不能消费完数据

“数据无法完全消费” 是指什么现象呢?
是指同一个客户端接收到的消息量变少么。
共享订阅者是无法接收到所有 60 多个发布者发布的消息的,这是预期行为。

指的是我在只开一个消费者订阅所有消息,并且没做任何数据处理时,还是无法把设备上传的数据消费完,造成了数据堆积

这个就是共享订阅的设计目标呀。
多个订阅者 “共享” 订阅某个主题,发布到这个主题的消息只会投递到其中一个消费者处。而不是让单个消费者处理该主题下所有的消息。
通过 “共享” 来降低每个消费者的负载,提高总体处理能力。在消费者负载过高时,或者消息堆积无法被有效处理时,增加共享订阅者(消费者)的数量即可快速增加消费能力。

我现在的情况是:
1.只有一个消费者
2.该消费者没有任何处理数据的操作,从主题拿到后直接丢弃,只做一个计数处理
3.无法将生产者上传的数据消费干净,造成堆积(数量级大概只有每秒几百条数据上传)

  • 消息 qos ?
  • trace 一下发给这个订阅者的消息。文档 trace 命令
  • 另外,v4.x 开源版已经停止支持了,不会再有功能更新和 bug 修复。可以尝试最新版 v5.3.2v5.4.0 也即将发布。

消费者的qos为0


尝试过升级为5.3.2,有些和4.x对应的环境变量有所不同,还未成功

升级失败主要是没找到4.x环境变量EMQX_LISTENER__SSL__EXTERNAL__KEYFILE证书路径相关对应5.3.2的什么 :rofl:,尝试配置EMQX_LISTENER_SSL_OPTS__KEYFILE好像不对

这里有 LISTENER 相关的环境变量配置示例

多谢,我在升级到5.3.2之后再看看有无上述现象

升级之后观察了几天后无此现象了

有点坑呀 :grinning: