2015-06-22 2 views
11

Sono un nuovo utente di Kafka e ci gioco da circa 2-3 settimane. Credo che al momento capisco bene come funziona Kafka per la maggior parte, ma dopo aver tentato di giocare e progettare il mio consumatore Kafka (questo è oscuro ma sto seguendo le linee guida per il nuovo KafkaConsumer che si suppone essere disponibile per v 0.9, che è disponibile sul repository "trunk" atm) Ho riscontrato problemi di latenza da un argomento se ho più utenti con lo stesso groupID.Che cosa è esattamente Kafka Rebalancing?

In questa configurazione, la mia console registra costantemente i problemi relativi a un "trigger di ribilanciamento". I riequilibri si verificano quando aggiungo nuovi consumatori a un gruppo di consumatori e vengono attivati ​​per determinare quale istanza del consumatore nello stesso groupID otterrà quali partizioni o quali riequilibri vengono utilizzati per qualcos'altro interamente?

Ho anche imbattuto in questo passaggio da https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design e io proprio non riesco a capirlo, quindi se qualcuno potesse aiutarmi a capirci qualcosa che sarebbe molto apprezzato:

Riequilibrio è il processo in cui un gruppo di istanze di consumatori (appartenenti allo stesso gruppo) coordinano per possedere un insieme di partizioni degli argomenti a cui il gruppo è iscritto a vicenda, escluso a vicenda . Alla fine di un'operazione di ribilanciamento riuscita per un gruppo di consumatori, ogni partizione per tutti gli argomenti sottoscritti sarà di proprietà di un'unica istanza del consumatore all'interno del gruppo. Il modo di riequilibrare funziona come segue. Ogni broker viene eletto come coordinatore per un sottoinsieme dei gruppi di consumatori . Il coordinatore del coordinatore per un gruppo è responsabile per l'orchestrazione di un'operazione di ribilanciamento sull'appartenenza al gruppo di consumatori modifiche o modifiche alle partizioni per gli argomenti sottoscritti. È anche responsabile della comunicazione della configurazione della proprietà di partizione risultante a tutti gli utenti del gruppo sottoposto a un'operazione di ribilanciamento .

risposta

22

Quando un nuovo consumatore si unisce a un gruppo di consumatori, il gruppo di consumatori tenta di "riequilibrare" il carico per assegnare le partizioni a ciascun consumatore. Se il gruppo di consumatori cambia mentre questo incarico si svolge, il ribilanciamento fallirà e riproverà. Questa impostazione controlla il numero massimo di tentativi prima di rinunciare.

il comando per questo è: rebalance.max.retries ed è impostato su 4 per impostazione predefinita.

anche, che potrebbe accadere se la seguente è vera:

ZooKeeper timeout della sessione. Se il consumatore non raggiunge il battito cardiaco su ZooKeeper per questo periodo di tempo, viene considerato morto e si verificherà un ribilanciamento.

Spero che questo aiuti!

+0

George, questo è stato molto utile, grazie! Come follow up: recentemente stavo sperimentando un argomento con una sola partizione. Ho scritto su questo argomento e ne ho consumato da un consumatore con un gruppo. Successivamente, ho tentato di utilizzare nuovamente questo argomento aggiungendo che un secondo consumatore appartiene allo stesso gruppo del primo - questo innesca un ribilanciamento (nel mio caso) che mi ha causato a volte tra 5-10 secondi di latenza - perché? Zookeeper non sta solo riequilibrando una partizione tra due istanze di consumo nello stesso gruppo che finisce per essere un guardiano dello zoo dando solo un'istanza alla partizione? –

+1

Ciao Jeff, è stato un piacere! Penso che questo problema potrebbe accadere perché una partizione argomento è l'unità più piccola che distribuisce i messaggi tra i consumatori nello stesso gruppo di consumatori. Quindi, se il numero di consumatori è maggiore del numero totale di partizioni in un cluster Kafka (tra tutti i broker), alcuni consumatori non otterranno mai alcun dato. La soluzione è aumentare il numero di partizioni sul broker. –

+1

Un altro potenziale problema è quando più argomenti vengono consumati nello stesso connettore consumatore. Internamente, c'è una coda in memoria per ogni argomento, che alimenta gli iteratori del consumatore. Esiste un singolo thread fetcher per broker che emette richieste di richiamo multiplo per tutti gli argomenti. Il thread fetcher esegue iterazioni sui dati recuperati e tenta di inserire i dati per argomenti diversi nella propria coda in memoria. Se uno dei consumatori è lento, alla fine la coda in memoria corrispondente sarà piena. Di conseguenza, il thread del fetcher si bloccherà sul mettere i dati in quella coda. –

2

Ogni consumatore in un gruppo di consumatori è assegnato a una o più partizioni argomento esclusivamente e Riequilibrio è la riassegnazione della proprietà delle partizioni tra i consumatori.

Un ribilanciamento accade quando:

  • un consumatore entra nel gruppo
  • un consumatore spegne pulito
  • un consumatore è considerato DEAD dal coordinatore gruppo. Ciò può accadere dopo un arresto anomalo o quando il consumatore è impegnato con un'elaborazione di lunga durata, il che significa che nessun heartbeat è stato inviato nel frattempo dall'utente al coordinatore del gruppo nell'intervallo di sessione configurato
  • nuove partizioni vengono aggiunte


Essendo un coordinatore gruppo (uno dei mediatori del cluster) e leader gruppo (primo consumatore che si unisce a un gruppo) designato per un gruppo di consumatori, ribilanciamento possono essere più o meno descritto come segue:

  • il leader riceve un elenco di tutti i consumatori nel gruppo del coordinatore gruppo (questo includerà tutti i consumatori che hanno inviato un battito cardiaco di recente e che sono pertanto considerati vivo) ed è responsabile per l'assegnazione di un sottoinsieme di partizioni per ogni consumatore.
  • Dopo aver deciso l'assegnazione di partizione (Kafka ha un paio incorporato criteri di assegnazione delle partizioni), il leader gruppo invia l'elenco delle assegnazioni al coordinatore gruppo, che invia questo informazioni a tutti i consumatori.


Questo vale per Kafka 0.9, ma sono abbastanza sicuro per le versioni più recenti è ancora valido.