47

In Kafka, vorrei utilizzare solo un singolo broker, un singolo argomento e una singola partizione con un produttore e più utenti (ogni consumatore riceve la propria copia dei dati dal broker). Detto questo, non voglio il sovraccarico dell'uso di Zookeeper; Non posso usare solo il broker? Perché un Zookeeper deve?Kafka: Zookeeper è un must?

+4

Uno dei maggiori obiettivi di progettazione di Kafka sono implementazioni di cluster. Questo è il problema che stanno risolvendo, e sarebbe sciocco creare una versione zk-less per un server standalone. Ho la sensazione che kafka non sia lo strumento per il tuo lavoro, ma che sarebbe meglio usare solo un file vanilla .. – RickyA

+1

Mi piacerebbe davvero sapere cosa hai finalizzato? Dal momento che non hai scelto nessuna risposta, presumo tu abbia avuto la tua soluzione per questo. Grazie ! – Karthikeyan

risposta

3

Il guardiano dello zoo IMHO non è un overhead, ma rende la vita molto più facile.

Viene utilizzato fondamentalmente per mantenere il coordinamento tra diversi nodi in un cluster, una delle cose più importanti per kafka è l'utilizzo di zookeeper per eseguire periodicamente il commit dell'offset in modo che in caso di errore del nodo possa riprendere dall'offset precedentemente impegnato (immagina di prenderti cura di tutto questo da solo). Zookeeper svolge anche un ruolo fondamentale per servire tanti altri scopi come il rilevamento di leader, gestione della configurazione, sincronizzazione, rilevamento quando un nuovo nodo si unisce o lascia il cluster, ecc.

Le versioni future di kafka prevedono di rimuovere la dipendenza da zookeeper ma fin d'ora ne è parte integrante.

Qui è poche righe tratto dal loro FAQ pagina

Una volta che il numero legale Zookeeper è giù, broker potrebbe risultare in un cattivo stato e non poteva normalmente servire le richieste dei client, ecc Anche se quando Zookeeper quorum recupera, il I broker di Kafka dovrebbero essere in grado di riprendere automaticamente lo stato normale, ci sono ancora alcuni casi d'angolo che non possono e un hard-and-recovery è necessario per riportarlo alla normalità. Quindi si raccomanda di monitorare da vicino il cluster di zookeeper e di eseguirne il provisioning in modo che sia performante.

per maggiori dettagli si here

+7

Zookeeper è un grosso mal di testa. In HBase. A Kafka. In Storm. Di Kafka/ZK sono a conoscenza di bug di vecchia data che hanno causato l'abbandono della mia squadra in favore di RabbitMQ. L'installazione di HBase richiede tempo per affrontare i problemi ZK. Tuttavia la tua risposta relativa all'OP è corretta: ZK è richiesto. – javadba

+1

Vero che ci sono problemi di compatibilità di versione e bug (almeno con Kafka e ZK) ma l'intenzione principale di zookeeper è quella di gestire le complesse attività richieste per qualsiasi sistema distribuito. Sono d'accordo che la gestione e la messa a punto del cluster zk richiedono qualche sforzo e pesantemente su zk potrebbe non essere una chiamata saggia.Probabilmente questo è il motivo per cui kafka sta cercando di ridurre le dipendenze zk nelle versioni successive. Su una nota diversa, credo che RabitMQ e Kafka abbiano filosofie progettuali molto diverse e mirino a risolvere diversi casi d'uso, ma penso che esuli dallo scopo di questa discussione :) – user2720864

+0

Sì, kafka è superiore per gli scenari di alto carico. Abbiamo deciso di fare RabbitMQ fino a quando non avremo chiaramente bisogno di questi vantaggi. Anche la programmazione in RabbitMQ è stata più semplice: ci sono state difficili dipendenze per la versione scala per Kafka. – javadba

52

Sì, Zookeeper è necessaria per l'esecuzione di Kafka. Dalla documentazione Kafka Per iniziare:

