Czy Zookeeper jest koniecznością dla Kafki?

147

W Kafce chciałbym używać tylko jednego brokera, jednego tematu i jednej partycji z jednym producentem i wieloma konsumentami (każdy konsument otrzymuje własną kopię danych od brokera). Biorąc to pod uwagę, nie chcę, aby koszty ogólne korzystania z Zookeepera; Czy nie mogę po prostu korzystać tylko z brokera? Dlaczego Zookeeper musi?

Paaji
źródło
12
Jednym z największych celów projektowych Kafki są wdrożenia klastrów. To jest problem, który rozwiązują i byłoby głupio tworzyć wersję bez ZK dla samodzielnego serwera. Mam wrażenie, że Kafka nie jest narzędziem do pracy, ale że byłoby lepiej po prostu za pomocą pliku wanilii ..
RickyA
5
Naprawdę chciałbym wiedzieć, co sfinalizowałeś? Ponieważ nie wybrałeś żadnej odpowiedzi, zakładam, że masz własne rozwiązanie tego problemu. Dzięki !
Karthikeyan
Jocko to golangowa implementacja Kafki bez zależności od zookeeper i pojedynczej instalacji binarnej
Arun Gopalpuri
1
Zookeeper został usunięty, zobacz odpowiedź poniżej - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi
1
tylko dodać, jeśli czytasz co zookeeper zrobi, masz pomysł -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Odpowiedzi:

136

Tak, Zookeeper jest wymagany do uruchomienia Kafki. Z dokumentacji Kafka Getting Started:

Krok 2: Uruchom serwer

Kafka używa zookeepera, więc musisz najpierw uruchomić serwer zookeepera, jeśli jeszcze go nie masz. Możesz użyć wygodnego skryptu dołączonego do kafki, aby uzyskać szybką i brudną instancję zookeeper z jednym węzłem.

Dlaczego, cóż, ludzie już dawno odkryli, że trzeba mieć jakiś sposób na koordynację zadań, zarządzanie stanem, konfigurację itp. W systemie rozproszonym. Niektóre projekty zbudowały własne mechanizmy (pomyśl o serwerze konfiguracji w klastrze podzielonym na fragmenty MongoDB lub węźle głównym w klastrze Elasticsearch). Inni zdecydowali się skorzystać z Zookeepera jako rozproszonego systemu koordynacji procesów ogólnego przeznaczenia. Tak więc Kafka, Storm, HBase, SolrCloud, żeby wymienić tylko kilka, używają Zookeepera do zarządzania i koordynacji.

Kafka to system rozproszony, stworzony do korzystania z Zookeepera. Fakt, że nie używasz żadnej z rozproszonych funkcji platformy Kafka, nie zmienia sposobu jej budowy. W każdym razie korzystanie z Zookeepera nie powinno powodować dużego obciążenia. Większe pytanie brzmi: dlaczego miałbyś użyć tego konkretnego wzorca projektowego - implementacja Kafka z jednym brokerem nie obejmuje wszystkich cech niezawodności klastra obsługującego wiele brokerów wraz z możliwością skalowania.

John Petrone
źródło
10
W rzeczywistości kafka zaprojektowana w taki sposób, że nawet w przypadku pojedynczego brokera jest nadal trybem rozproszonym, ale przy współczynniku replikacji 1 - nie będzie żadnych mechanizmów skrótów ani trybu specjalnego (i to jest dobre, właściwie).
om-nom-nom
2
Kafka 0.8.1 wymaga zk. Zastanawiam się, jeśli w Kafce nie ma warstwy abstrakcyjnej do pracy z systemem koordynacji, w jaki sposób można włączyć inny system koordynacji dla Kafki.
stanleyxu2005
Ważna aktualizacja stackoverflow.com/a/57328140/3438570
theodosis
67

Jak wyjaśnili inni, Kafka (nawet w najnowszej wersji) nie będzie działać bez Zookeepera.

Kafka używa Zookeepera do następujących celów:

Wybór kontrolera . Kontroler jest jednym z brokerów i jest odpowiedzialny za utrzymywanie relacji lider / obserwator dla wszystkich partycji. Kiedy węzeł zostaje zamknięty, to kontroler mówi innym replikom, aby stały się liderami partycji, aby zastąpić liderów partycji w węźle, który odchodzi. Zookeeper służy do wybierania kontrolera, upewnij się, że jest tylko jeden i wybierz nowy, jeśli ulegnie awarii.

Członkostwo w klastrze - jacy brokerzy żyją i są częścią klastra? jest to również zarządzane przez ZooKeeper.

Konfiguracja tematu - jakie tematy istnieją, ile partycji ma każdy z nich, gdzie są repliki, kto jest preferowanym liderem, jakie nadpisania konfiguracji są ustawione dla każdego tematu

(0.9.0) - Kwoty - ile danych może odczytywać i zapisywać każdy klient

(0.9.0) - Listy ACL - kto może czytać i pisać w jakim temacie (stary konsument wysokiego poziomu) - Które grupy konsumentów istnieją, kim są ich członkowie i jakie jest najnowsze przesunięcie każdej grupy z każdej partycji.

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

