用EMQX MQTT集成服务时出现action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired

我是使用内置的MQTT规则服务,从EMQX中取数据然后写入IoTDB中。当规则启动后,10几秒钟就发现有很多丢弃的数据,用日志追踪后,发现有很多日志如下:
2025-01-05T15:42:39.440949+08:00 [ACTION] @ msg: action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired, rule_id: SCADA_IoTDB

2025-01-05T15:42:39.441047+08:00 [ACTION] @ msg: action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired, rule_id: SCADA_IoTDB

2025-01-05T15:42:39.441140+08:00 [ACTION] @ msg: action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired, rule_id: SCADA_IoTDB

2025-01-05T15:42:39.441324+08:00 [ACTION] @ msg: action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired, rule_id: SCADA_IoTDB

2025-01-05T15:42:39.441493+08:00 [ACTION] @ msg: action_failed, action_info: [name: IoTDB, type: mqtt], reason: request_expired, rule_id: SCADA_IoTDB

不晓得这是什么原因造成的?

应该是发给 iotdb 的请求都超时了

如果出现这种情况,除了提升IoTDB方面的吞吐量,EMQX这边有没有什么调优的办法了?

版本是多少,具体的 emqx 配置是怎么样的了?用的开源版的 http bridge 么?

我目前想到的办法就是多建几个规则来分流EMQX的总数据量。例如,IoTDB能提受的速率是2000/秒,流入EMQX总量是8000/秒, 那么我就用共享订阅的方式建4个规则,这4个规则使用各自的数据接入和动作输出。我这样做了,但我发现动作输入中的缓存数量根本不是期望的2000/秒,一般都在6000/秒,有时飙到1万多。这是为什么呢? 是我对共享订阅理解不误吗?我理解共享订阅就是同一组的订阅做总量的负载才对

版本是5.8.3, 用的是开源版的集成服务,即MQTT服务。


您的意思是:
上游MQTT 服务的流速是 8000,你在下游的 MQTT 服务里面用 4 个规则(4 个连接器)来动作输出到不同的 iotdb 里面,期望每一个的流速是 2000.但是实际是 6000-10000
我这样理解没错吧?

你只要用的是 4 个不同的连接器应该是 ok 的。你可以看看连接器里面的高级选项:


再去上游的 emqx dashboard 中找一下一共有多少个客户端,订阅的都是什么主题。