2014-05-21 3 views
8

Sono nelle fasi iniziali di esplorazione Kafka, la versione 0.8.1.1.Kafka fallimento singolo utente in un gruppo

Sono gestire con successo il Gruppo Esempio dei consumatori, con più partizioni ed i suoi messaggi distribuzione tra i consumatori abbastanza bene.

Un banco di prova Volevo correre è quando un consumatore nel gruppo muore improvvisamente (ad esempio, kill -9). Quando lo faccio, mi aspettavo che il riequilibrio si verificasse, ma non sta accadendo. Quindi, posso fare una di queste cose?

  1. trigger ribilanciamento utilizzando API
  2. Configurare kafka attendere un certo tempo per l'attività dei consumatori e riequilibrare assumendo automaticamente stato chiuso ungracefully.

Il problema è che tutti i messaggi nelle partizioni assegnate al consumer morto rimangono in coda e non vengono mai elaborati fino a quando non si riequilibra.

+0

Ho provato le stesse modalità indicate, ma ancora di fronte stesso issue..can mi punta l'indizio http:? //stackoverflow.com/questions/39241872/kafka-common-consumerrebalancefailedexception-cant-rebalance-after -4 – Ratha

risposta

7

riequilibrio avverrà automaticamente che può essere impostato nella configurazione consumatore (zookeeper.session.timeout.ms). Come per la documentaion

zookeeper.session.timeout.ms: ZooKeeper timeout della sessione. Se il consumatore non riesce a battere il cuore in zookeeper per questo periodo di tempo, viene considerato morto e si verificherà un ribilanciamento. valore predefinito è 6000 ms

L'altro utente dal vivo nello stesso gruppo inizierà a ricevere il messaggio dopo l'intervallo di timeout.

configurare questo valore di timeout secondo le vostre esigenze.

anche un po 'di informazioni dalla documentazione Kafka:

riequilibrio dei consumatori non riesce (si vedrà ConsumerRebalanceFailedException): Ciò è dovuto a conflitti quando due consumatori stanno cercando di possedere la stessa partizione argomento. Il registro ti mostrerà cosa ha causato il conflitto (cerca "conflitto in").

  1. Se il tuo utente sottoscrive molti argomenti e il tuo server ZK è occupato, ciò potrebbe essere causato dai consumatori che non hanno abbastanza tempo per vedere una visione coerente di tutti i consumatori nello stesso gruppo. In tal caso, provare a incrementare rebalance.max.retries e rebalance.backoff.ms.
  2. Un altro motivo potrebbe essere che uno dei consumatori è difficile uccisi. Altri consumatori durante il ribilanciamento non si renderanno conto che il consumatore è andato dopo il tempo di zookeeper.session.timeout.ms. Nel caso, assicurarsi che rebalance.max.retries * rebalance.backoff.ms> zookeeper.session.timeout.ms.
+0

Grazie, stavo già facendo questo, avendo passato il documento molte volte. Ma probabilmente la "simulazione" dell'uccisione del mio codice non era abbastanza. Ho ucciso il thread di consumo da consumerThread.interrupt(); Probabilmente questo non ha interrotto la connessione con zk. Quando gestivo i consumatori come processi multipli e li uccidevo, funzionava perfettamente, cioè si verificava un riequilibrio. Grazie! – binit

+0

Ho provato lo stesso ma non ha risolto il mio problema. http://stackoverflow.com/questions/39241872/kafka-common-consumerrebalancefailedexception-cant-rebalance-after-4 – Ratha