Zookeeper è un must per Kafka?


135

In Kafka, vorrei utilizzare solo un singolo broker, un singolo argomento e una singola partizione con un produttore e più consumatori (ogni consumatore riceve la propria copia di dati dal broker). Dato questo, non voglio il sovraccarico di usare Zookeeper; Non posso usare solo il broker? Perché è necessario un Zookeeper?


12
Uno dei maggiori obiettivi di progettazione di Kafka sono le distribuzioni di cluster. Questo è il problema che stanno risolvendo e sarebbe sciocco creare una versione senza ZK per un server autonomo. Ho la sensazione che kafka non sia lo strumento per il tuo lavoro, ma che sarebbe meglio usare semplicemente un file alla vaniglia ..
RickyA

5
Mi piacerebbe davvero sapere cosa hai finalizzato? Dato che non hai scelto nessuna delle risposte, suppongo che tu abbia avuto la tua soluzione per questo. Grazie !
Karthikeyan,

Jocko è un'implementazione golang di Kafka senza dipendenza zookeeper e installazione binaria singola
Arun Gopalpuri

1
Zookeeper è stato rimosso, vedere la risposta qui sotto - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi

1
solo per aggiungere, se leggi cosa fa lo zookeeper, otterrai l'idea -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller,

Risposte:


128

Sì, Zookeeper è necessario per eseguire Kafka. Dalla documentazione introduttiva di Kafka:

Passaggio 2: avviare il server

Kafka usa zookeeper quindi devi prima avviare un server zookeeper se non ne hai già uno. È possibile utilizzare lo script di utilità fornito con kafka per ottenere un'istanza zookeeper a nodo singolo rapida e sporca.

Perché, molto tempo fa le persone hanno scoperto che è necessario avere un modo per coordinare attività, gestione dello stato, configurazione, ecc. Attraverso un sistema distribuito. Alcuni progetti hanno creato i propri meccanismi (si pensi al server di configurazione in un cluster condiviso MongoDB o a un nodo Master in un cluster Elasticsearch). Altri hanno scelto di sfruttare Zookeeper come sistema di coordinamento del processo distribuito per scopi generali. Quindi Kafka, Storm, HBase, SolrCloud per citarne solo alcuni usano Zookeeper per aiutare a gestire e coordinare.

Kafka è un sistema distribuito ed è costruito per usare Zookeeper. Il fatto che non si stia utilizzando nessuna delle funzionalità distribuite di Kafka non cambia il modo in cui è stato creato. In ogni caso non dovrebbe esserci molto overhead dall'uso di Zookeeper. Una domanda più grande è perché dovresti utilizzare questo particolare modello di progettazione: un'implementazione di un singolo broker di Kafka perde tutte le funzionalità di affidabilità di un cluster multi-broker insieme alla sua capacità di ridimensionamento.


9
In effetti, kafka ha progettato in modo tale che anche in un singolo broker sia ancora in modalità distribuita, ma con un fattore di replica di 1 - non ci saranno meccanismi di scelta rapida o modalità speciale (e questo è buono, in realtà).
om-nom-nom

2
Kafka 0.8.1 richiede zk. E mi chiedo, se non esiste uno strato astratto in Kafka per lavorare con un sistema di coordinamento, come può essere abilitato un altro sistema di coordinamento in Kafka.
Stanleyxu2005,

Aggiornamento importante stackoverflow.com/a/57328140/3438570
teodosi

64

Come spiegato da altri, Kafka (anche nella versione più recente) non funzionerà senza Zookeeper.

Kafka utilizza Zookeeper per quanto segue:

Elezione di un controller . Il controller è uno dei broker ed è responsabile del mantenimento della relazione leader / follower per tutte le partizioni. Quando un nodo si spegne, è il controller che dice ad altre repliche di diventare leader della partizione per sostituire i leader della partizione sul nodo che sta andando via. Zookeeper viene utilizzato per eleggere un controller, assicurarsi che ce ne sia solo uno ed eleggerne uno nuovo in caso di crash.

Appartenenza al cluster : quali broker sono attivi e fanno parte del cluster? anche questo è gestito tramite ZooKeeper.

Configurazione argomento : quali argomenti esistono, quante partizioni hanno ciascuna, dove sono le repliche, chi è il leader preferito, quali sostituzioni di configurazione sono impostate per ciascun argomento

(0.9.0) - Quote : quanti dati è consentito a ciascun client di leggere e scrivere

(0.9.0) - ACL - chi è autorizzato a leggere e scrivere su quale argomento (vecchio consumatore di alto livello) - Quali gruppi di consumatori esistono, chi sono i loro membri e qual è l'ultimo offset ottenuto da ciascun gruppo da ciascuna partizione.

