订阅主题消费不了

问题:
通过k3s部署3个节点的emqx集群。客户端连接到某个节点并订阅指定的业务TOPIC,发布该TOPIC数据,消费不到

排查过程:
1、定位是否订阅成功
通过log trace验证该客户端已完成TOPIC订阅,有SUBSCRIBE、SUBACK日志。在控制台根据ClientId能查询到订阅列表中存在,且该clientId唯一
2、其他节点是否异常
连接上其他节点,可以正常消费,只有其中一个固定的消费不了
3、发布订阅的测试过程,通过MQTTX工具完成。
4、将订阅的TOPIC换成通配符
原订阅TOPIC为config/lmt,修改成config/#,连上那个问题节点也能消费上。
5、qos配置
QOS=2 或QOS=0都试过,客户端连接到该节点,并订阅指定TOPIC也无法消费。
其他配置:clean_session=true

  1. emqx 的版本是多少。
  2. 出问题时:在三个节点内部使用3 个命令行分别看结果:
./bin/emqx  eval "ets:tab2list(emqx_route)."

./bin/emqx  eval "emqx_router:get_schema_vsn()."
./bin/emqx  eval "emqx_router:topics()."

版本是4.4.3,想问下这三个命令分别是什么作用?

查看路由信息。如果是 4 的话,就不要用中间那个命令了。

emqx_router

看这上面路由好像都有

你得在 3 个 pod 里面都运行,看看有问题的一个是不是有。

刚刚这个就是问题节点的,剩下四张图按顺序分别是节点0和节点1的


节点0

而且现在我刚试了下发,连上node2问题节点的客户端又能收到消息了。
是不是这个节点自身在这个topic上发布订阅有阻塞?

不会阻塞的。如果已经开了 log trace,
你就看有问题的时候,这个 emqx 的trace 日志里面有没有发出过这条消息,如果发出来了,mqttx 没有收到,那估计就是 mqttx 哪里设置有问题,要是没发出来,就是 emqx 内部的问题。

是trace topic吗?是不是看到publish topic的日志,就代表发出来了

trace 客户端 clientid 就行, topic 看不出来的

问下,现在正常了么?是什么原因呢

trace客户端没收到消息,估计是emqx内部的问题。订阅的TOPIC后面接一个#通配符,又能收到。之前有遇到过类似的问题吗?,是不是这个低版本的bug

我在4.4.3 以上的 changelog 找了一下,并没有发现有相似的。
如果路由表里有,应该能发送才对。

路由怎么看?,每个node上路由表都不一样。
比如node0、node1、node2集群中:node1有路由:[{config/lmt - > emqx@node1},{config/lmt - > emqx@node0}]。
是否表示当config/lmt主题消息生产完后,node1根据这个路由表,只能将消息分发到node1和node0中

上面你不是说命令看到路由都一样么。

我之前没理解对,从这个截图结果中看,问题节点node2路由表的数据和node0、node1不一致,按理这三个节点路由表数据应该得同步。
之前有这个路由表数据不同步得情况吗?

有。但都是极端情况才会发生。

解决方法:升到 4.4.19 打开
broker.perf.trie_compaction=true

好的,谢谢,我试试