环境信息
- EMQ X 版本:4.3.8
- 操作系统及版本:Linux version 3.10.0-1127.el7.x86_64 (centos 7)
- 其他
问题描述
发布者长时间(几个小时或者几十个小时)发送Message大小(1kb-10kb),发送频率为1秒钟平均100包,在订阅者验证收到的数据包偶有丢失现象,这种情况问题需要怎么定位、排查及优化!
发布者长时间(几个小时或者几十个小时)发送Message大小(1kb-10kb),发送频率为1秒钟平均100包,在订阅者验证收到的数据包偶有丢失现象,这种情况问题需要怎么定位、排查及优化!
通过日志发现 是由于 awaiting_rel is full,造成丢包;
另外在其他情况下,emqx的日志出现 发布端 相关日志信息:[MQTT] socket_error: busy,同时订阅者端有自动断线重连现象
很明显是消费端的能力不够了,你是不是用了qos2的消息等级?这样做终端压力很大的,推荐优化一下终端的能力
awaiting_rel 需要调整吗? 如调整,有什么限制规则?
这个是协议实现上的规定,不要动它。如果你想保证业务上的完整性,推荐使用消费端pub执行结果的方式来完成,而不是单纯的依赖协议上的消息到达来保证。消费端收到消息没有正常的完成,但是消息已经消费掉了,后面debug难度更高。
TCP传输层队列满了,消费不掉导致的