emqx 5.2.0 使用规则引擎把数据推送到另一个EMQ,会发生很多数据丢失败问题,请问原因是什么呢?

emqx 5.2.0 使用规则引擎把数据推送到另一个EMQ,会发生很多数据丢失败问题,请问原因是什么呢?
使用./emqx eval ‘observer_cli:start()’ 查到


怎么查看队列数是否已满呢?下图的失败数产生的原因跟队列数有关吗?

请问具体是什么场景需要这样设计,还有规则的配制和日志文件最好都提供下

我们需要把emqx的数据转发到另一个emqx,规则配置如下



日志文件如下

建议使用最新的版本试试,5.x 早期版本里 MQTT 桥接实现上有些性能问题。

好的,我先升级最新版本5.7试一下

使用最新版本也是数据丢失的情况,请教一下这种如何排查动作失败的原因呢?最下图是队列满的原因导致吗?


麻烦把 MQTT 桥接的配制和 log 文件发下




请查收,谢谢!

我把以下参数调大了,目前动作失败没有出现了,但是存在一个数据动作有很大的延时,像是在排队处理,这种一般是连接池不够还是什么原因导致的呢?


动作总数与成功的数量相差好远。

我看了你的 log 文件,里面基本没有和规则相关的内容,麻烦将 log 等级设置为 debug, 然后重新生成一份日志。
从目前的信息来看,问题出在远端的 broker 上,看起来是远端处理能力不够

有没有是本地MQ的资源问题呢?因为我在处理推送的过程,发现有两个节点是断开的,断开的其中一个节点的日志就是上面发的日志。

建议先排查和解决资源不一致的问题,再重新验证下。
你现在提供的日志里没有有效的和资源相关的内容,不太好分析具体原因

是的,我现在怀疑就是连接这块由于接收大的吞吐量消息,资源就会断开,针对这种一般是客户端达到了消息最大数量处理不过来导致的不?

econnrefused 是连接被拒绝了,这个不是资源断开,是根本就没有成功连上


这个应该是资源断开吧?

这个告警显示资源连接没有成功,然后在不断的重连。

那想请问一下,关于这种是如何排查呢?一开始是接收大并发是正常的,处理数据量大的时候才会出现以下节点不一致的问题。这种是开启debug可以查到吗?

我在这个日志里面看到 2024-06-04T14:47:01.734510+08:00 [debug] msg: ingress_publish_local,这个是远端的节点的日志么?这个日志看没有问题,收到消息,然后 republish,也没有异常等。

这是本地的日志,我因为换了另一个方式,是通过订阅远端的数据重发布到本地,目前没找到节点不一致的问题,但这个现象的产生都是出现在我们压测时大并发订阅远端数据导致的

结合你之前的截图来看,上行会话里都存在大量的积压消息,所以能看出上行的数据量很大,然后又会全部推到远端,这种情况下,需要注意:

  1. 远端的处理能力至少要和推送的 EMQX 集群持平
  2. MQTT 桥接的连接数要尽可能和客户端数一样,否则就会出现一个连接负责多个客户端的情况,而你本身每个客户端会话就己经在积压了
  3. 远端如果也是 EMQX,最好设置下会话的 GC 等配制,防止桥接对应的会话因为消息积压被强制关闭