2014-12-20 7 views
7

Abbiamo un'applicazione che un utente legge un messaggio e il thread fa un certo numero di cose, inclusi gli accessi al database prima che un messaggio venga prodotto su un altro argomento. Il tempo tra il consumo e la produzione del messaggio sul thread può richiedere diversi minuti. Una volta che il messaggio viene prodotto su un nuovo argomento, viene eseguito un commit per indicare che abbiamo finito con il lavoro sul messaggio della coda dei consumatori. Il commit automatico è disabilitato per questo motivo.sessioni di consumo kafka timeout

sto usando il consumatore di alto livello e quello che sto notando è che zookeeper e Kafka sessioni di un timeout a causa sta prendendo troppo a lungo prima di fare qualsiasi cosa in coda dei consumatori in modo da Kafka finisce riequilibrio ogni volta che il filo risale al leggi di più dalla coda dei consumatori e inizia a richiedere molto tempo prima che un consumatore legga un nuovo messaggio dopo un po '.

Posso impostare un timeout di sessione per lo spettatore molto alto per non creare un problema, ma poi devo regolare di conseguenza i parametri di riequilibrio e kafka non rileverà un nuovo utente per un po 'tra gli altri effetti collaterali.

Quali sono le opzioni per risolvere questo problema? C'è un modo per battere il cuore di kafka e zookeeper per mantenere entrambi felici? Ho ancora questi stessi problemi se dovessi usare un semplice consumatore?

+0

È più probabile che tu ti aiuti se spieghi il tuo problema. Dicendo che "vorresti ottenere un feedback" potrebbe far chiudere la tua domanda. Stack Overflow non è un forum; apprezziamo essere concisi e al punto. –

risposta

3

Sembra che i problemi si riducano a fare affidamento sul consumatore di alto livello per gestire l'offset dell'ultima lettura. L'utilizzo di un semplice consumatore risolverebbe il problema poiché si controlla la persistenza di quell'offset. Si noti che tutto il commit di alto livello del cliente fa è memorizzare l'ultimo offset letto in zookeeper. Non c'è altra azione intrapresa e il messaggio che hai appena letto è ancora lì nella partizione ed è leggibile da altri utenti.

Con il consumatore semplice di kafka, si ha molto più controllo su quando e come avviene lo stoccaggio offset. Puoi persino mantenere quell'offset da qualche parte oltre a Zookeeper (una base dati, per esempio).

La cattiva notizia è che mentre il semplice consumatore è di per sé più semplice del consumatore di alto livello, c'è molto più lavoro da fare in termini di codice per farlo funzionare. Dovrai anche scrivere codice per accedere a più partizioni - qualcosa che il consumatore di alto livello fa molto bene per te.

+0

Ciao, sto affrontando lo stesso problema, ma nella nuova versione di kafka, il consumatore semplice è ammortizzato. Come si fa ora? – pg20

0

Penso che il problema sia il metodo di sondaggio del consumatore per attivare la richiesta heartbeat del consumatore. E quando aumenti session.timeout. Il battito del cuore del consumatore non raggiungerà il coordinatore. A causa di questo battito cardiaco saltato, il coordinatore contrassegna il consumatore morto. E anche il ricongiungimento del consumatore è molto lento, specialmente nel caso del singolo consumatore.

ho affrontato un problema simile e risolvere che devo cambiare seguente parametro nelle proprietà di configurazione di consumo

session.timeout.ms = request.timeout.ms = più di timeout di sessione

anche devi aggiungere la seguente proprietà in server.properties al nodo broker kafka. group.max.session.timeout.ms =

È possibile visualizzare il seguente collegamento per ulteriori dettagli. http://grokbase.com/t/kafka/users/16324waa50/session-timeout-ms-limit