错误报告
同一个设备的上线日志
截图数据结构为 设备号: 上下线标记:时间戳
上线1 ,下线0
环境
- EMQX 版本:4.3.8
- 操作系统版本:ubuntu20.04
重现此问题的步骤
没有方法可以100% 重现,但是从日志观测发现问题确实概率性出现。
同一个设备的上线日志
截图数据结构为 设备号: 上下线标记:时间戳
上线1 ,下线0
没有方法可以100% 重现,但是从日志观测发现问题确实概率性出现。
现在的实现很难保证这个两个事件准确地到达。特别是下线事件,如果进程出现了问题,挂掉了,下线事件就发不出去了。你的问题很可能就是这个情况,你检查一下有没有错误日志。
我们可能需要改进一下设计,让事件尽可能发出去。
但是上线和下线事件如果从不同的节点发出去的话,又可能出现顺序问题,时间戳也可能因为两个节点系统时间的不一致出现先后颠倒。顺序的问题可能没有办法完全保证。
因为我们已经投入到生产环境了,无法使用debug,因为带来性能影响很大(之前开过debug后来取消)。另外一个问题是,订阅系统主题我只订阅当前的broker,按理只有当前broker上的设备上下线事件不会出现顺序问题。
你提到进程出现问题,我们这边服务器配置还是不错的,高峰期间cpu负载差不多40% 内存30%。8c 32G。
emqx后续版本对此问题有改善吗?
对此有什么其它方案?
我看你的情况好像是下线事件丢了。
我觉着两种可能性比较大:
是因为客户端没有主动下线,而是被另外一个相同 clientid 的客户端挤下去了。这时候是个 session 替换,不算下线,所以没发这个事件。
是因为出了问题,crash 了。日志里会有 error 日志。
对于第一种情况,你可以使用 v4.3.22 之后的版本,并且配上下面两个配置:
broker.client_disconnect_discarded = on
broker.client_disconnect_takovered = on
这样 session 替换的时候也会发送 disconnected 取出。
我们的确修过很多相关问题。先升级到 4.3.x 最新吧,有条件的话直接升级到 4.4.14,因为 4.3 已经出了维护周期。
如果你升上来还有问题我们再调查。
升到5.0.x版本可以吗
不要。5.0 并没有 4.4 成熟。建议升级到4.4的最新版(现在是 4.4.15)