我有一个流分析作业,它使用 avro 消息的事件中心(我们将其称为 RawEvents),转换/扁平化消息并将它们发送到单独的事件中心(我们将其称为 FormattedEvents)。
RawEvents 中的每个 EventData 实例都包含一个顶级 json 对象,该对象具有一组更详细的事件。这是一个人为的示例:
[{ "Events": [{ "dataOne": 123.0, "dataTwo": 234.0, "subEventCode": 3, "dateTimeLocal": 1482170771, "dateTimeUTC": 1482192371 }, { "dataOne": 456.0, "dataTwo": 789.0, "subEventCode": 20, "dateTimeLocal": 1482170771, "dateTimeUTC": 1482192371 }], "messageType": "myDeviceType-Events", "deviceID": "myDevice", }]
流分析作业会展平结果并解包 subEventCode,它是一个位掩码。结果看起来像这样:
{"messagetype":"myDeviceType-Event","deviceid":"myDevice",eventid:1,"dataone":123,"datatwo":234,"subeventcode":6,"flag1":0,"flag2":1,"flag3":1,"flag4":0,"flag5":0,"flag6":0,"flag7":0,"flag8":0,"flag9":0,"flag10":0,"flag11":0,"flag12":0,"flag13":0,"flag14":0,"flag15":0,"flag16":0,"eventepochlocal":"2016-12-06T17:33:11.0000000Z","eventepochutc":"2016-12-06T23:33:11.0000000Z"} {"messagetype":"myDeviceType-Event","deviceid":"myDevice",eventid:2,"dataone":456,"datatwo":789,"subeventcode":8,"flag1":0,"flag2":0,"flag3":0,"flag4":1,"flag5":0,"flag6":0,"flag7":0,"flag8":0,"flag9":0,"flag10":0,"flag11":0,"flag12":0,"flag13":0,"flag14":0,"flag15":0,"flag16":0,"eventepochlocal":"2016-12-06T17:33:11.0000000Z","eventepochutc":"2016-12-06T23:33:11.0000000Z"}
当我从 FormattedEvents 事件中心提取消息时,我希望看到两个 EventData 实例。我得到的是一个 EventData,在同一条消息中包含两个“扁平化”事件。当以 Blob 存储或数据湖为目标时,这是预期的行为,但当以事件中心为目标时,这是令人惊讶的。我的期望是类似于服务总线的行为。
这是预期的行为吗?如果是的话,是否有一个配置选项可以强制执行该行为?
最佳答案
是的,这是目前的预期行为。目的是提高尝试在 EventHub 消息 (EventData) 中发送尽可能多的事件的吞吐量。
不幸的是,截至目前还没有配置选项可以覆盖此行为。一种可能值得尝试的方法是利用输出分区键的概念来实现 super 独特的功能(即将此列添加到您的查询中 - GetMetadataPropertyValue(ehInput, "EventId") as outputpk )。现在,在输出 EventHub 的 ASA 设置中将“outputpk”指定为 PartitionKey。
请告诉我这是否有帮助。
干杯 切坦
关于azure - 将分析流式传输到事件中心 - 意外串联事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42213418/