Fase 2: Avviare il server

Kafka usa Zookeeper quindi è necessario avviare prima un server guardiano dello zoo se non ne hai già uno. È possibile utilizzare lo script di convenienza impacchettato con kafka per ottenere un'istanza di zookeeper single-node rapida e sporca.

Quanto al perché, così la gente molto tempo fa ha scoperto che è necessario disporre di un modo per le attività di coordinamento, la gestione dello stato, la configurazione, ecc attraverso un sistema distribuito. Alcuni progetti hanno costruito i propri meccanismi (si pensi al server di configurazione in un cluster semplificato 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 generici. Quindi Kafka, Storm, HBase, SolrCloud per nominare solo alcuni Zookeeper tutti per aiutare a gestire e coordinare.

Kafka è un sistema distribuito ed è progettato per utilizzare Zookeeper. Il fatto che tu non stia utilizzando nessuna delle funzionalità distribuite di Kafka non cambia il modo in cui è stato creato. In ogni caso non ci dovrebbe essere molto sovraccarico dall'uso di Zookeeper. Una domanda più importante è il motivo per cui dovresti utilizzare questo particolare modello di progettazione: una singola implementazione di broker di Kafka non comprende tutte le funzionalità di affidabilità di un cluster multi-broker insieme alla sua capacità di scalare.

+5

In effetti, kafka è stato progettato in modo tale che anche in un singolo broker ** è ancora ** modalità distribuita, ma con il fattore di replicazione di 1 - non ci saranno meccanismi di scorciatoia o modalità speciale (e questo è buono, in realtà) –

+2

Kafka 0.8.1 richiede zk e mi chiedo se non ci sia un livello astratto in Kafka con cui lavorare un sistema di coordinamento, come può essere abilitato un altro sistema di coordinamento a Kafka. – stanleyxu2005

4

Kafka è progettato per utilizzare Zookeeper. Non c'è modo di sfuggire a questo.

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

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.

15

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

Kafka utilizza Zookeeper consultato:

eleggere un controllore. Il controller è uno dei broker ed è responsabile del mantenimento della relazione tra leader e follower per tutte le partizioni. Quando un nodo si spegne, è il controller che dice ad altre repliche di diventare leader di partizione per sostituire i leader di partizione sul nodo che sta andando via. Zookeeper è usato per eleggere un controller, assicurati che ce ne sia uno solo e ne elegga uno nuovo se si blocca.

appartenenza al cluster - quali broker sono vivi e fanno parte del cluster? questo è anche gestito tramite ZooKeeper.

argomento di configurazione - che esistono argomenti, quante partizioni ognuno ha, dove sono le repliche, che è il capo preferito, quale configurazione override vengono impostati per ogni argomento

(0.9.0) - Quote - la quantità di dati ogni cliente ha permesso di leggere e scrivere

(0.9.0) - ACL - chi ha il permesso di leggere e scrivere su quale argomento (vecchio alto livello di consumo) - che esistono gruppi di consumatori, chi sono i loro membri e quali sono gli ultimi et ogni gruppo ha preso da ogni partizione.

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

Per quanto riguarda lo scenario, una sola istanza broker e un produttore con consumatori multipla, u possibile utilizzare spinta per creare un canale, e spingere evento per quel canale che consumatore può sottoscrivere e consegnare quelle eventi. https://pusher.com/

+1

Vuoi modificare "la versione più recente" nella versione attuale.Mostra l'età di risposta migliore – akauppi

+3

hai copiato la risposta da https: //www.quora .com/What-is-the-actual-ruolo-di-ZooKeeper-in-Kafka/risposta/Gwen-Shapira –

+0

Aggiungo il riferimento, l'ultimo paragrafo è originariamente da me. –

3

Jocko è un'implementazione golang di Kafka senza guardiano dello zoo dipendenza & singolo binario installare

Problemi correlati