qos0的消息如何经过emqx的

环境信息

  • EMQX 版本:4.2.14
  • 操作系统及版本:centos7.9
  • 其他 http auth鉴权插件

问题描述

近期发现emqx内部转发消息的时候(qos2)消耗时间过长,最后改为了qos0,性能有改善,单是不稳定,大部分100ms左右,但是存在1s、2s的情况,qos2的消息是先放入飞行队列,满了后放入messagequene,订阅这也会存在一个队列。
有两个问题:
1、qos0的会放入飞行队列吗?
2、这个队列多大合适,emqx转发耗时是否和队列有关?

配置文件及日志

可以看下这里的对 飞行窗口和队列的介绍:飞行窗口和消息队列 | EMQX 企业版

“EMQX 允许多个未确认的 QoS 1 和 QoS 2 报文同时存在于网路链路上。这些已发送但未确认的报文将被存放在 Inflight Window 中直至完成确认”,,,这个描述中需要确认的才放入队列,qos0的消息需要确认吗?

需要,可以看一下 协议介绍 | EMQX 企业版 这里的MQTT消息的qos 流程图


没看到有需要确认的操作啊

这是qos0 。确认在qos1 和qos2的才有

那就是不需要确认。。。,也就是说qos0不需要放入飞行队列或者不需要队列,订阅者才会有自己的队列是吧。

还是需要队列,消费者消费处理能力有限,生产的消息速度高于消费的速度,不可能马上丢失,暂时放对列里。如果不想因为消费能力不足,积压的消息直接丢掉是可以配置的https://docs.emqx.com/zh/enterprise/v4.4/advanced/inflight-window-and-message-queue.html#%E9%85%8D%E7%BD%AE%E9%A1%B9

好的,,对了有没有一种方法查看队列消息消费是否不足,,有没有类似的api/v4 接口查看队列消息堆积情况?

没有这个api

那有什么办法查看消息是否堆积,是否需要增加消费端

就是在dashboard上的客户端,选择你想看到的客户端,有队列中消息的积压的量。高并发的订阅建议采用桥接到第三方存储上比如Kafka(企业版)。

解决消费能力不足
1 共享订阅
2 桥接消息队列


看到都是0,消费能力应该没问题,我这队列设置的都很大,不知道影响性能不

这个根据你硬件配置决定了,性能实时行肯定有影响。有积压才会增长。

这个队列大小设置有没有一些参考,比如一些公式,我的理解是,如果消费没问题,队列没必要太大,我这边linux系统配置是:16核128g内存

没有公式的哟。比如消息大小,消息的qos 消息条数都是对资源的消耗。一般情况都是默认值。如果积压你调大无非就是偶尔出现峰值进行缓冲一下。长期消费能力不足的话,调大只是治标不治本,采用桥接Kafka可以大大提高消费能力。