如何从Microsoft Azure EventHub获取事件数?

时间:2014-09-13 00:12:30

标签: azure servicebus azure-eventhub

我想从Microsoft Azure EventHub获取事件数。 我可以使用EventHubReceiver.Receive(maxcount)但它在大量大事件上很慢。

有NamespaceManager.GetEventHubPartition(..)。EndSequenceNumber属性似乎正在做这个技巧,但我不确定它是否是正确的方法。

2 个答案:

答案 0 :(得分:6)

EventHub 没有消息计数的概念,因为EventHub是云上事件的高吞吐量,低延迟持久 - 获得当前的正确计算在给定的时间点,可能是错误的下一毫秒!!因此,没有提供:)

在我看来 - 我们应该将EventHubs命名为StreamHub - 这可能会使这一点显而易见:P

如果您正在寻找的是 - 接收器落后多少 - 那么EventHubClient.GetPartitionRuntimeInformation().LastEnqueuedSequenceNumber是您最好的选择。

只要没有消息发送到分区,这个值就保持不变:)

在接收方 - 收到消息时,receivedEventData.SequenceNumber将指示您正在处理的当前序列号和差异。在EventHubClient.GetPartitionRuntimeInformation().LastEnqueuedSequenceNumberEventData.SequenceNumber之间可以指示分区的接收器滞后多少 - 基于此,接收器进程可以向上或向下扩展。工人(工作分配逻辑)。

more on Event Hubs...

答案 1 :(得分:0)

您可以使用流分析,只需一个简单的查询:

SELECT
    COUNT(*)
FROM
    YourEventHub
GROUP BY
    TUMBLINGWINDOW(DURATION(hh, <Number of hours in which the events happened>))

当然,您需要指定一个时间窗口,但是从开始收集数据到现在,您可以运行它。

您将能够输出到 SQL / Blob / Service Bus 等。

然后,您可以从代码的输出中获取消息并进行处理。一次性计数非常复杂,但如果您经常需要它并且必须围绕它编写一些代码,那么它可能是您的解决方案。