Я тестирую концентраторы событий Azure на одном компьютере.
У меня есть концентратор событий с максимально допустимыми разделами (32).
Я обнаружил, что запись в хаб выполняется очень быстро - в основном порядка 1000 сообщений в секунду. Однако, когда я пытаюсь извлечь данные, я не получаю почти такой же пропускной способности. Вывод 1000 сообщений занимает около минуты.
Я пробовал как прямой подход с 32 параллельными приемниками, так и подход 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