EMQX 大量消息被丢弃

环境

  • EMQX 版本:5.0.21
  • 操作系统版本:centos8

重现此问题的步骤

  1. 正常模拟10000个链接,每15秒发一个消息

预期行为

正常消费

实际行为

今天突然开始提示出现了慢订阅,日志也提示错误

这个是满订阅里的日志信息
connection congested: #{buffer => 4096,clientid => <<“tgServer3852cc1313df45688c5e8f760cd4f442”>>,conn_state => connected,connected_at => 1682212438868,high_msgq_watermark => 8192,high_watermark => 1048576,memory => 9573664,message_queue_len => 21,peername => <<“10.27.13.194:53258”>>,pid => <<“<0.22544.3161>”>>,proto_name => <<“MQTT”>>,proto_ver => 4,recbuf => 369280,recv_cnt => 29,recv_oct => 870,reductions => 627436976,send_cnt => 164,send_oct => 14712,send_pend => 4,sndbuf => 46080,sockname => <<“10.27.13.17:1883”>>,socktype => tcp,username => <<“testXP”>>}
接收服务也在不断重连

目前通过重启EMQX static 集群解决了问题。给人感觉就是当消息堆积的时候,emqx不会自愈。这个是不是有什么配置需要开启呀

你的客户端订阅了 客户端上线 的系统主题,10000 个客户端同时上线会导致单个客户端收到大量 MQTT 消息从而出现连接繁忙的情况。
也就是 connection congested 这条警告。

有什么办法可以限制呢?比如增加配置
业务上确实有时候因为网络问题导致终端批量掉线然后又批量上线

您这边有没有好的建议,帮助我们避免这种情况的发生

  • 避免每个客户端都订阅客户端上下线的系统主题,以避免雪崩情况的发生。
  • 客户端上下线事件 的处理可以使用规则引擎处理,如有需要可以进行数据持久化,进行落盘。