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