Delen via


Problemen met prestaties van Azure Event Hubs oplossen

Dit artikel bevat oplossingen voor veelvoorkomende prestatieproblemen die kunnen optreden wanneer u de Event Hubs-bibliotheek gebruikt in de Azure SDK voor Java. Als u op zoek bent naar oplossingen voor andere veelvoorkomende problemen die kunnen optreden wanneer u Event Hubs gebruikt, raadpleegt u Problemen met Azure Event Hubs oplossen.

ProcessEvent of processEventBatch gebruiken

Wanneer u de processEvent callback gebruikt, wordt uw code door elk EventData exemplaar aangeroepen. Dit proces werkt goed met weinig of gemiddeld verkeer in de Event Hub.

Als de Event Hub veel verkeer en hoge doorvoer verwacht, worden de geaggregeerde kosten voor het continu aanroepen van uw callback de prestaties van EventProcessorClient. In dit geval moet u gebruiken processEventBatch.

Voor elke partitie wordt uw callback één voor één aangeroepen. Hoge verwerkingstijd in de callback belemmert de prestaties omdat er EventProcessorClient niet meer gebeurtenissen downstream worden gepusht of meer EventData exemplaren van de Event Hubs-service worden aangevraagd.

Kosten van controlepunten

Wanneer u Azure Blob Storage als controlepuntarchief gebruikt, zijn er netwerkkosten voor controlepunten omdat er een HTTP-aanvraag wordt ingediend en wordt gewacht op een antwoord. Dit proces kan enkele seconden duren vanwege netwerklatentie, de prestaties van Azure Blob Storage, resourcelocatie, enzovoort.

Controlepunten nadat elk EventData exemplaar is verwerkt, belemmert de prestaties vanwege de kosten van het maken van deze HTTP-aanvragen. U moet geen controlepunt instellen als uw callback geen gebeurtenissen heeft verwerkt of als controlepunt na het verwerken van een aantal gebeurtenissen.

LoadBalancingStrategy.BALANCED of LoadBalancingStrategy.GREEDY gebruiken

Wanneer u gebruikt LoadBalancingStrategy.BALANCED, claimt u EventProcessorClient één partitie voor elke taakverdelingscyclus. Als er 32 partities in een Event Hub zijn, duurt het 32 iteraties voor taakverdeling om alle partities te claimen. Als gebruikers weten dat een bepaald aantal EventProcessorClient exemplaren wordt uitgevoerd, kunnen ze hun LoadBalancingStrategy.GREEDY aandeel van de partities claimen in één taakverdelingscyclus.

Zie LoadBalancingStrategy.java in de opslagplaats azure-sdk-for-java voor meer informatie over elke strategie.

PrefetchCount configureren

De standaardwaarde voor vooraf fetch is 500. Wanneer de AMQP-ontvangstkoppeling wordt geopend, wordt er 500 tegoed op de koppeling weergegeven. Ervan uitgaande dat elk EventData exemplaar één koppelingstegoed is, EventProcessorClient worden 500 EventData exemplaren voorafgegaan. Wanneer alle gebeurtenissen worden gebruikt, voegt de processorclient 500 tegoed toe aan de koppeling om meer berichten te ontvangen. Deze stroom wordt herhaald terwijl de EventProcessorClient nog steeds eigenaar is van een partitie.

prefetchCount Het configureren kan gevolgen hebben voor de prestaties als het aantal te laag is. Telkens wanneer de AMQP tegoeden ontvangt, verzendt de externe service een ACK. Voor scenario's met hoge doorvoer kan de overhead van het maken van duizenden clientaanvragen en service-ACL's de prestaties belemmeren.

prefetchCount Het configureren kan gevolgen hebben voor de prestaties als het getal te hoog is. Wanneer x-tegoed op de regel wordt geplaatst, weet de Event Hubs-service dat het maximaal x-berichten kan verzenden. Wanneer elk EventData exemplaar wordt ontvangen, wordt deze in een in-memory wachtrij geplaatst, die wacht tot deze wordt verwerkt. Een groot aantal EventData exemplaren in de wachtrij kan leiden tot een zeer hoog geheugengebruik.

Volgende stappen

Als de richtlijnen voor probleemoplossing in dit artikel niet helpen bij het oplossen van problemen wanneer u de Azure SDK voor Java-clientbibliotheken gebruikt, raden we u aan een probleem op te slaan in de Azure SDK voor Java GitHub-opslagplaats.