2015-02-04 5 views
1

단일 시스템에서 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 

답변

0

? 데이터를 데이터베이스에 저장하고 모든 데이터를 수신했는지 확인하고 있습니까? 이 문제는 다른 곳에있을 수도 있고 데이터베이스 삽입에있을 수도 있습니다. 처음에는 파티션을 임대하려고 할 때까지 어느 정도 시간이 걸립니다. 예열 된 후에 더 많은 메시지를 보내보십시오. 그리고 같은 시간이 걸리는 지 확인하십시오.

+0

저는 지금 벽시계를 사용하고 있습니다. 그 차이는 분명히 눈에.니다. 지금은 단순한 문자열로 콘솔에 메시지를 버리고 있습니다. 이것이 병목 현상이라고 생각하지 않습니다. 차이가 있는지 더 오래 테스트 해 보겠습니다. – fwaris

+0

나는 덮개를 보지 않고 있지만 단일 AMQP 연결/단일 시스템으로 인해 처리량이 제한 될 수 있습니다. 32 개의 파티션이 열리면 (즉, 각 파티션마다 하나씩) 32 개의 연결이 열리는 것을 의미합니까? – fwaris

+0

@fwaris,이 근본 원인을 알아 냈습니까? – Pragmatic

3

Storm에 데이터를 펌프하는 것이 목표라면 실제로 Storm에 EventHub 데이터를 가져 오는 어댑터를 제공하기 위해 통합이 수행됩니다.

  • 가 수신 대기 시간을 볼 수 ServiceBus 성능 카운터를 사용 : 당신이 시도 할 수 있습니다 여러 가지가 대기 시간 문제를 파악에 관해서는 https://github.com/hdinsight/hdinsight-storm-examples/tree/master/lib

    @ 코드를 참조하십시오. 예제를 따라 할 수 있습니다. @https://code.msdn.microsoft.com/windowsazure/Service-Bus-Messaging-7a0a0761

  • 코드에서 DateTimeUtc를 검사 점 마커로 사용하고 있습니다. 만약 당신이 마커 대신 오프셋 성능을 사용하여보십시오 (마이트가 datetime 서비스 측면에서 번역이 필요합니다)를 사용하여보십시오.
  • 클라이언트가 EventHub와 동일한 Azure region에서 실행 중인지 확인하십시오.

덕분에 -Eric 램 (MSFT)

0

나는 당신이했던 것과 동일한 방법을 사용했습니다 및 이벤트/데이터를받을 수 있습니다. 얼마 후, 좀 더 자세한 내용 인 EventProcessorHost을 발견했지만 잘 작동합니다.

관련 문제