2016-03-04 5 views
67

Ich versuche Kafka zu verwenden. Alle Konfigurationen sind richtig gemacht, aber wenn ich versuche, Nachricht zu erzeugen, von der Konsole Ich erhalte Fehler folgendeLeader Nicht verfügbar Kafka in Console Producer

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

Kann jemand bitte helfen, wie ich nicht in der Lage bin eine Lösung zu finden irgendwo?

+0

, welche Version von kafka verwenden Sie? Woher weißt du, dass alle Konfigurationen richtig sind? Bitte versuchen Sie weitere Informationen hinzuzufügen – Nautilus

+0

Ich benutze 2.11-0.9.0.0 Version, ich sagte alle Konfigurationen sind korrekt, weil es funktionierte. – Vishesh

+1

@Vishesh Können Sie Ergebnis des folgenden Befehls liefern ./bin/kafka-topics.sh --zookeke localhost: 2181 --describe --topic IhrTopicName – avr

Antwort

1

Ich habe das gleiche Problem heute erlebt. Was ich tat, um diesen Fehler zu bekommen, ist eine subtile Änderung in /etc/hosts Datei zu machen:

ändern Linie 127.0.0.1 localhost localhost.localdomain zu 10.0.11.12 localhost localhost.localdomain

(Angenommen 10.0.11.12 ist eine Ihrer Host-IP-Adresse (n), dass Kafka-Server überwacht)

47

Es könnte sich auf advertised.host.name Einstellung in Ihrem server.properties beziehen.

Was könnte passieren ist, dass Ihr Produzent versucht, herauszufinden, wer der Führer für eine bestimmte Partition ist, seine advertised.host.name und herausfindet und versucht, eine Verbindung herzustellen. Wenn diese Einstellungen nicht richtig konfiguriert sind, könnte es sein, dass der Vorspann nicht verfügbar ist.

+0

Das hat den Fehler für mich behoben .. aber die Kommentare in server.properties sagen, dass wenn advertised.host.name nicht konfiguriert ist, wird host.name verwendet. Und der Hostname wurde in der Datei server.properties konfiguriert. –

+0

Ich habe das gleiche Problem und das funktionierte für mich für kafka 0.9 – minhas23

2

Wir neigen dazu, diese Nachricht zu erhalten, wenn wir versuchen, ein Thema zu abonnieren, das noch nicht erstellt wurde. Im Allgemeinen verlassen wir uns auf Themen, die in unseren implementierten Umgebungen a priori erstellt werden müssen, aber wir haben Komponententests, die gegen eine dockerisierte kafka-Instanz laufen, die jedes Mal sauber startet.

In diesem Fall verwenden wir AdminUtils in unserem Test-Setup, um zu überprüfen, ob das Thema existiert und es zu erstellen, wenn nicht. Weitere Informationen zum Einrichten von AdminUtils finden Sie unter other Stapelüberlauf.

20

Ich hatte Kafka als Docker-Container ausgeführt und ähnliche Meldungen überfluteten das Protokoll.
Und KAFKA_ADVERTISED_HOST_NAME wurde auf "kafka" eingestellt.

In meinem Fall war der Grund für Fehler die fehlende /etc/hosts Aufzeichnung für 'Kafka' in 'Kafka' Container selbst.
So würde zum Beispiel ping kafka innen 'Kafka Behälter läuft nicht mit ping: bad address 'kafka'

In Bezug auf den Docker dieses Problem durch Angabe hostname für den Behälter gelöst wird.

Optionen, es zu erreichen:

+0

