IoT Hub能否按分区查看设备列表?是否可通过Cloud Shell获取指定分区设备?
问题解答
需求可行性
可实现。Azure IoT Hub内置的Event Hub兼容端点采用固定映射规则分配分区:同一设备ID的所有消息会始终路由到同一个固定分区,分配逻辑为对设备ID做MurmurHash3 128位哈希后,对IoT Hub总分区数取模得到分区编号,因此可以通过计算匹配得到分区8对应的所有设备列表。
实现方法(可在Cloud Shell中执行)
没有直接导出指定分区设备列表的原生CLI命令,可通过以下两步操作实现需求:
- 导出IoT Hub下全量设备ID
执行以下Azure CLI命令,将当前IoT Hub的所有设备ID导出到文本文件:
az iot hub device-identity list --hub-name <替换为你的IoT Hub实例名> --query [].deviceId -o tsv > alldevices.txt
- 批量计算匹配分区8的设备
IoT Hub的分区映射算法是公开的,你可以写个简单的循环脚本读取alldevices.txt中的每个设备ID,做MurmurHash3 128位哈希后对10取模(你当前IoT Hub总分区数为10,编号0-9),结果等于8的即为归属分区8的设备,直接输出即可得到分区8的设备列表。
替代方案
如果你已经提前开启了IoT Hub的消息路由诊断日志,也可以直接过滤日志中分区ID=8的记录,对设备ID字段去重后即可得到对应设备列表,该方案无需做哈希计算,但要求日志已提前开启且覆盖到问题发生时段。
内容的提问来源于stack exchange,提问作者randcd
相关产品推荐
相关产品推荐

