环境信息
- EMQX 版本:4.2.14
- 操作系统及版本:centos7.9
- 其他 http auth鉴权插件
问题描述
近期发现emqx内部转发消息的时候(qos2)消耗时间过长,最后改为了qos0,性能有改善,单是不稳定,大部分100ms左右,但是存在1s、2s的情况,qos2的消息是先放入飞行队列,满了后放入messagequene,订阅这也会存在一个队列。
有两个问题:
1、qos0的会放入飞行队列吗?
2、这个队列多大合适,emqx转发耗时是否和队列有关?
近期发现emqx内部转发消息的时候(qos2)消耗时间过长,最后改为了qos0,性能有改善,单是不稳定,大部分100ms左右,但是存在1s、2s的情况,qos2的消息是先放入飞行队列,满了后放入messagequene,订阅这也会存在一个队列。
有两个问题:
1、qos0的会放入飞行队列吗?
2、这个队列多大合适,emqx转发耗时是否和队列有关?
“EMQX 允许多个未确认的 QoS 1 和 QoS 2 报文同时存在于网路链路上。这些已发送但未确认的报文将被存放在 Inflight Window 中直至完成确认”,,,这个描述中需要确认的才放入队列,qos0的消息需要确认吗?
这是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 桥接消息队列
这个根据你硬件配置决定了,性能实时行肯定有影响。有积压才会增长。
这个队列大小设置有没有一些参考,比如一些公式,我的理解是,如果消费没问题,队列没必要太大,我这边linux系统配置是:16核128g内存
没有公式的哟。比如消息大小,消息的qos 消息条数都是对资源的消耗。一般情况都是默认值。如果积压你调大无非就是偶尔出现峰值进行缓冲一下。长期消费能力不足的话,调大只是治标不治本,采用桥接Kafka可以大大提高消费能力。