Kafka-Consumer konnte beim Abrufen von Themenmetadaten "Leader nicht finden"

8

Wenn ich versuche, das Skript Kafka Producer und Consumer (0.9.0) zu verwenden, um Nachrichten von einem Thema zu pushen / zu ziehen, erhalte ich die folgenden Fehler.

Erzeugerfehler

%Vor%

Verbraucherfehler

%Vor%

Warum erhalte ich den Fehler und wie löse ich ihn?

Konfiguration

Ausführen aller Komponenten in Docker-Containern auf dem Mac ZooKeeper und Kafka laufen in separaten Docker-Containern.

Docker-Maschine (boot2docker) IP-Adresse: 192.168.99.100 ZooKeeper-Port: 2181 Kafka Port: 9092

Die Kafka-Konfigurationsdatei server.properties setzt Folgendes:

%Vor%

Befehle

Ich führe die folgenden Befehle aus dem Docker Container des kafka Servers aus. Ich habe bereits ein Thema mit einer Partition und einem Replikationsfaktor von 1 erstellt.

Beachten Sie, dass die -Leiterbezeichnung 0 ist , was möglicherweise Teil des Problems ist.

%Vor%

Ich mache dann folgendes um einige Nachrichten zu senden:

%Vor%

Dies ist der Befehl, den ich verwende, um zu versuchen, Nachrichten zu konsumieren, was den Verbraucherfehler hervorbringt, den ich oben gepostet habe.

%Vor%

Ich habe bestätigt, dass die Ports 2181 und 9092 im Kafka Docker Container geöffnet und zugänglich sind:

%Vor%     
Jordan Parmer 13.01.2016, 03:19
quelle

1 Antwort

4

Die Lösung war nicht das, was ich überhaupt erwartet hatte. Die Fehlermeldung stimmte nicht mit dem überein, was wirklich geschah.

Das primäre Problem bestand darin, das Protokollverzeichnis in Docker in mein lokales Dateisystem einzubinden. Mein docker run -Befehl verwendete eine Datenträgerbereitstellung, um den Kafka log.dir -Ordner im Container in ein lokales Verzeichnis auf der Host-VM zu mounten, die tatsächlich auf meinem Mac installiert war. Es ist der letzte Punkt, der das Problem war.

Zum Beispiel

%Vor%

Da ich auf einem Mac bin und docker-machine (z. B. boot2docker) verwende, muss ich über meinen Pfad /Users/ mounten, den boot2docker in der Host-VM automatisch mountet. Da die zugrunde liegende VM selbst einen Bind-Mount verwendet, konnte die I / O-Engine von Kafka nicht korrekt mit ihm kommunizieren. Wenn das Mount des Datenträgers in einem Verzeichnis direkt auf der Linux-Host-VM (d. H. Boot2docker-Maschine) erfolgte, würde es funktionieren.

Ich kann die genauen Details nicht erklären, da ich die Ein- und Ausgänge von Kafka I / O nicht kenne, aber wenn ich das gemountete Volume in mein Mac-Dateisystem entferne, funktioniert es.

    
Jordan Parmer 13.01.2016, 22:22
quelle