emqx v4.3 长时间高频发送大数据,订阅者端偶现丢包现象

环境信息

  • EMQ X 版本:4.3.8
  • 操作系统及版本:Linux version 3.10.0-1127.el7.x86_64 (centos 7)
  • 其他

问题描述

发布者长时间(几个小时或者几十个小时)发送Message大小(1kb-10kb),发送频率为1秒钟平均100包,在订阅者验证收到的数据包偶有丢失现象,这种情况问题需要怎么定位、排查及优化!

配置文件及日志

追踪一下发布端和消费端的业务,使用日志追踪功能

通过日志发现 是由于 awaiting_rel is full,造成丢包;

另外在其他情况下,emqx的日志出现 发布端 相关日志信息:[MQTT] socket_error: busy,同时订阅者端有自动断线重连现象

很明显是消费端的能力不够了,你是不是用了qos2的消息等级?这样做终端压力很大的,推荐优化一下终端的能力

awaiting_rel 需要调整吗? 如调整,有什么限制规则?

这个是协议实现上的规定,不要动它。如果你想保证业务上的完整性,推荐使用消费端pub执行结果的方式来完成,而不是单纯的依赖协议上的消息到达来保证。消费端收到消息没有正常的完成,但是消息已经消费掉了,后面debug难度更高。

订阅者在接收大数据(200KB)时,会自动断开emqx; emqx日志里如下信息


请教一下,这种情况一般是什么引起的?

TCP传输层队列满了,消费不掉导致的