【问题标题】:How to get events count from Microsoft Azure EventHub?如何从 Microsoft Azure EventHub 获取事件计数?
【发布时间】:2014-11-07 05:47:58
【问题描述】:

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

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

【问题讨论】:

  • 我想澄清一下您所说的“事件计数”是什么意思。这是集线器中的消息总数吗?在分区?在一段时间内发送到集线器?在一段时间内从中心收到?
  • 您想对计数做什么?请记住,计数可能会在获取后立即更改,因为您正在谈论每秒应该处理大量消息的服务总线......
  • 是的,我想获取集线器中的消息总数。只要我不发送新消息,总数应该会保持一段时间 - 这对我来说已经足够了。

标签: azure servicebus azure-eventhub


【解决方案1】:

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

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

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

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

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

more on Event Hubs...

【讨论】:

    【解决方案2】:

    您可以通过简单的查询使用流分析

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

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

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

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

    【讨论】:

    • 不要使用这种方法。 1)这可能会增加您的 EventHub 账单 - 因为您将从 EventHub 读取所有事件(支付事件、网络等)并最终获得“计数”! 2) 性能较差 - 需要很长时间!。
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2021-07-17
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多