1

1 台のマシンから Azure イベント ハブをテストしています。

最大許容パーティション数 (32) のイベント ハブがあります。

私が見つけたのは、ハブへの書き込みが非常に高速であることです。基本的には、1 秒あたり 1000 メッセージのオーダーです。ただし、データを取り出そうとすると、ほぼ同じスループットが得られません。1000 件のメッセージを引き出すのに 1 分ほどかかります。

私は、32 個の並列レシーバーを使用する Direct アプローチと EventHost アプローチの両方を試しました。どちらも速度に関してはほぼ同じです。

すべての設定をデフォルトのままにしました。

データを引き出すために単一のマシンを使用しているからですか? 同じマシンからの書き込みは問題ありません。

更新: Event Hubs (直接バージョン) からデータをプルするために使用しているコードは次のとおりです。

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

4 に答える 4

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 をチェックポイント マーカーとして使用しています。パフォーマンスが向上するかどうかを確認するために、代わりにオフセットをマーカーとして使用してみてはいかがでしょうか (マーカーとして datetime を使用すると、サービス側での変換が必要になります)。
  • クライアントが EventHub と同じ Azure リージョンで実行されていることを確認してください。

ありがとう - エリック・ラム (MSFT)

于 2015-03-05T19:28:19.607 に答える
0

速度を測定するために何を使用していますか?データをデータベースに保存し、すべてのデータが受信されたかどうかを確認していますか? この問題は別の場所にある可能性があり、データベースの挿入にある可能性があります。最初にパーティションのリースを取得しようとすると、時間がかかります。ウォームアップしたら、さらにメッセージを送信してみてください。それでも同じ時間がかかるかどうかを確認します。

于 2015-02-05T00:32:11.637 に答える