我想从 Microsoft Azure EventHub 获取事件计数。我可以使用 EventHubReceiver.Receive(maxcount) 但在大量大事件上速度很慢。
有 NamespaceManager.GetEventHubPartition(..).EndSequenceNumber 属性似乎可以解决问题,但我不确定它是否是正确的方法。
我想从 Microsoft Azure EventHub 获取事件计数。我可以使用 EventHubReceiver.Receive(maxcount) 但在大量大事件上速度很慢。
有 NamespaceManager.GetEventHubPartition(..).EndSequenceNumber 属性似乎可以解决问题,但我不确定它是否是正确的方法。
EventHub没有 Message count 的概念,因为 EventHub 是云上的高吞吐量、低延迟的持久事件流- 在给定时间点获取正确的当前计数,可能会在下一毫秒出错!!因此,它没有提供:)
嗯,我们应该将 EventHubs 命名为 StreamHub 之类的名称 - 这会让这一点显而易见!
如果您正在寻找的是 - 接收器落后多少 - 那么EventHubClient.GetPartitionRuntimeInformation().LastEnqueuedSequenceNumber
是您的最佳选择。
只要没有消息发送到分区,这个值就保持不变:)
在接收方 - 当收到消息时 -receivedEventData.SequenceNumber
将指示您正在处理的当前序列号和差异。betweenEventHubClient.GetPartitionRuntimeInformation().LastEnqueuedSequenceNumber
和EventData.SequenceNumber
可以指示分区的接收器落后多少- 基于此,接收器进程可以放大或缩小编号。工人数(工作分配逻辑)。
您可以使用Stream Analytics,通过一个简单的查询:
SELECT
COUNT(*)
FROM
YourEventHub
GROUP BY
TUMBLINGWINDOW(DURATION(hh, <Number of hours in which the events happened>))
当然,您需要指定一个时间窗口,但您可以从开始收集数据到现在运行它。
您将能够输出到SQL/Blob/Service Bus等。
然后,您可以从代码的输出中获取消息并进行处理。一次性计数非常复杂,但是如果您经常需要它并且必须围绕它编写一些代码,那么它可能是您的解决方案。