Partager via


Résoudre les problèmes de performances d’Azure Event Hubs

Cet article fournit des solutions aux problèmes de performances courants que vous pouvez rencontrer lorsque vous utilisez la bibliothèque Event Hubs dans le Kit de développement logiciel (SDK) Azure pour Java. Si vous recherchez des solutions à d’autres problèmes courants que vous pouvez rencontrer lorsque vous utilisez Event Hubs, consultez Résolution des problèmes liés à Azure Event Hubs.

Utiliser processEvent ou processEventBatch

Lorsque vous utilisez le processEvent rappel, chaque EventData instance a reçu des appels à votre code. Ce processus fonctionne bien avec un trafic faible ou modéré dans le hub d’événements.

Si le hub d’événements a un trafic élevé et un débit élevé est attendu, le coût agrégé d’appel continu de votre rappel entrave les performances de EventProcessorClient. Dans ce cas, vous devez utiliser processEventBatch.

Pour chaque partition, votre rappel est appelé un par un. Le temps de traitement élevé dans le rappel empêche les performances, car il EventProcessorClient ne continue pas à envoyer (push) davantage d’événements en aval ni à demander plus EventData d’instances du service Event Hubs.

Coûts de case activée pointage

Lorsque vous utilisez Stockage Blob Azure comme magasin case activée point, il existe un coût réseau pour case activée point, car il effectue une requête HTTP et attend une réponse. Ce processus peut prendre jusqu’à plusieurs secondes en raison de la latence du réseau, des performances de Stockage Blob Azure, de l’emplacement des ressources, et ainsi de suite.

Le point de contrôle après le traitement de chaque EventData instance entrave les performances en raison du coût de l’exécution de ces requêtes HTTP. Vous ne devez pas case activée point si votre rappel n’a traité aucun événement, ou vous devez case activée point après avoir traité un certain nombre d’événements.

Utiliser LoadBalancingStrategy.BALANCED ou LoadBalancingStrategy.GREEDY

Lorsque vous utilisez LoadBalancingStrategy.BALANCED, les EventProcessorClient revendications une partition pour chaque cycle d’équilibrage de charge. S’il existe 32 partitions dans un hub d’événements, il faut 32 itérations d’équilibrage de charge pour revendiquer toutes les partitions. Si les utilisateurs connaissent un nombre défini d’instances en cours d’exécution EventProcessorClient , ils peuvent utiliser LoadBalancingStrategy.GREEDY pour revendiquer leur partage des partitions dans un cycle d’équilibrage de charge.

Pour plus d’informations sur chaque stratégie, consultez LoadBalancingStrategy.java dans le référentiel azure-sdk-for-java.

Configurer prefetchCount

La valeur de prérécupération par défaut est 500. Lorsque le lien de réception AMQP est ouvert, il place 500 crédits sur le lien. En supposant que chaque EventData instance est un crédit de lien, EventProcessorClient préfetches 500 EventData instances. Lorsque tous les événements sont consommés, le client processeur ajoute 500 crédits au lien pour recevoir plus de messages. Ce flux se répète alors que la EventProcessorClient propriété d’une partition est toujours présente.

La configuration prefetchCount peut avoir des implications sur les performances si le nombre est trop faible. Chaque fois que le protocole AMQP reçoit des crédits, le service distant envoie un ACK. Pour les scénarios à débit élevé, la surcharge liée à l’exécution de milliers de demandes clientes et de kits ACK de service peut entraver les performances.

La configuration prefetchCount peut avoir des implications sur les performances si le nombre est trop élevé. Lorsque des crédits x sont placés sur la ligne, le service Event Hubs sait qu’il peut envoyer au maximum des messages x . Lorsque chaque EventData instance est reçue, elle est placée dans une file d’attente en mémoire, en attente d’être traitée. Un grand nombre d’instances de EventData la file d’attente peut entraîner une utilisation très élevée de la mémoire.

Étapes suivantes

Si les conseils de dépannage de cet article n’aident pas à résoudre les problèmes lorsque vous utilisez le Kit de développement logiciel (SDK) Azure pour les bibliothèques clientes Java, nous vous recommandons de déposer un problème dans le référentiel Azure SDK pour Java GitHub.