Condividi tramite


Configurazioni consigliate per i client Apache Kafka

Di seguito sono riportate le configurazioni consigliate per l'uso di Hub eventi di Azure da applicazioni client Apache Kafka.

Proprietà di configurazione client Java

Configurazioni producer e consumer

Proprietà Valori consigliati Intervallo consentito Note
metadata.max.age.ms 180000 (approssimativo) < 240000 Può essere abbassato per raccogliere le modifiche ai metadati prima.
connections.max.idle.ms 180000 < 240000 Azure chiude il protocollo TCP (Transmission Control Protocol) in ingresso inattivo > 240.000 ms, che può comportare l'invio su connessioni non recapitabili (come batch scaduti a causa del timeout di invio).

Solo configurazioni producer

Le configurazioni del producer sono disponibili qui.

Proprietà Valori consigliati Intervallo consentito Note
max.request.size 1000000 < 1046528 Il servizio chiude le connessioni se vengono inviate richieste superiori a 1.046.528 byte. Questo valore deve essere modificato e causa problemi in scenari di produzione a velocità effettiva elevata.
retries > 0 Potrebbe essere necessario aumentare delivery.timeout.ms valore, vedere la documentazione.
request.timeout.ms 30000 .. 60000 > 20000 L'impostazione predefinita di Hub eventi è di almeno 20.000 ms. Anche se le richieste con valori di timeout inferiori vengono accettate, il comportamento del client non è garantito.

Assicurarsi che il request.timeout.ms sia almeno il valore consigliato di 60000 e che il session.timeout.ms sia almeno il valore consigliato di 30000. La presenza di queste impostazioni troppo bassa potrebbe causare timeout del consumer, che causano quindi ribilanciamenti (che causano quindi più timeout, che causano un maggiore ribilanciamento e così via).

metadata.max.idle.ms 180000 > 5000 Controlla per quanto tempo il producer memorizza nella cache i metadati per un argomento inattiva. Se il tempo trascorso dall'ultima produzione di un argomento supera la durata di inattività dei metadati, i metadati dell'argomento vengono dimenticati e l'accesso successivo forza una richiesta di recupero dei metadati.
linger.ms > 0 Per gli scenari con velocità effettiva elevata, il valore di linger deve essere uguale al valore tollerabile più alto per sfruttare i vantaggi dell'invio in batch.
delivery.timeout.ms Impostare in base alla formula (request.timeout.ms + linger.ms) * retries.
compression.type none, gzip Attualmente è supportata solo la compressione gzip.

Solo configurazioni consumer

Le configurazioni dei consumer sono disponibili qui.

Proprietà Valori consigliati Intervallo consentito Note
heartbeat.interval.ms 3000 3000 è il valore predefinito e non deve essere modificato.
session.timeout.ms 30000 6000 .. 300000 Iniziare con 30000, aumentare se si riscontra un ribilanciamento frequente a causa di heartbeat mancanti.

Assicurarsi che il request.timeout.ms sia almeno il valore consigliato di 60000 e il session.timeout.ms sia almeno il valore consigliato di 30000. La presenza di queste impostazioni troppo bassa potrebbe causare timeout del consumer, che causano quindi ribilanciamenti (che causano quindi più timeout, che causano un maggiore ribilanciamento e così via).

max.poll.interval.ms 300000 (impostazione predefinita) >session.timeout.ms Usato per il timeout di ribilanciamento, quindi non deve essere impostato troppo basso. Deve essere maggiore di session.timeout.ms.

Proprietà di configurazione librdkafka

Il file di configurazione principale librdkafka (collegamento) contiene descrizioni estese per le proprietà descritte nelle sezioni seguenti.

Configurazioni producer e consumer

Proprietà Valori consigliati Intervallo consentito Note
socket.keepalive.enable true Necessario se si prevede che la connessione sia inattiva. Azure chiude l'inattività > TCP in ingresso 240.000 ms.
metadata.max.age.ms ~ 180000 < 240000 Può essere abbassato per raccogliere le modifiche ai metadati prima.

Solo configurazioni producer

Proprietà Valori consigliati Intervallo consentito Note
retries > 0 Il valore predefinito è 2147483647.
request.timeout.ms 30000 .. 60000 > 20000 L'impostazione predefinita di Hub eventi è di almeno 20.000 ms. librdkafka il valore predefinito è 5000, che può essere problematico. Anche se le richieste con valori di timeout inferiori vengono accettate, il comportamento del client non è garantito.
partitioner consistent_random Vedere la documentazione di librdkafka consistent_random è predefinito e migliore. Le chiavi vuote e Null vengono gestite idealmente per la maggior parte dei casi.
compression.codec none, gzip Attualmente è supportata solo la compressione gzip.

Solo configurazioni consumer

Proprietà Valori consigliati Intervallo consentito Note
heartbeat.interval.ms 3000 3000 è il valore predefinito e non deve essere modificato.
session.timeout.ms 30000 6000 .. 300000 Iniziare con 30000, aumentare se si riscontra un ribilanciamento frequente a causa di heartbeat mancanti.
max.poll.interval.ms 300000 (impostazione predefinita) >session.timeout.ms Usato per il timeout di ribilanciamento, quindi non deve essere impostato troppo basso. Deve essere maggiore di session.timeout.ms.

Note aggiuntive

Controllare la tabella seguente degli scenari di errore comuni correlati alla configurazione.

Sintomi Problema Soluzione
Errori di commit di offset a causa del ribilanciamento Il consumer è in attesa troppo lungo tra le chiamate a poll() e il servizio sta avviando l'utente fuori dal gruppo. Sono disponibili diverse opzioni:
  • Aumentare il timeout di elaborazione del polling (max.poll.interval.ms)
  • Ridurre le dimensioni del batch di messaggi per velocizzare l'elaborazione
  • Migliorare la parallelizzazione dell'elaborazione per evitare di bloccare consumer.poll()
L'applicazione di una combinazione dei tre è probabilmente più saggia.
Eccezioni di rete con velocità effettiva elevata Se si usa il client Java + max.request.size predefinito, le richieste potrebbero essere troppo grandi. Vedere Configurazioni Java menzionate in precedenza.

Passaggi successivi

Vedere Sottoscrizione di Azure e limiti, quote e vincoli dei servizi per le quote e i limiti di tutti i servizi Azure.