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 vengano visualizzate le metriche ThrottledRequests a causa della limitazione 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 in arrivo subiscono un ritardo prima di essere riconosciuti, mentre i messaggi in uscita subiscono un ritardo nella consegna. 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 metriche ThrottledRequests 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), Event Hubs restituisce il codice di errore Violazione delle politiche.
  • Se il ritardo della richiesta di recupero supera il timeout della richiesta, Event Hubs registra la richiesta come soggetta a limitazione e risponde con un insieme di record vuoto senza alcun codice di errore.

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 da consentire il debug).

Problema di versione del formato di messaggio/compressione

Hub eventi per Kafka attualmente supporta solo l'algoritmo di compressione gzip. Se viene usato un altro algoritmo, le applicazioni client visualizzano 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 si utilizza 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. I casi in cui questi due differiscono esplicitamente (o dove Event Hubs impone un limite che Kafka non ha) sono elencati di seguito:

  • La lunghezza massima della proprietà group.id è di 256 caratteri
  • La dimensione massima di offset.metadata.max.bytes è 1.024 byte
  • I commit di offset sono limitati a 2 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: