Dlaczego kafka producer bierze pośrednika po inicjalizacji zamiast zk

Jeśli mam wielu brokerów, z którego brokera powinien korzystać mój producent? Czy muszę ręcznie przełączać brokera, aby zrównoważyć obciążenie? Dlaczego konsument potrzebuje tylko punktu końcowego zookeeper zamiast punktu końcowego brokera?

Szybki przykład z tutoriala:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
Author: marios, 2014-03-17

4 answers

Jakiego brokera powinien używać mój producent? Czy muszę ręcznie przełączyć brokera, aby zrównoważyć obciążenie?

Kafka działa na klastrze, czyli zestawie węzłów, więc podczas tworzenia czegokolwiek musisz powiedzieć mu LIST brokerów, które skonfigurowałeś dla swojej aplikacji, poniżej mała notatka zaczerpnięta z ich dokumentacji.

"metadane.broker.lista " określa, gdzie producent może znaleźć jednego lub więcej brokerów, aby określić lidera dla każdego tematu. To nie musi być pełnym zestawem brokerów w Twoim klastrze, ale powinien zawierać co najmniej dwa w przypadku, gdy pierwszy Broker nie jest dostępny. Nie musisz się martwić o ustalenie, który Broker jest liderem dla tematu (i partycji), producent wie, jak połączyć się z brokerem i poprosić o metadane, a następnie połączyć się z właściwym brokerem.

Mam nadzieję, że to wyjaśni trochę Twojego zamieszania

Również dlaczego konsument potrzebuje tylko punktu końcowego zookeeper zamiast broker punkt końcowy

Nie jest to technicznie poprawne, ponieważ dostępne są dwa typy interfejsów API, wysoki i niski poziom konsumenta.

Konsument wysokiego poziomu w zasadzie zajmuje się większością rzeczy, takich jak wykrywanie lidera, problem wątków itp. ale nie zapewnia wiele kontroli nad wiadomościami, które dokładnie celem korzystania z innych alternatyw prostego lub niskiego poziomu konsumenta, w którym widać, że trzeba dostarczyć brokerów, partycji związanych szczegóły.

Więc Konsument potrzebuje punktu końcowego zookeeper tylko wtedy, gdy idziesz z API wysokiego poziomu, w przypadku korzystania z Simple musisz podać inne informacje

 28
Author: user2720864,
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-05-25 04:36:46

Kafka ustawia jednego brokera jako lidera dla każdej partycji każdego tematu. Lider jest odpowiedzialny za obsługę zarówno odczytu, jak i zapisu do tej partycji. Nie możesz zdecydować się na czytanie lub pisanie od brokera niebędącego liderem.

Więc, co to znaczy, aby dostarczyć brokera lub listę brokerów do kafka-Console-producenta ? Cóż, broker lub brokerzy, których podajesz w wierszu poleceń, są tylko pierwszym punktem kontaktowym dla Twojego producenta. Jeśli broker, którego wymieniasz, nie jest liderem dla temat / partycja, której potrzebujesz, twój producent otrzyma aktualne informacje o leaderze (zwane "metadanymi tematu" w kafka-speak) i ponownie połączy się z innymi brokerami w razie potrzeby przed wysłaniem zapisu. W rzeczywistości, jeśli twój temat ma wiele partycji, może nawet połączyć się z kilkoma brokerami równolegle (jeśli liderzy partycji są różnymi brokerami).

Drugie pytanie: dlaczego konsument wymaga listy zookeeper dla połączeń zamiast listy brokerów? Odpowiedź na to jest taka, że konsumenci Kafki mogą działać w "groups" i zookeeper jest używany do koordynowania tych grup (sposób pracy grup jest większym problemem, poza zakresem tego Q). Zookeeper przechowuje również listy brokerów dla tematów, więc konsument może pobierać listy brokerów bezpośrednio z zookeeper, co czyni dodatkową --listę brokerów nieco zbędną.

 7
Author: dpkp,
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
2014-03-22 00:29:07

Kafka Producer API nie wchodzi bezpośrednio w interakcję z Zookeeperem. Jednak wysoki poziom API konsumenta łączy się z Zookeeper, aby pobrać/zaktualizować informacje o przesunięciu partycji dla każdego konsumenta. Tak więc API konsumenckie zawiedzie, jeśli nie połączy się z Zookeeperem.

 3
Author: java_geek,
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
2014-12-15 16:11:58

Wszystkie powyższe odpowiedzi są poprawne w starszych wersjach Kafka, ale rzeczy zmieniły się wraz z nadejściem Kafka 0.9.

Teraz nie ma już żadnej bezpośredniej interakcji z zookeeper ze strony producenta lub konsumenta. Inną interesującą rzeczą jest to, że z 0.9, Kafka usunęła odmienność między interfejsami wysokiego i niskiego poziomu, ponieważ oba są zgodne z jednolitym API konsumenckim.

 2
Author: Ankit Maheshwari,
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
2017-06-03 06:51:52