Es ist keine Antwort _per se_, aber für zukünftige Referenz: wenn (oder wenn) [docker/docker # 1143] (https://github.com/docker/ docker/issues/1143) gelöst ist, gibt es eine einfache Möglichkeit, den Host des Containers zu referenzieren - unabhängig davon, welches Betriebssystem verwendet wird. –

+0

Für den Leser stellen Sie sicher, dass Sie auch KAFKA_ADVERTISED_PORT überprüfen – Brice

+0

Danke, dass Hostname Tipp in Docker-Compose gemacht meine Tag –

34

ich hier aufgelistet alle Empfehlungen ausprobiert.Was für mich gearbeitet wurde, um server.properties zu gehen und hinzufügen:

port = 9092 
advertised.host.name = localhost 

Leave listeners und advertised_listeners kommentiert werden.

+3

Lösung funktioniert für mich ([Vikas Lösungslink] (http://Stackoverflow.com/a/40732119/3057986)) Ich möchte nur hinzufügen, dass für mich auf MAC 'server.properties' Datei befindet sich unter'/usr/local/etc/kafka/' –

+0

@EdisonQ Vielen Dank! –

+1

was für mich funktionierte war das '' beworben.listeners = PLAINTEXT: //my.ip: 9092'' –

2

Eine weitere 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 Themenpartition noch nicht verfügbar ist. Sie befinden sich mitten in einer Führungsposition Wahl.

Das Warten auf eine Sekunde zwischen Themenerstellung und Abruf ist eine Umgehungslösung.

2

Ich benutze docker-compose, um den Kafka-Container unter Verwendung wurstmeister/kafka Bild zu bauen. Hinzufügen von KAFKA_ADVERTISED_PORT: 9092 Eigenschaft zu meinem docker-compose Datei löste diesen Fehler für mich.

8

I kafka_2.12-0.10.2.1 bin mit:

vi config/server.properties

unten Zeile hinzu:

listeners=PLAINTEXT://localhost:9092 
  • Keine Notwendigkeit, die beworbenen zu ändern. Listener, wie es den Wert von Std-Listener-Eigenschaft abruft.

Hostname und Port der Broker werben Produzenten und Verbraucher. Wenn nicht gesetzt,

  • es verwendet den Wert für "Hörer" konfiguriert, wenn

. Andernfalls wird der von java.net.InetAddress.getCanonicalHostName() zurückgegebene Wert verwendet.

stoppen die Kafka-Broker:

bin/kafka-server-stop.sh 

Neustart Broker:

bin/kafka-server-start.sh -daemon config/server.properties 

und jetzt sollten Sie keine Probleme sehen.

4

Für jeden, der versucht kafka auf Kubernetes laufen und in diesen Fehler ausgeführt wird, ist es das, was es für mich endlich gelöst:

Sie müssen entweder:

  1. hostname zum pod spec hinzufügen, dass So kann Kafka sich finden.

oder

  1. Wenn hostPort verwenden, dann müssen Sie hostNetwork: true und dnsPolicy: ClusterFirstWithHostNet

Der Grund dafür ist, weil Kafka muss sich reden, und Es entscheidet sich dafür, den "angekündigten" Listener/Hostnamen zu verwenden, um sich selbst zu finden, anstatt localhost zu verwenden. Auch wenn Sie einen Dienst haben, der den beworbenen Hostnamen auf den Pod verweist, ist er nicht im Pod sichtbar. Ich weiß nicht wirklich, warum das so ist, aber es gibt zumindest einen Workaround.

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: zookeeper-cluster1 
    namespace: default 
    labels: 
    app: zookeeper-cluster1 
spec: 
    replicas: 1 
    selector: 
    matchLabels: 
     app: zookeeper-cluster1 
    template: 
    metadata: 
     labels: 
     name: zookeeper-cluster1 
     app: zookeeper-cluster1 
    spec: 
     hostname: zookeeper-cluster1 
     containers: 
     - name: zookeeper-cluster1 
     image: wurstmeister/zookeeper:latest 
     imagePullPolicy: IfNotPresent 
     ports: 
     - containerPort: 2181 
     - containerPort: 2888 
     - containerPort: 3888 

--- 

apiVersion: v1 
kind: Service 
metadata: 
    name: zookeeper-cluster1 
    namespace: default 
    labels: 
    app: zookeeper-cluster1 
spec: 
    type: NodePort 
    selector: 
    app: zookeeper-cluster1 
    ports: 
    - name: zookeeper-cluster1 
    protocol: TCP 
    port: 2181 
    targetPort: 2181 
    - name: zookeeper-follower-cluster1 
    protocol: TCP 
    port: 2888 
    targetPort: 2888 
    - name: zookeeper-leader-cluster1 
    protocol: TCP 
    port: 3888 
    targetPort: 3888 

--- 

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: kafka-cluster 
    namespace: default 
    labels: 
    app: kafka-cluster 
spec: 
    replicas: 1 
    selector: 
    matchLabels: 
     app: kafka-cluster 
    template: 
    metadata: 
     labels: 
     name: kafka-cluster 
     app: kafka-cluster 
    spec: 
     hostname: kafka-cluster 
     containers: 
     - name: kafka-cluster 
     image: wurstmeister/kafka:latest 
     imagePullPolicy: IfNotPresent 
     env: 
     - name: KAFKA_ADVERTISED_LISTENERS 
      value: PLAINTEXT://kafka-cluster:9092 
     - name: KAFKA_ZOOKEEPER_CONNECT 
      value: zookeeper-cluster1:2181 
     ports: 
     - containerPort: 9092 

--- 

apiVersion: v1 
kind: Service 
metadata: 
    name: kafka-cluster 
    namespace: default 
    labels: 
    app: kafka-cluster 
spec: 
    type: NodePort 
    selector: 
    app: kafka-cluster 
    ports: 
    - name: kafka-cluster 
    protocol: TCP 
    port: 9092 
    targetPort: 9092 
+1

1. funktioniert nicht% FEHLER: Lokal: Hostauflösung fehlgeschlagen: kafka-cluster: 9092/1001: Fehler beim Auflösen von 'kafka-cluster: 9092': Knotenname noch Servenname angegeben oder nicht bekannt – Lu32

6

Was es für mich gelöst ist Zuhörer zu setzen wie so:

advertised.listeners = PLAINTEXT://my.public.ip:9092 
listeners = PLAINTEXT://0.0.0.0:9092 

Dies macht KAFKA Broker an alle Schnittstellen hören.

0

Für alle, die mit dem Kafka ssl-Setup kämpfen und diesen LEADER_NOT_AVAILABLE Fehler sehen. Einer der Gründe, die möglicherweise gebrochen werden, ist Keystore und Truststore. Im Keystore müssen Sie einen privaten Schlüssel des Server + signierten Serverzertifikats haben. Im Client-Truststore müssen Sie über ein CA-Zertifikat verfügen, damit der Client den kafka-Server authentifizieren kann. Wenn Sie ssl für Interbroker-Kommunikation verwenden, müssen Sie diesen Truststore auch in den server.properties der Broker festlegen, damit sie sich gegenseitig authentifizieren können.

Das letzte Stück, das ich fälschlicherweise vermisste und verursachte mir viele schmerzhafte Stunden herauszufinden, was dieser LEADER_NOT_AVAILABLE Fehler bedeuten könnte. Hoffentlich kann das jemandem helfen.

1

Da ich wollte, dass mein Kafka-Broker mit Remote-Produzenten und Konsumenten in Verbindung tritt, möchte ich nicht advertised.listener auskommentiert werden. In meinem Fall habe ich festgestellt, dass meinem Kafka-Pod keine Cluster-IP zugewiesen wurde (kafka auf kubernetes läuft). Durch Entfernen der Zeile clusterIP: None von services.yml weist das Kubernetes dem Kafka-Pod eine interne IP zu. Dies löste meine Frage von LEADER_NOT_AVAILABLE und auch Remote-Verbindung von Kafka-Produzenten/Konsumenten.

1

Wenn LEADER_NOT_AVAILABLE Fehler wirft, starten Sie einfach den kafka Broker:

/bin/kafka-server-stop.sh 

folowed von

/bin/kafka-server-start.sh config/server.properties 
+0

ja. passiert, wenn Kafka zuerst und Zoowärter danach gestartet wird. – panchicore

Verwandte Themen