Jeśli chodzi o twój scenariusz, tylko jedna instancja brokera i jeden producent z wieloma konsumentami, możesz użyć popychacza do utworzenia kanału i wypchnąć wydarzenie do tego kanału, który konsument może subskrybować i udostępniać te wydarzenia. https://pusher.com/

Kevin Li
źródło
3
Czy chcesz edytować „najnowszą wersję” w aktualną wersję. Sprawia, że ​​twoja odpowiedź jest lepsza.
akauppi
Dodaję odniesienie, ostatni akapit jest oryginalnie ode mnie.
Kevin Li
54

Ważna aktualizacja - sierpień 2019:

Zależność ZooKeeper zostanie usunięta z Apache Kafka . Zobacz dyskusję wysokiego poziomu w KIP-500 : Zastąp ZooKeepera samodzielnie zarządzanym kworum metadanych .

Te wysiłki będą wymagały kilku wydań Kafki i dodatkowych KIP. Kafka Controllers przejmie zadania bieżących zadań ZooKeepera. Kontrolerzy wykorzystają zalety dziennika zdarzeń, który jest podstawową koncepcją firmy Kafka.

Niektóre zalety nowej architektury Kafka to prostsza architektura, łatwość obsługi i lepsza skalowalność, np. Zezwolenie na „nieograniczoną liczbę partycji”.

Kai Wähner
źródło
29

Zaktualizowano w listopadzie 2020 r

W najnowszej wersji (2.6.0) ZooKeeper jest nadal wymagane do działania platformy Kafka, ale w niedalekiej przyszłości ZooKeeper zostanie zastąpione samodzielnie zarządzanym kworum metadanych .

Zobacz szczegóły w zaakceptowanym KIP-500 .

Aleksander Iskuskowa
źródło
Co różni się tutaj od dotychczasowej odpowiedzi Kai ?
Naman
12

Kafka została stworzona do korzystania z Zookeepera. Nie ma przed tym ucieczki.

Kafka jest systemem rozproszonym i używa Zookeepera do śledzenia stanu węzłów klastra kafka. Śledzi również tematy Kafki, partycje itp.

Patrząc na twoje pytanie, wydaje się, że nie potrzebujesz Kafki. Możesz użyć dowolnej aplikacji obsługującej pub-sub, takiej jak Redis , Rabbit MQ lub rozwiązań hostowanych, takich jak Pub-nub .

Santosh Rout
źródło
12

IMHO Zookeeper nie jest narzutem, ale znacznie ułatwia życie.

Zasadniczo jest używany do utrzymania koordynacji między różnymi węzłami w klastrze. Jedną z najważniejszych rzeczy dla Kafki jest to, że używa zookeepera do okresowego zatwierdzania offsetów, aby w przypadku awarii węzła mógł wznowić od wcześniej zadeklarowanego offsetu (wyobraź sobie, że sam zajmujesz się tym wszystkim).

Zookeeper odgrywa również istotną rolę w wielu innych celach, takich jak wykrywanie lidera, zarządzanie konfiguracją, synchronizacja, wykrywanie, kiedy nowy węzeł dołącza lub opuszcza klaster itp.

Przyszłe wydania Kafki planują usunąć zależność od zookeeper, ale na razie jest to integralna część.

Oto kilka wierszy zaczerpniętych z ich strony FAQ:

Gdy kworum Zookeeper spadnie, brokerzy mogą doprowadzić do złego stanu i nie mogliby normalnie obsługiwać żądań klientów itp. Chociaż kiedy kworum Zookeeper odzyskuje zdrowie, brokerzy Kafka powinni być w stanie automatycznie wznowić normalny stan, nadal istnieje kilka przypadków narożnych czego nie mogą i konieczne jest twarde zabicie i odzyskanie, aby przywrócić go do normalności. W związku z tym zaleca się ścisłe monitorowanie klastra zookeeper i udostępnianie go tak, aby działał prawidłowo.

Więcej szczegółów znajdziesz tutaj