[da https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira ]

Per quanto riguarda il tuo scenario, solo un'istanza di broker e un produttore con più consumatori, puoi utilizzare il pulsante per creare un canale e inviare l'evento a quel canale a cui il consumatore può iscriversi e consegnare quegli eventi. https://pusher.com/


3
Desideri modificare "la versione più recente" nella versione attuale. Migliora la tua età di risposta.
akauppi,


Aggiungo il riferimento, l'ultimo paragrafo è originario di me.
Kevin Li,

47

Aggiornamento importante - agosto 2019:

La dipendenza ZooKeeper verrà rimossa da Apache Kafka . Guarda la discussione di alto livello in KIP-500 : Sostituisci ZooKeeper con un quorum di metadati auto-gestito .

Questi sforzi richiederanno alcune versioni di Kafka e KIP aggiuntivi. I controller Kafka si occuperanno delle attività correnti di ZooKeeper. I controller sfrutteranno i vantaggi del registro eventi, che è un concetto chiave di Kafka.

Alcuni vantaggi della nuova architettura Kafka sono un'architettura più semplice, facilità d'uso e una migliore scalabilità (ad esempio consentire "partizioni illimitate".


17

Aggiornato a luglio 2020

Per l'ultima versione (2.5.0) ZooKeeper è ancora necessario per eseguire Kafka, ma nel prossimo futuro ZooKeeper verrà sostituito con un Quorum di metadati auto-gestito .

Vedi i dettagli nel KIP-500 accettato .


11

Kafka è costruito per usare Zookeeper. Non c'è scampo da quello.

Kafka è un sistema distribuito e utilizza Zookeeper per tenere traccia dello stato dei nodi del cluster kafka. Tiene inoltre traccia degli argomenti, delle partizioni ecc. Di Kafka

Guardando la tua domanda, sembra che tu non abbia bisogno di Kafka. È possibile utilizzare qualsiasi applicazione che supporti pub-sub come Redis , Rabbit MQ o soluzioni ospitate come Pub-nub .


9

IMHO Zookeeper non è un problema, ma ti semplifica la vita.

Viene sostanzialmente utilizzato per mantenere il coordinamento tra diversi nodi in un cluster. Una delle cose più importanti per Kafka è che usa lo zookeeper per eseguire periodicamente gli offset in modo che in caso di fallimento del nodo possa riprendere dall'offset precedentemente impegnato (immagina di occuparti di tutto questo da solo).

Zookeeper svolge anche un ruolo vitale per servire molti altri scopi, come il rilevamento dei leader, la gestione della configurazione, la sincronizzazione, il rilevamento di un nuovo nodo che si unisce o esce dal cluster, ecc.

Le versioni future di Kafka stanno pianificando di rimuovere la dipendenza dal guardiano dello zoo, ma per ora è parte integrante di essa.

Ecco alcune righe tratte dalla loro pagina FAQ:

Una volta che il quorum di Zookeeper è inattivo, i broker potrebbero risultare in uno stato negativo e normalmente non possono soddisfare le richieste dei clienti, ecc. Anche se quando il quorum di Zookeeper viene ripristinato, i broker Kafka dovrebbero essere in grado di riprendere automaticamente allo stato normale, ci sono ancora alcuni casi angolari non possono ed è necessario un duro kill-and-recovery per riportarlo alla normalità. Pertanto si consiglia di monitorare attentamente il cluster zookeeper e di eseguirne il provisioning in modo che sia performante.

Per maggiori dettagli controlla qui


13
Zookeeper è un grosso mal di testa. In HBase. In Kafka. In Storm. Ci sono bug di vecchia data di cui sono a conoscenza in Kafka / ZK che hanno causato l'abbandono del mio team a favore di RabbitMQ. L'installazione di HBase richiede tempo per affrontare i problemi di ZK. Tuttavia, la risposta relativa all'OP È corretta: è richiesto ZK.
javadba,

2
È vero che ci sono problemi di compatibilità con bug e versioni (almeno con Kafka e ZK) ma l'intenzione principale di zookeeper è di gestire quelle complesse attività richieste per qualsiasi sistema distribuito. Sono d'accordo che la gestione e l'ottimizzazione del cluster zk richiedono un certo sforzo e dipendono fortemente su zk potrebbe non essere una chiamata saggia. Probabilmente è per questo che Kafka sta cercando di ridurre le dipendenze di zk nelle versioni successive. Da un altro punto di vista, credo che RabitMQ e Kafka abbiano filosofie progettuali molto diverse e mirano a risolvere diversi casi d'uso, ma penso che
vada

Sì, kafka è superiore per scenari con carichi elevati. Abbiamo deciso di fare RabbitMQ fino a quando non richiediamo chiaramente quei vantaggi. Anche la programmazione in RabbitMQ è stata più semplice: per Kafka c'erano difficili dipendenze dalla versione scala.
Javavba,

4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> non dal punto di vista di un sysop. Zk è un pezzo di vecchia java cruft arretrata. Ad esempio, ha un bug in sospeso da tempo in quanto non aderisce al ttl di una voce dns, quindi non risolverà nuovamente una voce. Fuori dalla finestra vanno le possibilità di scambio del server. Lo scambierei felicemente per etcd.
Ricky,

"Abbiamo deciso di fare RabbitMQ fino a quando non richiediamo chiaramente quei vantaggi". Vorrei che il mio team fosse illuminato in questo modo. IMHO, chiaramente non abbiamo un carico sufficiente per giustificare Kafka, ma stiamo comunque usando Kafka :(
Mr Smith,

4

Zookeeper è un sistema di centralizzazione e gestione per qualsiasi tipo di sistema distribuito. Il sistema distribuito è costituito da diversi moduli software in esecuzione su nodi / cluster diversi (potrebbe trovarsi in posizioni geograficamente distanti) ma in esecuzione come un unico sistema. Zookeeper facilita la comunicazione tra i nodi, condividendo le configurazioni tra i nodi, tiene traccia di quale nodo è leader, quale nodo si unisce / lascia, ecc. Zookeeper è colui che mantiene sani i sistemi distribuiti e mantiene la coerenza. Zookeeper è fondamentalmente una piattaforma di orchestrazione.

Kafka è un sistema distribuito . E quindi ha bisogno di una sorta di orchestrazione per i suoi nodi che potrebbe essere geograficamente distante (o no).


3

Sì, Zookeeper deve essere progettato per Kafka. Perché Zookeeper ha la responsabilità di gestire il cluster Kafka. Contiene un elenco di tutti i broker Kafka. Avvisa Kafka, se un broker si interrompe o se la partizione non funziona o il nuovo broker è attivo o la partizione è attiva. In breve, ZK tiene aggiornato ogni broker Kafka sullo stato corrente del cluster Kafka.

Quindi ogni client Kafka (produttore / consumatore) deve semplicemente connettersi con qualsiasi singolo broker e quel broker ha tutti i metadati aggiornati da Zookeeper, quindi il client non deve preoccuparsi del mal di testa del broker discovery.


3

Oltre al solito trasferimento di messaggi payload, ci sono molte altre comunicazioni che avvengono in kafka, come

  • Eventi relativi ai broker che richiedono l'appartenenza al cluster.
  • Eventi relativi alla disponibilità di broker.
  • Ottenere configurazioni di configurazione bootstrap.
  • Eventi relativi agli aggiornamenti di controller e leader.
  • Aiuta gli aggiornamenti di stato come gli aggiornamenti Heartbeat.

Zookeeper stesso è un sistema distribuito costituito da più nodi in un insieme. Zookeeper è un servizio centralizzato per il mantenimento di tali metadati.


1

Questo articolo spiega il ruolo di Zookeeper in Kafka. Spiega come kafka sia apolide e come zookeper abbia un ruolo importante nella natura distribuita di kafka (e molti altri sistemi distribuiti).


1

La richiesta di eseguire Kafka senza Zookeeper sembra essere abbastanza comune. La biblioteca Charlatan si rivolge a questo.

Secondo la descrizione, Charlatan è più o meno una beffa per Zookeeper, fornendo i servizi Zookeeper supportati da altri strumenti o da un database.

Ho incontrato quella biblioteca quando ho avuto a che fare con il prodotto principale degli autori per la biblioteca di Charlatan; lì funziona benissimo ...


0

in primo luogo

Apache ZooKeeper è un negozio distribuito che viene utilizzato per fornire servizi di configurazione e sincronizzazione in modo altamente disponibile. Nelle versioni più recenti di Kafka, il lavoro è stato fatto affinché i consumatori dei clienti non memorizzassero informazioni su quanto consumavano i messaggi (chiamati offset) in ZooKeeper .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Mentre Kafka fornisce tolleranza agli errori e resilienza , è necessario qualcosa per fornire coordinamento necessario e ZooKeeper abilita quel pezzo di sistema generale.

in secondo luogo

Concordare su chi sia il leader di una partizione è un esempio dell'applicazione pratica di ZooKeeper all'interno dell'ecosistema Kafka.

Zookeeper would work if there was even a single broker. 

Questi sono tratti dal libro di Kafka In Action . L'immagine proviene da questo corso

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.