共享订阅问题

问题描述

我们使用一个MQTT客户端去接收设备的所有消息,考虑到以后可能会增加节点,所以用到了共享订阅 ( 目前就一个节点 ) 。运行很长一段时间后就会出现丢消息的情况,重启客户端解决不了问题,换一个共享订阅的group ( $share/group/ 这种类型的前缀 ) 就没问题了。我一度怀疑是不是有其他客户端使用了相同的共享订阅前缀订阅了相同的topic,但是我查看dashboard发现没有其他客户端这样做。

环境信息

  • EMQ X 版本:4.1.3
  • 操作系统及版本:ubuntu18.04.4 docker18.09.1部署
  • 其他

相应的配置文件内容


详细日志

没有发现跟订阅topic相关的日志

相关截图

是否有什么其他的方法能够分走同一个group共享订阅的消息?

出现这个问题时, Trace 一下这个客户端看看对应的 Debug 日志呢,日志与追踪|EMQ X Docs

我也遇到同样问题,请问找到原因了吗?

这个问题还没解决, 目前没有使用共享订阅了, 做了一个消息去重的逻辑。公司将emq部署在k8s上,运维离职了,新的运维还在熟悉工作, 想改成debug模式输出日志都做不了。

日志看没有报错,只是收的数量少于发的数量

你好,我现在也遇到了这个问题,使用共享订阅发现数据丢失的情况,请问有什么好的解决方法吗,或者怎么在集群上使用 emq

你好,我现在也遇到了这个问题,使用共享订阅发现数据丢失的情况,请问有什么好的解决方法吗,或者怎么在集群上使用 emq。。。。。

订阅端启用了 clean_session=false 吗,启用之后订阅的客户端下线后,这个 session 也会接收消息

这个 session 超期以后,消息就丢失了。

看一下 Metrics → dropped.{reason} 相关的指标,看消息丢弃的原因排查。

clean_session设置为true了, 不存在这个问题, 而且经过测试, 客户端和broker连接的好好的, 就是只能断断续续接到消息

你可以在 Dashboard 的 Subscriptions 页面搜索有哪些客户端订阅了这个共享主题,以 $share/group/topic 为例,请搜索 topic

我发现直接带上共享订阅前缀是搜不出来的, 但是不带却能搜出来


是的,搜索时请不要带上前缀。如果确实只搜到一个客户端,并且问题依然存在,建议使用 EMQ X 的 Tracker 功能来追踪一下客户端。

这个是在k8s上部署的emqx集群, 我不会弄 :joy:

不过, 我自己本地用搞一个emqx单节点, 怎么也试不出来这个问题

或者你可以试一下在 Dashboard 上的 统计分析/主题监控 页面添加对该主题的监控,这样你可以比较方便地看到该主题下的消息流入流出以及丢弃计数。

好的,发现之前将clean_session设置成false了,现在改成true 可以了

是的,搜索时请不要带上前缀。如果确实只搜到一个客户端,并且问题依然存在,建议使用 EMQ X 的 Tracker 功能来追踪一下客户端。
具体怎么操作? 我也遇到同样的问题了,刚开始共享订阅没问题,运行一段时间就出现,收不到消息的情况。

已经做了日志跟踪,但是日志里面只能看出哪个client在什么时候publish了一条消息。

近期我们修复了一个共享订阅在某些情况无法正确取消订阅导致后续订阅丢失消息的 BUG,建议广大用户升级至 4.2.13 或者 4.3.5 版本,详情参见:
https://www.emqx.com/en/changelogs/broker/4.2.13
https://www.emqx.com/en/changelogs/broker/4.3.5

下载传送门:
https://www.emqx.com/en/downloads?product=broker