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