Dlaczego konsumenci Kafki łączą się z zookeeperem, a producenci otrzymują metadane od brokerów?

Dlaczego konsumenci łączą się z zookeeperem, aby odzyskać lokalizacje partycji? A producenci Kafki muszą połączyć się z jednym z pośredników, aby odzyskać metadane.

Chodzi mi o to, jaki jest dokładnie użytek z zookeeper, gdy każdy broker ma już wszystkie niezbędne metadane, aby powiedzieć producentom lokalizację, aby wysyłali swoje wiadomości? Czy brokerzy nie mogli wysłać tych samych informacji do konsumentów?

Rozumiem, dlaczego brokerzy mają metadane, aby nie musieć połączenie z zookeeperem za każdym razem, gdy zostanie do niego wysłana nowa wiadomość. Czy jest jakaś funkcja, którą mi brakuje? Trudno mi wymyślić powód, dla którego zookeeper jest naprawdę potrzebny w klastrze Kafki.

Author: Luckl507, 2015-01-13

2 answers

Po pierwsze, zookeeper jest potrzebny tylko dla konsumentów na wysokim poziomie. SimpleConsumer nie wymaga do pracy zookeepera.

Głównym powodem, dla którego zookeeper jest potrzebny dla wysokiego poziomu konsumentów, jest śledzenie zużytych offsetów i obsługa równoważenia obciążenia.

Teraz bardziej szczegółowo.

Jeśli chodzi o śledzenie offsetowe, wyobraź sobie następujący scenariusz: uruchamiasz konsumenta, zużywasz 100 wiadomości i wyłączasz konsumenta. Następnym razem, gdy uruchomisz swojego konsumenta, prawdopodobnie będziesz chciał wznowić swoją ostatnią konsumpcję offset (czyli 100), a to oznacza, że musisz gdzieś przechować maksymalną zużytą offset. Tutaj wkracza zookeeper: przechowuje offsety dla każdej grupy/tematu / partycji. Więc w ten sposób następnym razem, gdy uruchomisz swojego konsumenta, może zapytać: "Hej zookeeper, od czego powinienem zacząć konsumować?". Kafka zmierza w kierunku możliwości przechowywania offsetów nie tylko w zookeeperze, ale także w innych magazynach (na razie dostępne są tylko zookeeper i kafka magazynów offsetowych i nie jestem pewien kafka storage jest w pełni zaimplementowany).

Jeśli chodzi o równoważenie obciążenia, ilość wytwarzanych wiadomości może być dość duża, aby mogły być obsługiwane przez jedną maszynę i prawdopodobnie będziesz chciał w pewnym momencie dodać moc obliczeniową. Powiedzmy, że masz temat z 100 partycjami i do obsługi tej ilości wiadomości masz 10 maszyn. Istnieje kilka pytań, które pojawiają się tutaj w rzeczywistości:

  • jak te 10 maszyn powinno dzielić partycje między sobą?
  • co się stanie, jeśli jeden z maszyny umierają?
  • co się stanie, jeśli chcesz dodać kolejną maszynę?

I znowu, tutaj zaczyna się zookeeper: śledzi wszystkich konsumentów w grupie i każdy konsument wysokiego poziomu jest subskrybowany na zmiany w tej grupie. Chodzi o to, że gdy konsument pojawia się lub znika, zookeeper powiadamia wszystkich konsumentów i uruchamia rebalance tak, że dzielą partycje prawie równo (np. aby zrównoważyć obciążenie). W ten sposób gwarantuje, że jeśli jeden z konsumentów umrze, inni będą kontynuować przetwarzanie zaborów, które były własnością tego konsumenta.

 41
Author: serejja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-13 09:46:17

W kafka 0.9 + wprowadzono nowe Api dla konsumentów. Nowi konsumenci nie potrzebują połączenia z Zookeeper, ponieważ Bilansowanie grupowe zapewnia sama kafka.

 8
Author: luka1983,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 14:10:26