Kafka na maszynie wirtualnej

0

Korzystam z windowsa, wiec postanowilam uruhcomic broker kafki na linux na maszynie wirtualnej. Postawienie nie zajelo wiele czasu, w kafce sa 2 klienty command-line - consumer i producer, uruchomilam oba, producer wytwarza, na consumerze pojawiaja sie wiadomosci, wszystko dziala. Producer i consumar zostali uruchomieni z ADRES_PRYWATNY_VM:9020.
Następny krok, pobieram python-kafka robie zapytania na VM do lokalnej kafki, kod wyglada tak

from kafka import KafkaProducer
producer = KafkaProducer(server_costam="ADRES_PRYWATNY_VM:9020')
producer.send("topicName", "dupa")

Przechodzi, pojawia sie dupa na consumerze.
Nastepny krok, probuje wykonac dokladnie ten sam kod, ale z hosta do VM.
Request nie przechodzi, nie ma bledu ale nic nie pojawia sie w konsumerze.

Moge robic pinga do tegp adresu z hosta, dziala. Moge robic telnet ADRES_PRYWATNY_VM 9020, działa.
Tylko ten nieszczesne requesty do kafki nie dzialają.
Co, mam robic, czytalam ze kafka preferuje hostnames, wec KafkaProducer to powinien byc "hostname:9020"? Ale jak to ustawic zeby mozna bylo pingowac VM po jej hostname?
Moze zapytam tu, bo pewnie wiecej ludzi w javie korzysta z kafki, zreszta to nie jest problem pythonowy

2

W Kafce każda partycja może być replikowana - w celu opublikowania messagea na danej partycji musisz znaleźć lidera danej partycji (wybrana replika która obsługuje wszystkie zapisy i odczyty)

W tym celu łączysz się do dowolnego brokera (bootstrap server) aby dostać tą informację.

Bootstrap server wie tyle ile ma w konfiguracji - nie ma pojęcia czy jesteś w jego sieci czy gdzieś indziej, ani jakie hosty są dla ciebie resolvowalne.

Stąd możesz zdefiniować coś takiego jak "advertised listeners" - to są po prostu adresy które są zwracane z brokera dla klientów w celu połączenia się.

Przykład:

masz VMkę z hostname dupa_jasia z pojedynczym brokerem kafki - jest zestawiona w trybie bridged.

Twój producer uderza do kafki i dostaje w odpowiedzi "lider partycji 0 topicu dupa jest dostępny na brokerze dupa_jasia:9092". Z uwagi na to że nie jesteś w stanie zresolvować hosta dupa_jasia (bo i skąd, nie jest zarejestrowany w żadnym serwerze DNS), to nie jesteś w stanie się połączyć. Gdybyś zmieniła sobie ustawienia advertised listener tego brokera tak żeby zwracał konkretny adres DNS albo IP który jest resolvowalny/osiągalny z hosta, to powinno zadziałać.

0

dzięki, wystarczylo wpisac adres prywatny w advertised_listeners w server.properties.

1 użytkowników online, w tym zalogowanych: 0, gości: 1