user2720864
źródło
13
Zookeeper to wielki ból głowy. W HBase. W Kafce. W Storm. W Kafce / ZK są znane mi od dawna błędy, które spowodowały, że mój zespół porzucił ją na rzecz RabbitMQ. Instalacja HBase wymaga czasu na rozwiązanie problemów z ZK. Jednak twoja odpowiedź dotycząca OP jest poprawna: ZK jest wymagane.
javadba
2
To prawda, że ​​istnieją błędy i problemy ze zgodnością wersji (przynajmniej z Kafką i ZK), ale głównym celem zookeepera jest zarządzanie tymi złożonymi zadaniami wymaganymi dla każdego systemu rozproszonego. na zk może nie być mądrym wezwaniem. Prawdopodobnie dlatego kafka próbuje zredukować zależności zk w późniejszych wersjach. Z innej strony uważam, że RabitMQ i Kafka mają bardzo różne filozofie projektowania i dążą do rozwiązywania różnych przypadków użycia, ale myślę, że to wykracza poza zakres tej dyskusji :)
user2720864
Tak, kafka jest lepsza w scenariuszach dużego obciążenia. Zdecydowaliśmy się robić RabbitMQ do / chyba, że ​​wyraźnie wymagamy tych zalet. Programowanie w RabbitMQ również było łatwiejsze: były trudne zależności wersji scala dla Kafki.
javadba
4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> nie z punktu widzenia administratora. Zk jest kawałkiem starej javy cruft. Na przykład ma długi nierozwiązany błąd polegający na tym, że nie stosuje się do ttl wpisu dns, więc nie rozwiązuje ponownie wpisu. Z okna znikają możliwości wymiany serwerów. Z radością wymieniłbym to na etcd.
RickyA
„Zdecydowaliśmy się robić RabbitMQ do / chyba, że ​​wyraźnie wymagamy tych zalet”. Chciałbym, żeby mój zespół był tak oświecony. IMHO, najwyraźniej nie mamy wystarczająco dużego obciążenia, aby uzasadnić Kafkę, ale i tak używamy Kafki :(
Pan Smith,
5

Zookeeper to system centralizacji i zarządzania dla dowolnego rodzaju systemów rozproszonych. System rozproszony to różne moduły oprogramowania działające w różnych węzłach / klastrach (mogą znajdować się w odległych geograficznie lokalizacjach), ale działające jako jeden system. Zookeeper ułatwia komunikację między węzłami, dzieląc konfiguracje między węzłami, śledzi, który węzeł jest liderem, który węzeł dołącza / opuszcza itp. Zookeeper to ten, który utrzymuje systemy rozproszone w rozsądku i zachowuje spójność. Zasadniczo Zookeeper jest platformą do orkiestracji.

Kafka to system rozproszony . I dlatego potrzebuje jakiejś orkiestracji dla swoich węzłów, które mogą być geograficznie odległe (lub nie).

Shree
źródło
4

Tak, Zookeeper jest konieczny dla Kafki. Ponieważ Zookeeper jest odpowiedzialny za rodzaj zarządzania klastrem Kafka. Zawiera listę wszystkich brokerów Kafka. Powiadamia Kafkę, jeśli któryś z brokerów ulegnie awarii, partycja ulegnie awarii, nowy broker jest aktywny lub partycja jest aktywna. Krótko mówiąc, ZK na bieżąco informuje każdego brokera Kafka o aktualnym stanie klastra Kafka.

Następnie każdy klient Kafka (producent / konsument) musi tylko połączyć się z dowolnym pojedynczym brokerem, a ten broker ma wszystkie metadane zaktualizowane przez Zookeepera, więc klient nie musi przejmować się bólem głowy związanym z odkrywaniem brokera.

CPATIL9767
źródło
3

Oprócz zwykłego przesyłania komunikatów ładunku istnieje wiele innych komunikatów, które mają miejsce w kafce, na przykład

  • Zdarzenia związane z brokerami żądającymi członkostwa w klastrze.
  • Wydarzenia związane z dostępnością brokerów.
  • Pobieranie ustawień konfiguracji bootstrap.
  • Wydarzenia związane z aktualizacjami kontrolera i lidera.
  • Pomoc w aktualizacjach statusu, takich jak aktualizacje pulsu.

Sam Zookeeper jest systemem rozproszonym składającym się z wielu węzłów w zespole. Zookeeper to scentralizowana usługa do przechowywania takich metadanych.

Amulya Holla
źródło
1

Ten artykuł wyjaśnia rolę Zookeeper w Kafce. Wyjaśnia, dlaczego kafka jest bezpaństwowa i jak zookeper odgrywa ważną rolę w rozproszonej naturze kafki (i wielu innych systemów rozproszonych).

J. P
źródło
1

Prośba o uruchomienie Kafki bez Zookeepera wydaje się być dość powszechna. Biblioteka Charlatan zajmuje się tym.

Zgodnie z opisem, Charlatan jest mniej więcej kpiną dla Zookeepera, dostarczającą usługi Zookeeper albo wspierane przez inne narzędzia albo przez bazę danych.

Zetknąłem się z tą biblioteką, mając do czynienia z głównym produktem autorów biblioteki Charlatan; tam działa dobrze…

tquadrat
źródło
0

po pierwsze

Apache ZooKeeper to rozproszony sklep, który służy do świadczenia usług konfiguracyjnych i synchronizacyjnych w wysoce dostępny sposób. W nowszych wersjach Kafki wykonano prace, aby klienci klienta nie zapisywali informacji o tym, jak daleko zużyli wiadomości (zwane przesunięciami) w ZooKeeper. .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Podczas gdy Kafka zapewnia odporność na błędy i odporność , potrzebne jest coś, aby zapewnić wymagana koordynacja, a ZooKeeper włącza ten element całego systemu.

Po drugie

Jednym z przykładów praktycznego zastosowania ZooKeepera w ekosystemie Kafki jest ustalenie, kto jest liderem partycji .

Zookeeper would work if there was even a single broker. 

Te pochodzą z książki Kafka w akcji . Zdjęcie pochodzi z tego kursu

fgul
źródło