Condividi tramite


Risolvere i problemi relativi alle prestazioni di Hub eventi di Azure

Questo articolo offre soluzioni ai problemi di prestazioni comuni che possono verificarsi quando si usa la libreria di Hub eventi in Azure SDK per Java. Se si stanno cercando soluzioni ad altri problemi comuni che possono verificarsi quando si usano Hub eventi, vedere Risoluzione dei problemi Hub eventi di Azure.

Usare processEvent o processEventBatch

Quando si usa il processEvent callback, ogni EventData istanza ha ricevuto chiamate al codice. Questo processo funziona bene con traffico basso o moderato nell'hub eventi.

Se l'hub eventi ha traffico elevato e velocità effettiva elevata è previsto, il costo aggregato della chiamata continua del callback impedisce le prestazioni di EventProcessorClient. In questo caso, è consigliabile usare processEventBatch.

Per ogni partizione, il callback viene richiamato uno alla volta. Il tempo di elaborazione elevato nel callback ostacola le prestazioni perché EventProcessorClient non continua a eseguire il push di più eventi downstream né richiedere più EventData istanze dal servizio Hub eventi.

Costi di checkpoint

Quando si usa Archiviazione BLOB di Azure come archivio checkpoint, è previsto un costo di rete per il checkpoint perché effettua una richiesta HTTP e attende una risposta. Questo processo potrebbe richiedere fino a diversi secondi a causa della latenza di rete, delle prestazioni di Archiviazione BLOB di Azure, della posizione delle risorse e così via.

Il checkpoint dopo l'elaborazione di ogni EventData istanza impedisce le prestazioni a causa del costo di effettuare queste richieste HTTP. Non è consigliabile creare un checkpoint se il callback non ha elaborato alcun evento oppure è consigliabile eseguire il checkpoint dopo l'elaborazione di un certo numero di eventi.

Usare LoadBalancingStrategy.BALANCED o LoadBalancingStrategy.GRedizione Enterprise DY

Quando si usa LoadBalancingStrategy.BALANCED, le EventProcessorClient attestazioni una partizione per ogni ciclo di bilanciamento del carico. Se sono presenti 32 partizioni in un hub eventi, sono necessarie 32 iterazioni di bilanciamento del carico per richiedere tutte le partizioni. Se gli utenti conoscono un numero impostato di EventProcessorClient istanze in esecuzione, possono usare LoadBalancingStrategy.GREEDY per richiedere la condivisione delle partizioni in un ciclo di bilanciamento del carico.

Per altre informazioni su ogni strategia, vedere LoadBalancingStrategy.java nel repository azure-sdk-for-java.

Configurare prefetchCount

Il valore di prelettura predefinito è 500. Quando il collegamento di ricezione AMQP viene aperto, inserisce 500 crediti sul collegamento. Supponendo che ogni EventData istanza sia un credito di collegamento, EventProcessorClient esegue il prelettura di 500 EventData istanze. Quando vengono utilizzati tutti gli eventi, il client processore aggiunge 500 crediti al collegamento per ricevere più messaggi. Questo flusso si ripete mentre l'oggetto EventProcessorClient ha ancora la proprietà di una partizione.

La configurazione prefetchCount può avere implicazioni sulle prestazioni se il numero è troppo basso. Ogni volta che il servizio remoto AMQP riceve crediti, il servizio remoto invia un ACK. Per scenari con velocità effettiva elevata, il sovraccarico di esecuzione di migliaia di richieste client e ACL del servizio può ostacolare le prestazioni.

La configurazione prefetchCount può avere implicazioni sulle prestazioni se il numero è troppo elevato. Quando x crediti vengono inseriti nella riga, il servizio Hub eventi sa che può inviare al massimo x messaggi. Quando ogni EventData istanza viene ricevuta, viene inserita in una coda in memoria, in attesa di essere elaborata. Un numero elevato di EventData istanze nella coda può comportare un utilizzo di memoria molto elevato.

Passaggi successivi

Se le linee guida per la risoluzione dei problemi in questo articolo non consentono di risolvere i problemi quando si usano le librerie client di Azure SDK per Java, è consigliabile segnalare un problema nel repository GitHub di Azure SDK per Java.