Ich versuche Kafka zu benutzen.
Alle Konfigurationen werden ordnungsgemäß durchgeführt, aber wenn ich versuche, eine Nachricht von der Konsole zu erstellen, wird immer wieder der folgende Fehler angezeigt
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Kafka-Version: 2.11-0.9.0.0
apache-kafka
producer
Vishesh
quelle
quelle
2.2.0
im Jahr 2019 bestätigenAntworten:
Es könnte mit der
advertised.host.name
Einstellung in Ihrem zusammenhängenserver.properties
.Was passieren könnte, ist, dass Ihr Produzent versucht herauszufinden, wer der Anführer für eine bestimmte Partition ist, deren
advertised.host.name
und herausfindetadvertised.port
und versucht, eine Verbindung herzustellen. Wenn diese Einstellungen nicht richtig konfiguriert sind, wird möglicherweise angenommen, dass der Leader nicht verfügbar ist.quelle
Ich habe alle hier aufgeführten Empfehlungen ausprobiert. Was für mich funktionierte, war zu gehen
server.properties
und hinzuzufügen:Geh
listeners
undadvertised_listeners
kommentiere aus.quelle
server.properties
Datei für mich um/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
sind veraltete Konfigurationen. kafka.apache.org/documentation/#brokerconfigsWas es für mich gelöst hat, ist, die Zuhörer so einzustellen:
Dadurch hört der KAFKA-Broker alle Schnittstellen ab.
quelle
Ich hatte Kafka als Docker-Container ausgeführt und ähnliche Nachrichten fluteten in das Protokoll.
Und
KAFKA_ADVERTISED_HOST_NAME
wurde auf 'kafka' gesetzt.In meinem Fall war der Grund für den Fehler der fehlende
/etc/hosts
Datensatz für 'kafka' im 'kafka'-Container selbst.So würde beispielsweise das Ausführen
ping kafka
in einem 'kafka'-Container mit fehlschlagenping: bad address 'kafka'
In Bezug auf Docker wird dieses Problem durch Angabe
hostname
des Containers gelöst .Optionen, um dies zu erreichen:
docker run --hostname ...
docker run -it --add-host ...
hostname
in Docker-Composehostname
in der AWS EC2-Aufgabendefinitionquelle
Ich benutze kafka_2.12-0.10.2.1:
vi config/server.properties
füge folgende Zeile hinzu:
Hostname und Port, die der Broker Herstellern und Verbrauchern bekannt macht. Wenn nicht eingestellt,
Andernfalls wird der von zurückgegebene Wert verwendet
java.net.InetAddress.getCanonicalHostName()
.Stoppen Sie den Kafka-Broker:
Broker neu starten:
und jetzt sollten Sie keine Probleme sehen.
quelle
server.properties
waren nicht genug, bis ich den Broker mit einem neu geladenen Deamon neu startete. Vielleicht solltest du das wissen, aber es hat sicher geholfen, dass es in dieser Antwort angegeben wurdekafka 2.13
Ich habe dieses Problem in den letzten 2 Wochen bei der Arbeit mit Kafka gesehen und seitdem den Beitrag dieses Stackoverflow gelesen.
Das Ergebnis in meinem Fall ist, dass Kafka eine Fehlermeldung zurücksendet, aber gleichzeitig das Thema erstellt, das vorher nicht existierte. Wenn ich also nach diesem Ereignis erneut versuche, eine Nachricht zu diesem Thema zu erstellen, wird der Fehler nicht mehr als das erstellte Thema angezeigt.
BITTE BEACHTEN SIE: Es kann sein, dass meine spezielle Kafka-Installation so konfiguriert wurde, dass das Thema automatisch erstellt wird, wenn dasselbe nicht vorhanden ist. Das sollte erklären, warum in meinem Fall das Problem nach dem Zurücksetzen der Themen nur einmal für jedes Thema angezeigt wird: Ihre Konfiguration ist möglicherweise anders, und in diesem Fall wird immer wieder derselbe Fehler angezeigt.
Grüße,
Luca Tampellini
quelle
Wir erhalten diese Nachricht in der Regel, wenn wir versuchen, ein Thema zu abonnieren, das noch nicht erstellt wurde. Wir verlassen uns im Allgemeinen darauf, dass Themen in unseren bereitgestellten Umgebungen a priori erstellt werden. Wir haben jedoch Komponententests, die für eine dockerisierte Kafka-Instanz ausgeführt werden, die jedes Mal sauber gestartet wird.
In diesem Fall verwenden wir AdminUtils in unserem Test-Setup, um zu überprüfen, ob das Thema vorhanden ist, und um es zu erstellen, wenn nicht. Weitere Informationen zum Einrichten von AdminUtils finden Sie in diesem anderen Stapelüberlauf.
quelle
Eine andere Möglichkeit für diese Warnung (in 0.10.2.1) besteht darin, dass Sie versuchen, ein gerade erstelltes Thema abzufragen, und der Leiter für diese Themenaufteilung noch nicht verfügbar ist. Sie befinden sich mitten in einer Führungswahl.
Das Warten einer Sekunde zwischen der Erstellung des Themas und dem Abrufen ist eine Problemumgehung.
quelle
Für alle, die versuchen, kafka auf kubernetes auszuführen und auf diesen Fehler stoßen, ist dies das, was es für mich endgültig gelöst hat:
Sie müssen entweder:
hostname
der Pod-Spezifikation hinzu, so kann sich kafka selbst finden.oder
hostPort
, benötigen SiehostNetwork: true
unddnsPolicy: ClusterFirstWithHostNet
Der Grund dafür ist, dass Kafka mit sich selbst sprechen muss und beschließt, den 'beworbenen' Listener / Hostnamen zu verwenden, um sich selbst zu finden, anstatt localhost zu verwenden. Selbst wenn Sie einen Dienst haben, der den angekündigten Hostnamen auf den Pod verweist, ist er im Pod nicht sichtbar. Ich weiß nicht genau, warum das so ist, aber es gibt zumindest eine Problemumgehung.
quelle
Fügen Sie dies hinzu, da es anderen helfen kann. Ein häufiges Problem kann eine Fehlkonfiguration von sein
advertised.host.name
. Wenn Docker Docker-Compose verwendet,KAFKA_ADVERTISED_HOST_NAME
funktioniert das Festlegen des Namens des Dienstes im Inneren nur , wenn Sie auch den Hostnamen festlegen.docker-compose.yml
Beispiel:Das obige ohne
hostname: kafka
kannLEADER_NOT_AVAILABLE
beim Versuch, eine Verbindung herzustellen, ein Problem darstellen . Ein Beispiel für eine funktionierendedocker-compose
Konfiguration finden Sie hierquelle
In meinem Fall funktionierte es zu Hause einwandfrei, aber im Büro schlug es fehl, sobald ich mich mit dem Büronetzwerk verband.
Ändern Sie daher die Listener config / server.properties = PLAINTEXT: //: 9092 in listeners = PLAINTEXT: // localhost: 9092
In meinem Fall bekam ich während der Beschreibung der Verbrauchergruppe
quelle
Wenn Sie kafka auf einem lokalen Computer ausführen, aktualisieren Sie $ KAFKA_DIR / config / server.properties mit der folgenden Zeile:
listeners=PLAINTEXT://localhost:9092
und starten Sie kafka neu.quelle
Ich verwende Docker-Compose, um den Kafka-Container mithilfe von
wurstmeister/kafka
Image zu erstellen . Das Hinzufügen vonKAFKA_ADVERTISED_PORT: 9092
Eigenschaften zu meinerdocker-compose
Datei hat diesen Fehler für mich behoben.quelle
Da ich wollte, dass mein Kafka-Broker mit Remote-Produzenten und -Konsumenten in Verbindung steht, möchte ich nicht auskommentiert
advertised.listener
werden. In meinem Fall (Kafka auf Kubernetes ausführen) stellte ich fest, dass meinem Kafka-Pod keine Cluster-IP zugewiesen wurde. Durch Entfernen der ZeileclusterIP: None
aus services.yml weisen die kubernetes dem kafka pod eine interne IP zu. Dies löste mein Problem mit LEADER_NOT_AVAILABLE und auch die Fernverbindung von Kafka-Produzenten / Konsumenten.quelle
Wenn der Fehler LEADER_NOT_AVAILABLE ausgelöst wird, starten Sie einfach den kafka-Broker neu:
gefolgt von
(Hinweis: Zookeeper muss zu diesem Zeitpunkt ausgeführt werden, wenn Sie dies nicht tun, funktioniert es nicht.)
quelle
New leader is 0
.Diese folgende Zeile habe ich hinzugefügt
config/server.properties
, die mein Problem ähnlich wie oben behoben hat. Ich hoffe, dies hilft, es ist ziemlich gut in der Datei server.properties dokumentiert. Versuchen Sie zu lesen und zu verstehen, bevor Sie dies ändern.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
quelle
Für alle, die mit dem Kafka ssl-Setup zu kämpfen haben und diesen LEADER_NOT_AVAILABLE-Fehler sehen. Einer der Gründe, die möglicherweise beschädigt werden, ist der Keystore und der Truststore. Im Keystore benötigen Sie einen privaten Schlüssel des Servers + ein signiertes Serverzertifikat. Im Client-Truststore benötigen Sie ein CA-Zwischenzertifikat, damit der Client den Kafka-Server authentifizieren kann. Wenn Sie ssl für die Interbroker-Kommunikation verwenden, muss dieser Truststore auch in den server.properties der Broker festgelegt sein, damit sie sich gegenseitig authentifizieren können.
Das letzte Stück, das mir fälschlicherweise fehlte, verursachte mir viele schmerzhafte Stunden, als ich herausfand, was dieser LEADER_NOT_AVAILABLE-Fehler bedeuten könnte. Hoffentlich kann das jemandem helfen.
quelle
Das Problem wurde behoben, nachdem die Listener-Einstellung in der Datei server.properties im Konfigurationsverzeichnis hinzugefügt wurde. listeners = PLAINTEXT: // localhost (oder Ihr Server): 9092 Starten Sie kafka nach dieser Änderung neu. Verwendete Version 2.11
quelle
Für mich war es aufgrund einer Fehlkonfiguration passieren
Docker - Port (9093)
Kafka Befehl port „bin / kafka-console-producer.sh --broker-Liste localhost: 9092 --topic topicname“
überprüfte ich meine Konfiguration Port und jetzt ist alles gut
quelle
Für mich war die Ursache die Verwendung eines bestimmten Zookeepers, der nicht Teil des Kafka-Pakets war. Dieser Zookeeper wurde bereits für andere Zwecke auf dem Computer installiert. Anscheinend arbeitet Kafka nicht mit irgendeinem Zookeeper. Der Wechsel zu dem mit Kafka gelieferten Zookeeper löste das Problem für mich. Um nicht mit dem vorhandenen Zookeeper in Konflikt zu geraten, musste ich meine Konfiguration ändern, damit der Zookeeper einen anderen Port überwacht:
quelle
Die beworbenen Zuhörer, wie in den obigen Antworten erwähnt, könnten einer der Gründe sein. Die anderen möglichen Gründe sind:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Stellen Sie außerdem sicher, dass Sie den angekündigten Listener auf
IP:9092
anstatt eingestellt habenlocalhost:9092
. Letzteres bedeutet, dass der Broker nur über den localhost erreichbar ist.Als ich auf den Fehler stieß, erinnere ich mich, dass ich ihn
PLAINTEXT://<ip>:<PORT>
in der Liste der Bootstrap-Server (oder der Broker-Liste) verwendet habe und er seltsamerweise funktioniert hat.quelle
Für mich habe ich keine Broker-ID für die Kafka-Instanz angegeben. Es wird manchmal eine neue ID von zookeeper erhalten, wenn es in der Docker-Umgebung neu gestartet wird. Wenn Ihre Broker-ID größer als 1000 ist, geben Sie einfach die Umgebungsvariable an
KAFKA_BROKER_ID
.Verwenden Sie diese Option, um Broker, Themen und Partitionen anzuzeigen.
quelle
Ich weiß, dass dies vor langer Zeit gepostet wurde. Ich möchte mitteilen, wie ich es gelöst habe.
da ich meinen Office-Laptop habe ( VPN und Proxy wurden konfiguriert).
Ich habe die Umgebungsvariable NO_PROXY überprüft
es gab mit leeren Werten zurück,
jetzt habe ich das NO_PROXY mit localhost und 127.0.0.1 gesetzt
Wenn Sie an vorhandene Werte anhängen möchten, dann
Danach habe ich Zookeeper neu gestartet und Kafka
hat wie ein Zauber funktioniert
quelle