事件中心接收缓慢

时间:2015-02-04 02:39:31

标签: azure azure-eventhub

我正在从一台计算机上测试Azure事件中心。

我有一个带有最大允许分区的事件中心(32)。

我发现写入集线器的速度非常快 - 基本上是1000 msgs / sec。但是,当我尝试将数据提取出来时,我的吞吐量几乎没有相同。拉出1000个消息需要一分钟。

我尝试过使用32个并行接收器的Direct方法和EventHost方法。两者在速度方面大致相同。

我已将所有设置保留为默认设置。

是因为我使用一台机器来提取数据吗?请注意,从同一台机器写入不是问题。

更新:以下是我用于从事件中心(直接版本)中提取数据的代码:

let startDirectPump
    stream
    eventHubConnectionString
    storageConnectionString
    fPost =
    let tag = "startEventHubPump"
    let client = EventHubClient.CreateFromConnectionString(eventHubConnectionString,stream)
    let cg = client.GetDefaultConsumerGroup()
    let runtimeInfo = client.GetRuntimeInformation()
    let pCount = runtimeInfo.PartitionCount
    let receivers =
        [for p in 0..pCount - 1 ->
            cg.CreateReceiver(runtimeInfo.PartitionIds.[p],System.DateTime.UtcNow)
            ]
    let tasks =
        receivers
        |> List.map (fun r ->
            async {
                try 
                    while not r.IsClosed do
                        let! e = r.ReceiveAsync() |> Async.AwaitTask
                        if e <> null then
                            fPost e
                with ex ->
                    do! Async.Sleep 5000
                    Logging.logex "eh receive" ex
            })
    tasks |> Async.Parallel |> Async.Ignore |> Async.Start
    client

4 个答案:

答案 0 :(得分:3)

如果您的目标是将数据泵入Storm,实际上正在进行集成以提供将EventHub数据导入Storm的适配器。请参阅代码@ https://github.com/hdinsight/hdinsight-storm-examples/tree/master/lib

至于解决延迟问题,您可能需要尝试一些事项:

  • 启用ServiceBus性能计数器以查看接收延迟。您可以按照示例@ https://code.msdn.microsoft.com/windowsazure/Service-Bus-Messaging-7a0a0761
  • 进行操作
  • 您的代码使用DateTimeUtc作为检查点标记。我想知道你是否可以尝试使用偏移作为标记,而不是看是否有一个性能提升(使用日期时间作为标记需要在服务端进行翻译)。
  • 确保您的客户端在与EventHub相同的Azure区域运行。

由于 -Eric Lam(MSFT)

答案 1 :(得分:0)

你用什么来衡量速度?您是否将数据存储在数据库中并检查是否已收到所有数据?此问题可能在其他地方,可能在您的数据库插入。有些时候,它最初尝试租用分区需要时间。一旦预热,您可以尝试发送更多消息。并检查是否仍然需要相同的时间。

答案 2 :(得分:0)

我使用了与您相同的方法,但无法接收任何事件/数据。过了一段时间后,我发现EventProcessorHost有点啰嗦,但效果还不错。

答案 3 :(得分:0)

增加吞吐量单位将为您提供帮助。