EMQX 慢订阅

错误报告

环境

  • EMQX 版本:docker emqx/emqx:5.0.3
  • 操作系统版本:Ubuntu 20.04.5 LTS
  • 连接语言: golang 1.7

问题描述

我理解的慢订阅是因为消息消费能力弱,导致消息堆积造成的。
我看到文档说正常的消息应该在几十毫秒就应该处理完成。

我打开单机的 emqx 的慢订阅,发现延时都是 1秒多的,当我进入连接详情查看, 飞行窗口消息为0, 队列消息为0 ,并且目前我是接到一个消息就丢入go的协程池的, 所以我想请教一下,这个这个 延迟为啥1秒多,以及如何处理该问题!


其他




慢订阅统计的是消息到达 EMQX 时起,直到消息的 QoS1 流程完全结束这段时间。

  • QoS 0 : 以消息投递时间为止

  • QoS 1: 以 EMQX 收到 puback 为止

  • QoS 2: 以 EMQX 收到 pubcomp 为止

消费能力不足不一定会出现消息堆积,如果消息流出速度远远大于流入速度,这个时候是不会挤压的,但是如果每条消息的处理时间都很长,那么依然还是会被慢订阅统计到。

建议通过 trace 等功能对消息进行跟踪,或者在客户端进行抓包,分析消息流程来判断是哪儿的问题。

纤程、协程、线程、进程不管是哪种模型,都和处理速度没有绝对关系。

core-zj-sub-20221117T174535.zip (8.6 KB)

这是我现场抓的日志,请告诉我我该注意哪些内容!

你这个可能是 5.0.5 之前的一个 bug, 5.0.5 之前的版本只有统计类型为 whole 时数据才是正确的。