各位大佬请教下,使用多个topic和单个topic哪个效率更高,总的连接数和吞吐量一样。
请描述一下具体的场景。
具体场景为:设备需要发送给后端message,让后端处理一下,转发给app(设备内存不够,处理不了),设备端跟app端肯定没问题,主要压力在后端,我在想用一个topic订阅所有的设备消息效率高,还是每一个设备使用不同的topic效率高
+---------+
| Devices |------------->+
+---------+ |
|
+----+----+ dev_topic/... +---------+
| EMQX |<----------------->| Backend |
+----+----+ app_topic/... +---------+
|
+---------+ |
| APPs |<-------------+
+---------+
所有 device 都向同一个 topic 发送,和每个 device 都向特定的 topic 发送在效率上来说是几乎一样的。不会有很大差距。但是为了方便管理,建议在 device 发送的 topic 中带上当前设备的信息,后端使用通配符订阅获取消息。
例如设备发送到 dev/upload/{device_id}
, 后端订阅 dev/upload/+
获取所有设备的消息
感谢
在翻看emqx官方文档的时候有这么一个使用建议,
通过案例理解 MQTT 主题与通配符
### 服务器对主题数量有限制吗?
不同消息服务器对最大主题数量的支持各不一致,目前 EMQX 的默认配置对主题数量没有限制,但是主题数量越多将会消耗越多的服务器内存。考虑到连接到 MQTT Broker 的设备数量一般较多,我们建议一个客户端订阅的主题数量最好控制在 10 个以内。
假设device数量达到1000+,这时候后端使用通配符 dev/upload/+
获取所有设备的消息,这样使用的话是不是和官方文档的建议不一致?
按sharegay贴出的官方文档看,一个主题消耗的内存比多个主题消耗内存少,是不是推荐用一个主题?
是的,对于设备订阅来说,主题数越少当然消耗的内存就越少,这是肯定的。当设备量级很高时(100w+),这样带来的节省就非常有意义了。
从效率(CPU消耗、和端对端延迟)来说,这两者区别不大,不是主要影响延迟和 CPU 消耗的原因。