2015-01-13 12 views
24

Perché gli utenti si connettono a Zookeeper per recuperare le posizioni delle partizioni? E i produttori di kafka devono connettersi con uno dei broker per recuperare i metadati.Perché i consumatori di Kafka si connettono a Zookeeper ei produttori ottengono metadati dai broker?

Il mio punto è, qual è esattamente l'uso di Zookeeper quando ogni broker ha già tutti i metadati necessari per indicare ai produttori la posizione in cui inviare i propri messaggi? I broker non potrebbero inviare queste stesse informazioni ai consumatori?

Posso capire perché i broker hanno i metadati, per non dover effettuare una connessione a zookeeper ogni volta che viene inviato un nuovo messaggio. C'è una funzione che ha il guardiano dello zoo che mi manca? Sto trovando difficile pensare a una ragione per cui il guardiano dello zoo è davvero necessario all'interno di un cluster kafka.

risposta

38

Prima di tutto, lo spettatore è necessario solo per i consumatori di alto livello. SimpleConsumer non richiede che lo zookeeper funzioni.

Il motivo principale per cui un utente zookeeper è necessario per un consumatore di livello elevato è tenere traccia degli offset consumati e gestire il bilanciamento del carico.

Ora più in dettaglio.

Per quanto riguarda il tracciamento di offset, immaginate il seguente scenario: si avvia un consumatore, si consumano 100 messaggi e si spegne il consumatore. La prossima volta che avvierai il tuo consumatore, probabilmente vorrai riprendere dal tuo ultimo offset consumato (che è 100), e ciò significa che devi memorizzare l'offset massimo consumato da qualche parte. Ecco dove entra in gioco Zookeeper: memorizza gli offset per ogni gruppo/argomento/partizione. Quindi in questo modo la prossima volta che avvierai il tuo consumatore potrebbe chiedere "hey zookeeper, qual è l'offset da cui dovrei iniziare a consumare?". Kafka si sta attualmente muovendo verso la possibilità di memorizzare offset non solo in zookeeper, ma anche in altri archivi (per ora solo gli archivi zookeeper e kafka sono disponibili e non sono sicuro che lo storage kafka sia completamente implementato).

Per quanto riguarda il bilanciamento del carico, la quantità di messaggi prodotti può essere abbastanza grande per essere gestita da 1 macchina e probabilmente ad un certo punto si vorrà aggiungere potenza di calcolo. Diciamo che hai un argomento con 100 partizioni e per gestire questa quantità di messaggi hai 10 macchine. Ci sono diverse domande che si presentano qui:

  • come dovrebbero queste 10 macchine dividere le partizioni tra di loro?
  • cosa succede se una delle macchine muore?
  • cosa succede se si desidera aggiungere un'altra macchina?

E ancora, ecco dove entra in gioco Zookeeper: tiene traccia di tutti i consumatori nel gruppo e ogni utente di livello elevato è iscritto per le modifiche in questo gruppo. Il punto è che quando un consumatore appare o scompare, il guardiano dello zoo notifica a tutti i consumatori e fa scattare il bilanciamento in modo che divida le partizioni quasi allo stesso modo (ad es. Per bilanciare il carico). In questo modo garantisce se uno dei consumatori muore altri continueranno a elaborare partizioni che erano di proprietà di questo consumatore.

+2

Grazie per la risposta, questo chiarisce, è quello che ho indovinato, ma non ho potuto trovare da nessuna parte. Ho anche appena letto quella versione 0.9, i consumatori non useranno più il guardiano dello zoo, ed è usato solo dai broker per l'elezione dei leader ecc. – Luckl507

7

Con kafka 0.9+ è stata introdotta la nuova API Consumer. I nuovi consumatori non hanno bisogno di connessione a Zookeeper poiché il bilanciamento dei gruppi è fornito da kafka stesso.

Problemi correlati