단일 시스템에서 Azure 이벤트 허브를 테스트하고 있습니다.이벤트 허브가 느리게 수신됩니다.
최대 허용 파티션 (32 개)이있는 이벤트 허브가 있습니다.
내가 발견 한 것은 허브에 쓰기가 매우 빠르다는 것입니다. 기본적으로 1000ms/초입니다. 그러나 데이터를 꺼내려고 할 때 거의 동일한 처리량을 얻지 못합니다. 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
저는 지금 벽시계를 사용하고 있습니다. 그 차이는 분명히 눈에.니다. 지금은 단순한 문자열로 콘솔에 메시지를 버리고 있습니다. 이것이 병목 현상이라고 생각하지 않습니다. 차이가 있는지 더 오래 테스트 해 보겠습니다. – fwaris
나는 덮개를 보지 않고 있지만 단일 AMQP 연결/단일 시스템으로 인해 처리량이 제한 될 수 있습니다. 32 개의 파티션이 열리면 (즉, 각 파티션마다 하나씩) 32 개의 연결이 열리는 것을 의미합니까? – fwaris
@fwaris,이 근본 원인을 알아 냈습니까? – Pragmatic