Próbuję użyć Kafki.
Wszystkie konfiguracje są wykonane poprawnie, ale kiedy próbuję wygenerować komunikat z konsoli, pojawia się następujący błąd
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Wersja Kafki: 2.11-0.9.0.0
apache-kafka
producer
Vishesh
źródło
źródło
2.2.0
Odpowiedzi:
Może to być związane z
advertised.host.name
ustawieniem w Twoimserver.properties
.Co może się zdarzyć, że producent próbuje dowiedzieć się, kto jest liderem na danej partycji, dane swoje
advertised.host.name
iadvertised.port
próbuje się połączyć. Jeśli te ustawienia nie są poprawnie skonfigurowane, może pomyśleć, że lider jest niedostępny.źródło
Wypróbowałem wszystkie wymienione tutaj zalecenia. Udało mi się przejść do
server.properties
i dodać:Zostaw
listeners
iadvertised_listeners
skomentuj.źródło
server.properties
plik MAC znajduje się pod adresem/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
są przestarzałymi konfiguracjami. kafka.apache.org/documentation/#brokerconfigsRozwiązaniem dla mnie jest takie ustawienie słuchaczy:
To sprawia, że broker KAFKA nasłuchuje wszystkich interfejsów.
źródło
Miałem kafkę działającą jako kontener Dockera i podobne wiadomości były zalewane do dziennika.
I
KAFKA_ADVERTISED_HOST_NAME
został ustawiony na „kafka”.W moim przypadku przyczyną błędu był brak
/etc/hosts
rekordu „kafka” w samym kontenerze „kafka”.Na przykład uruchomienie
ping kafka
w kontenerze „kafka” nie powiedzie sięping: bad address 'kafka'
W przypadku Dockera problem ten został rozwiązany poprzez określenie
hostname
kontenera.Możliwości osiągnięcia tego celu:
docker run --hostname ...
docker run -it --add-host ...
hostname
w docker-composehostname
w definicji zadania AWS EC2źródło
Używam kafka_2.12-0.10.2.1:
vi config/server.properties
dodaj poniższy wiersz:
Nazwa hosta i port, które broker będzie reklamował producentom i konsumentom. Jeśli nie jest ustawiony,
W przeciwnym razie użyje wartości zwróconej z
java.net.InetAddress.getCanonicalHostName()
.zatrzymaj brokera Kafka:
zrestartuj brokera:
a teraz nie powinieneś widzieć żadnych problemów.
źródło
server.properties
nie wystarczyło, dopóki nie zrestartowałem brokera z ponownie załadowanym demonem. Może powinieneś to wiedzieć, ale z pewnością pomogło to, aby to było określone w tej odpowiedzikafka 2.13
Byłem świadkiem tego samego problemu w ciągu ostatnich 2 tygodni podczas pracy z Kafką i od tamtej pory czytam ten post Stackoverflow.
Rezultat w moim przypadku jest taki, że Kafka odsyła komunikat o błędzie, ale jednocześnie tworzy temat, który wcześniej nie istniał. Więc jeśli po tym zdarzeniu spróbuję ponownie wygenerować jakąkolwiek wiadomość do tego tematu, błąd nie będzie się już pojawiał jako temat, który został utworzony.
UWAGA: Możliwe, że moja konkretna instalacja platformy Kafka została skonfigurowana tak, aby automatycznie tworzyła temat, gdy ten sam nie istnieje; To powinno wyjaśniać, dlaczego w moim przypadku widzę problem tylko raz dla każdego tematu po zresetowaniu tematów: Twoja konfiguracja może być inna iw takim przypadku ciągle otrzymywałbyś ten sam błąd.
Pozdrowienia,
Luca Tampellini
źródło
Zwykle otrzymujemy tę wiadomość, gdy próbujemy zasubskrybować temat, który nie został jeszcze utworzony. Generalnie polegamy na tematach, które mają być tworzone a priori w naszych wdrożonych środowiskach, ale mamy testy komponentów, które działają na zadokeryzowanej instancji kafka, która za każdym razem uruchamia się czysto.
W takim przypadku używamy AdminUtils w naszej konfiguracji testowej, aby sprawdzić, czy temat istnieje, i utworzyć go, jeśli nie. Zobacz inne przepełnienie stosu, aby dowiedzieć się więcej o konfigurowaniu AdminUtils.
źródło
Inną możliwością dla tego ostrzeżenia (w 0.10.2.1) jest to, że próbujesz przeprowadzić ankietę na temat, który właśnie został utworzony, a lider tego podziału tematycznego nie jest jeszcze dostępny, jesteś w środku wyborów przywódczych.
Aby obejść ten problem, należy poczekać sekundę między utworzeniem tematu a odpytywaniem.
źródło
Dla każdego, kto próbował uruchomić kafkę na kubernetes i napotkał ten błąd, oto co ostatecznie rozwiązało to dla mnie:
Musisz albo:
hostname
do specyfikacji kapsuły, w ten sposób kafka może się znaleźć.lub
hostPort
, potrzebujeszhostNetwork: true
idnsPolicy: ClusterFirstWithHostNet
Powodem tego jest to, że Kafka musi rozmawiać ze sobą i decyduje się użyć „reklamowanego” odbiornika / nazwy hosta, aby się znaleźć, zamiast używać hosta lokalnego. Nawet jeśli masz usługę, która wskazuje reklamowaną nazwę hosta na kapsułę, nie jest ona widoczna z jej wnętrza. Naprawdę nie wiem, dlaczego tak jest, ale przynajmniej istnieje obejście tego problemu.
źródło
Dodając to, ponieważ może to pomóc innym. Częstym problemem może być błędna konfiguracja
advertised.host.name
. Z Dockerem przy użyciu docker-compose ustawienie nazwy usługi wewnątrzKAFKA_ADVERTISED_HOST_NAME
nie zadziała, chyba że ustawisz również nazwę hosta.docker-compose.yml
przykład:Powyższe bez
hostname: kafka
może powodować problemyLEADER_NOT_AVAILABLE
podczas próby połączenia. Można znaleźć przykład roboczejdocker-compose
konfiguracji tutajźródło
W moim przypadku działało dobrze w domu, ale zawodziło w biurze, w momencie, gdy łączę się z siecią biurową.
Zmodyfikowano więc config / server.properties listeners = PLAINTEXT: //: 9092 to listeners = PLAINTEXT: // localhost: 9092
W moim przypadku zrozumiałem, opisując grupę konsumentów
źródło
Jeśli używasz kafki na komputerze lokalnym, spróbuj zaktualizować $ KAFKA_DIR / config / server.properties za pomocą poniższej linii:,
listeners=PLAINTEXT://localhost:9092
a następnie zrestartuj kafkę.źródło
Używam docker-compose do zbudowania kontenera Kafka przy użyciu
wurstmeister/kafka
obrazu. DodanieKAFKA_ADVERTISED_PORT: 9092
właściwości do mojegodocker-compose
pliku rozwiązało ten błąd.źródło
Ponieważ chciałem, aby mój broker kafka łączył się ze zdalnymi producentami i konsumentami, więc nie chcę
advertised.listener
być komentowany. W moim przypadku (uruchamiając kafkę na kubernetes), dowiedziałem się, że moja pod kafka nie ma przypisanego adresu IP klastra. Usuwając linięclusterIP: None
z services.yml, kubernetes przypisuje wewnętrzny adres IP do kafki pod. To rozwiązało mój problem z LEADER_NOT_AVAILABLE, a także zdalnym połączeniem producentów / konsumentów kafka.źródło
Gdy pojawi się błąd LEADER_NOT_AVAILABLE, po prostu zrestartuj brokera kafka:
śledzony przez
(Uwaga: Zookeeper musi działać do tego czasu, jeśli zrobisz to w inny sposób, to nie zadziała)
źródło
New leader is 0
.Poniższa linia, którą dodałem
config/server.properties
, rozwiązała mój problem, podobnie jak powyższy problem. Mam nadzieję, że to pomoże, jest dobrze udokumentowane w pliku server.properties, spróbuj przeczytać i zrozumieć, zanim to zmodyfikujesz.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
źródło
Dla wszystkich, którzy zmagają się z konfiguracją SSL Kafka i widzą ten błąd LEADER_NOT_AVAILABLE. Jednym z powodów, dla których może się to zepsuć, jest magazyn kluczy i magazyn zaufanych certyfikatów. W magazynie kluczy musisz mieć klucz prywatny serwera + podpisany certyfikat serwera. W magazynie zaufanych certyfikatów klienta musisz mieć pośredni certyfikat CA, aby klient mógł uwierzytelniać serwer kafka. Jeśli do komunikacji między brokerem będzie używany protokół SSL, ten magazyn zaufanych certyfikatów musi być również ustawiony w pliku server.properties brokerów, aby mogli się wzajemnie uwierzytelniać.
Ten ostatni element, którego omyłkowo przegapiłem, spowodował wiele bolesnych godzin, aby dowiedzieć się, co może oznaczać ten błąd LEADER_NOT_AVAILABLE. Mam nadzieję, że to może komuś pomóc.
źródło
Problem został rozwiązany po dodaniu ustawienia nasłuchiwania w pliku server.properties znajdującym się w katalogu config. Listeners = PLAINTEXT: // localhost (lub twój serwer): 9092 Zrestartuj kafkę po tej zmianie. Używana wersja 2.11
źródło
U mnie było to spowodowane błędną konfiguracją
portu Dockera (9093)
Port poleceń Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName"
Sprawdziłem konfigurację, aby pasowała do portu i teraz wszystko jest w porządku
źródło
Dla mnie przyczyną było użycie konkretnego Zookeepera, który nie był częścią pakietu Kafka. Ten Zookeeper został już zainstalowany na maszynie do innych celów. Najwyraźniej Kafka nie współpracuje z żadnym Zookeeperem. Przejście na Zookeeper, który był dostarczony z Kafką, rozwiązało to za mnie. Aby nie kolidować z istniejącym Zookeeperem, musiałem zmodyfikować moją konfigurację, aby Zookeeper nasłuchiwał na innym porcie:
źródło
Reklamowani słuchacze, jak wspomniano w powyższych odpowiedziach, mogą być jednym z powodów. Inne możliwe przyczyny to:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Upewnij się również, że reklamowany odbiornik jest ustawiony na
IP:9092
zamiastlocalhost:9092
. To ostatnie oznacza, że broker jest dostępny tylko za pośrednictwem hosta lokalnego.Kiedy napotkałem błąd, pamiętam, że użyłem
PLAINTEXT://<ip>:<PORT>
listy serwerów bootstrap (lub listy brokerów) i dziwnie zadziałało.źródło
Dla mnie nie podałem identyfikatora brokera dla instancji Kafka. Czasami otrzyma nowy identyfikator od zookeepera po ponownym uruchomieniu w środowisku Docker. Jeśli twój identyfikator brokera jest większy niż 1000, po prostu określ zmienną środowiskową
KAFKA_BROKER_ID
.Użyj tego, aby zobaczyć brokerów, tematy i partycje.
źródło
Wiem, że to zostało opublikowane dawno temu, chciałbym podzielić się tym, jak go rozwiązałem.
ponieważ mam laptopa w biurze ( skonfigurowano VPN i proxy ).
sprawdziłem zmienną środowiskową NO_PROXY
zwrócił z pustymi wartościami,
teraz ustawiłem NO_PROXY z localhost i 127.0.0.1
jeśli chcesz dołączyć do istniejących wartości, to
po tym zrestartowałem zookeepera i kafka
działała jak urok
źródło