Azure Event Hubs时序数据导入Time Series Insights显示异常排查
问题分析与解决方案
这个问题我之前帮不少开发者排查过,核心问题出在你发送消息的格式和Time Series Insights(TSI)的事件解析逻辑不匹配上,具体原因和解决办法如下:
为什么会出现事件合并?
你现在是把多个独立事件打包在一个顶级JSON对象的Events数组里,作为单条消息发送到Event Hubs。而TSI默认会把从Event Hubs收到的每一条完整消息当作一个独立事件来处理——也就是说,整个包含Events数组的JSON会被识别为一个事件,数组里的所有子事件数据会被合并到同一个时间点展示(通常是消息的入队时间,或者TSI自动选取的某个时间字段),这就导致你看到338个事件被合并成一个点。
解决办法
方法1:拆分消息发送(最直接)
把Events数组里的每个子元素拆出来,作为单独的Event Hubs消息发送。比如原来的数组里有2个事件,就发2条独立的JSON消息:
{"Location":"XXXXX", "EquipmentID": "XXXXXX", "Timestamp": "2018-04-06T12:45:00Z",...}
{"Location":"XXXXX", "EquipmentID": "XXXXXX", "Timestamp": "2018-04-06T12:45:01Z",...}
这样TSI会把每条消息当作独立事件,自动读取每个消息里的Timestamp字段来展示。
方法2:配置TSI解析数组事件(适合批量发送场景)
如果必须批量发送数组格式的消息,可以在TSI的事件源设置里开启数组解析功能:
- 登录Azure门户,找到你的TSI环境,进入对应的Event Hubs事件源配置页面
- 在「事件序列化」部分,选择JSON作为事件格式
- 开启「数组解析」选项,这样TSI会自动把JSON数组里的每个元素当作独立事件处理
- 同时一定要确认「时间戳属性名称」设置为
Timestamp(注意大小写要和你的JSON字段完全匹配),而不是使用默认的入队时间
关键验证点
最后别忘了检查TSI事件源的时间戳配置:确保你明确指定了Timestamp作为时间戳字段,而不是让TSI默认使用Event Hubs的入队时间。如果这个配置错了,即使拆分了消息,TSI还是会用入队时间展示,可能出现不符合预期的情况。
内容的提问来源于stack exchange,提问作者Shyam V
相关产品推荐
相关产品推荐

