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.
Warum erhalte ich den Fehler und wie löse ich ihn?
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:
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:
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.
Tags und Links apache-kafka apache-zookeeper kafka-producer-api kafka-consumer-api