다음을 통해 공유


Azure Event Hubs 성능 문제 해결

이 문서에서는 Java용 Azure SDK에서 Event Hubs 라이브러리를 사용할 때 발생할 수 있는 일반적인 성능 문제에 대한 솔루션을 제공합니다. Event Hubs를 사용할 때 발생할 수 있는 다른 일반적인 문제에 대한 솔루션을 찾고 있는 경우 Azure Event Hubs 문제 해결을 참조 하세요.

processEvent 또는 processEventBatch 사용

콜백을 processEvent 사용하면 각 EventData 인스턴스에서 코드 호출을 받았습니다. 이 프로세스는 이벤트 허브에서 낮은 트래픽 또는 보통 트래픽에서 잘 작동합니다.

이벤트 허브에 높은 트래픽이 있고 높은 처리량이 예상되는 경우 콜백을 지속적으로 호출하는 집계 비용이 성능 EventProcessorClient저하됩니다. 이 경우 .를 사용해야 processEventBatch합니다.

각 파티션에 대해 콜백이 한 번에 하나씩 호출됩니다. 콜백의 처리 시간이 높아도 더 많은 이벤트를 다운스트림으로 푸시하거나 Event Hubs 서비스에서 더 많은 EventData 인스턴스를 요청하지 않으므로 성능 EventProcessorClient 이 저하됩니다.

검사포인트링 비용

Azure Blob Storage를 검사point 저장소로 사용하는 경우 HTTP 요청을 수행하고 응답을 기다리기 때문에 검사포인트링하는 데 네트워크 비용이 발생합니다. 이 프로세스는 네트워크 대기 시간, Azure Blob Storage의 성능, 리소스 위치 등으로 인해 최대 몇 초 정도 걸릴 수 있습니다.

모든 EventData 인스턴스가 처리된 후 검사점은 이러한 HTTP 요청을 만드는 비용으로 인해 성능을 저하합니다. 콜백에서 이벤트를 처리하지 않았는지 또는 몇 가지 이벤트를 처리한 후 검사포인트를 검사 않아야 합니다.

LoadBalancingStrategy.BALANCED 또는 LoadBalancingStrategy.GREEDY 사용

사용하는 LoadBalancingStrategy.BALANCEDEventProcessorClient 경우 모든 부하 분산 주기에 대해 하나의 파티션을 클레임합니다. 이벤트 허브에 32개의 파티션이 있는 경우 모든 파티션을 클레임하려면 32번의 부하 분산 반복이 필요합니다. 사용자가 실행 중인 인스턴스의 EventProcessorClient 집합 수를 알고 있는 경우 하나의 부하 분산 주기에서 파티션의 공유를 클레임하는 데 사용할 LoadBalancingStrategy.GREEDY 수 있습니다.

각 전략에 대한 자세한 내용은 azure-sdk-for-java 리포지토리의 LoadBalancingStrategy.java를 참조하세요.

prefetchCount 구성

기본 프리페치 값은 500입니다. AMQP 수신 링크가 열리면 링크에 500 크레딧이 배치됩니다. 각 EventData 인스턴스가 하나의 링크 크레딧 EventProcessorClient 이라고 가정하면 500 EventData 개의 인스턴스를 프리페치합니다. 모든 이벤트를 사용하는 경우 프로세서 클라이언트는 링크에 500 크레딧을 추가하여 더 많은 메시지를 받습니다. 이 흐름은 파티션의 소유권이 EventProcessorClient 있는 동안 반복됩니다.

숫자가 너무 낮은 경우 구성 prefetchCount 은 성능에 영향을 미칠 수 있습니다. AMQP 수신 링크에서 크레딧을 배치할 때마다 원격 서비스는 ACK를 보냅니다. 높은 처리량 시나리오의 경우 수천 개의 클라이언트 요청 및 서비스 ACK를 만드는 오버헤드로 인해 성능이 저하될 수 있습니다.

숫자가 너무 높은 경우 구성 prefetchCount 은 성능에 영향을 미칠 수 있습니다. x 크레딧이 줄에 배치되면 Event Hubs 서비스는 최대 x개의 메시지를 보낼 수 있음을 알고 있습니다. 각 EventData 인스턴스가 수신되면 메모리 내 큐에 배치되어 처리될 때까지 대기합니다. 큐의 EventData 인스턴스 수가 많을수록 메모리 사용량이 매우 높아질 수 있습니다.

다음 단계

이 문서의 문제 해결 지침이 Java용 Azure SDK 클라이언트 라이브러리를 사용할 때 문제를 해결하는 데 도움이 되지 않는 경우 Java GitHub 리포지토리용 Azure SDK에 문제를 제출하는 것이 좋습니다.