Condividi tramite


Guida alla risoluzione dei problemi di Apache Kafka per Hub eventi

Questo articolo fornisce suggerimenti per la risoluzione dei problemi che possono verificarsi quando si usano Hub eventi per Apache Kafka.

Eccezione server occupato

È possibile che venga visualizzata l'eccezione Server Occupato a causa della limitazione delle richieste di Kafka. Con i client AMQP, Hub eventi restituisce immediatamente un'eccezione del server occupato alla limitazione delle richieste del servizio. Equivale a un messaggio "riprova più tardi". In Kafka i messaggi vengono ritardati prima del completamento. La lunghezza del ritardo viene restituita in millisecondi come throttle_time_ms nella risposta di produzione/recupero. Nella maggior parte dei casi, queste richieste ritardate non vengono registrate come eccezioni server occupato nei dashboard di Hub eventi. Al contrario, il valore throttle_time_ms della risposta deve essere usato come indicatore che la velocità effettiva ha superato la quota di cui è stato effettuato il provisioning.

Se il traffico è eccessivo, il servizio ha il comportamento seguente:

  • Se il ritardo della richiesta di produzione supera il timeout della richiesta (request.timeout.ms), Hub eventi restituisce il codice di errore di Violazione dei criteri.
  • Se il ritardo della richiesta di recupero supera il timeout della richiesta, Hub eventi registra la richiesta come limitata e risponde con un set vuoto di record e senza codice di errore.

I cluster dedicati non dispongono di meccanismi di limitazione delle richieste. È possibile usare tutte le risorse del cluster.

Nessun record ricevuto

È possibile che i consumer non ottengano record e ribilancino costantemente. In questo scenario, i consumer non ottengono record e ribilanciano costantemente. Non si verificano eccezioni o errori, ma i log Kafka mostrano che i consumer stanno tentando di ricongiungersi al gruppo e assegnare partizioni. Esistono alcune possibili cause:

  • Assicurarsi che request.timeout.ms sia almeno il valore consigliato di 60000 e che session.timeout.ms sia almeno il valore consigliato di 30000. Avere queste impostazioni troppo basse potrebbe causare timeout del consumer, che causano quindi ribilanciamenti (che causano più timeout, che causano un maggiore ribilanciamento e così via)
  • Se la configurazione corrisponde a questi valori consigliati e si sta ancora visualizzando un ribilanciamento costante, è possibile aprire un problema (assicurarsi di includere l'intera configurazione nel problema in modo che sia possibile eseguire il debug).

Problema di versione del formato di messaggio/compressione

Hub eventi per Kafka supporta attualmente solo l'algoritmo di compressione gzip. Se viene usato un altro algoritmo, le applicazioni client visualizzeranno un errore di versione in formato messaggio, ad esempio The message format version on the broker does not support the request..

Se è necessario usare un algoritmo di compressione non supportato, una soluzione alternativa valida consiste nel comprimere i dati con tale algoritmo specifico prima di inviarli ai broker e decomprimerli dopo la ricezione. Il corpo del messaggio è solo una matrice di byte per il servizio, quindi la compressione/decompressione lato client non causerà problemi.

UnknownServerException

È possibile ricevere un'eccezione UnknownServerException dalle librerie client Kafka simili all'esempio seguente:

org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request

Aprire un ticket con il supporto tecnico Microsoft. La registrazione a livello di debug e i timestamp delle eccezioni in formato UTC sono utili per il debug del problema.

Altri problemi

Controllare gli elementi seguenti se vengono visualizzati problemi durante l'uso di Kafka in Hub eventi.

  • Firewall che blocca il traffico: assicurarsi che la porta 9093 non sia bloccata dal firewall.
  • TopicAuthorizationException: le cause più comuni di questa eccezione sono:
    • Errore di battitura nella stringa di connessione nel file di configurazione o
    • Tentativo di usare Hub eventi per Kafka in uno spazio dei nomi di livello Basic. La funzionalità Hub eventi per Kafka non è supportata nel livello Basic.
  • Mancata corrispondenza della versione di Kafka: Hub eventi per gli ecosistemi Kafka supporta le versioni Kafka 1.0 e successive. Alcune applicazioni che usano Kafka versione 0.10 e successive potrebbero occasionalmente funzionare a causa della compatibilità con le versioni precedenti del protocollo Kafka, ma è consigliabile non usare le versioni precedenti dell'API. Le versioni kafka 0.9 e precedenti non supportano i protocolli SASL necessari e non possono connettersi a Hub eventi.
  • Codifiche strane nelle intestazioni AMQP quando si usano con Kafka: quando si inviano eventi a un hub eventi tramite AMQP, tutte le intestazioni del payload AMQP vengono serializzate nella codifica AMQP. I consumer Kafka non deserializzano le intestazioni da AMQP. Per leggere i valori di intestazione, decodificare manualmente le intestazioni AMQP. In alternativa, è possibile evitare di usare le intestazioni AMQP se si sa che l'uso avverrà tramite il protocollo Kafka. Per altre informazioni, vedere questo problema in GitHub.
  • Autenticazione SASL: ottenere il framework per collaborare con il protocollo di autenticazione SASL richiesto da Hub eventi può essere più difficile di quanto sembri. Verificare se è possibile risolvere i problemi di configurazione usando le risorse del framework nell'autenticazione SASL.

Limiti

Apache Kafka e Hub eventi Kafka. Per la maggior parte, l'interfaccia Kafka di Hub eventi di Azure offre le stesse impostazioni predefinite e proprietà, nonché i medesimi codici di errore e comportamento generale di Apache Kafka. Di seguito sono elencate le istanze in cui questi due elementi differiscono in modo esplicito (o in cui Hub eventi impone un limite non imposto da Kafka):

  • La lunghezza massima della proprietà group.id è di 256 caratteri
  • La dimensione massima di offset.metadata.max.bytes è 1024 byte
  • I commit di offset sono limitati a 4 chiamate al secondo per partizione con dimensioni massime del log interno pari a 1 MB

Passaggi successivi

Per altre informazioni su Hub eventi e Hub eventi per Kafka, vedere gli articoli seguenti: