5

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

有 NamespaceManager.GetEventHubPartition(..).EndSequenceNumber 属性似乎可以解决问题,但我不确定它是否是正确的方法。

4

2 回答 2

10

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

嗯,我们应该将 EventHubs 命名为 StreamHub 之类的名称 - 这会让这一点显而易见!

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

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

在接收方 - 当收到消息时 -receivedEventData.SequenceNumber将指示您正在处理的当前序列号和差异。betweenEventHubClient.GetPartitionRuntimeInformation().LastEnqueuedSequenceNumberEventData.SequenceNumber可以指示分区的接收器落后多少- 基于此,接收器进程可以放大或缩小编号。工人数(工作分配逻辑)。

有关事件中心的更多信息...

于 2014-09-24T19:03:08.230 回答
0

您可以使用Stream Analytics,通过一个简单的查询:

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

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

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

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

于 2016-09-15T09:45:44.480 回答