2016-06-05 6 views
1

Ich betreibe Kafka (0.10.0.0) in einem Docker auf einem Mac (mit Docker-Maschine). Ich habe meine Dockerfile von Spotify abgeleitet, was bedeutet, dass Kafka und Zookeeper auf demselben Bild laufen.Warum kann ich keine Verbindung zu Kafka/Zookeeper herstellen? (In einem Docker)

Meine Instanz startet sauber und stochert darin erscheint alles ist normal/OK.

Docker weist in diesem Fall die Ports 2181 und 9092 den High-Ports 32822 und 32820 zu. Von außerhalb meines laufenden Kafka Docker kann ich erfolgreich telnet 192.168.99.100 32822 (wo 192.168.99.100 ist die IP meines Docker-Maschine). Von dort kann ich einen Zookeeper-Befehl ausgeben und die erwartete Ausgabe erhalten.

Es scheint alles so ermutigend, aber ... Ich versuche dann diesen Code:

val numPartitions = 4 
val replicationFactor = 1 
val topicConfig = new java.util.Properties 

// zookeeper = "192.168.99.100:32822" 
val zkClient = ZkUtils(zookeeper, 10000, 10000, false) 
try { 
    AdminUtils.createTopic(zkClient, topic, numPartitions, replicationFactor, topicConfig) 
} catch { 
    case k: kafka.common.TopicExistsException => // do nothing...topic exists 
} 
zkClient.close() 

Dieser diesen Fehler Ausgabe erzeugt:

DEBUG ZkConnection - Creating new ZookKeeper instance to connect to 192.168.99.100:32822. 
INFO ZkEventThread - Starting ZkClient event thread. 
INFO ZooKeeper - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 
INFO ZooKeeper - Client environment:host.name=172.25.42.82 
INFO ZooKeeper - Client environment:java.version=1.8.0_60 
INFO ZooKeeper - Client environment:java.vendor=Oracle Corporation 
INFO ZooKeeper - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre 
INFO ZooKeeper - Client environment:java.class.path=/usr/local/Cellar/sbt/0.13.11/libexec/sbt-launch.jar 
INFO ZooKeeper - Client environment:java.library.path=/Users/wmy965/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 
INFO ZooKeeper - Client environment:java.io.tmpdir=/var/folders/ph/ccz4n1qs62n0bn8mqdg94gswt1jlwk/T/ 
INFO ZooKeeper - Client environment:java.compiler=<NA> 
INFO ZooKeeper - Client environment:os.name=Mac OS X 
INFO ZooKeeper - Client environment:os.arch=x86_64 
INFO ZooKeeper - Client environment:os.version=10.11.5 
INFO ZooKeeper - Client environment:user.name=wmy965 
INFO ZooKeeper - Client environment:user.home=/Users/wmy965 
INFO ZooKeeper - Client environment:user.dir=/Users/wmy965/git/LateKafka 
INFO ZooKeeper - Initiating client connection, connectString=192.168.99.100:32822 sessionTimeout=10000 [email protected] 
DEBUG ClientCnxn - zookeeper.disableAutoWatchReset is false 
DEBUG ZkClient - Awaiting connection to Zookeeper server 
INFO ZkClient - Waiting for keeper state SyncConnected 
INFO ClientCnxn - Opening socket connection to server 192.168.99.100/192.168.99.100:32822. Will not attempt to authenticate using SASL (unknown error) 
WARN ClientCnxn - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.ConnectException: Connection refused 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081) 
DEBUG ClientCnxnSocketNIO - Ignoring exception during shutdown input 
java.nio.channels.ClosedChannelException 
    at sun.nio.ch.SocketChannelImpl.shutdownInput(SocketChannelImpl.java:780) 
    at sun.nio.ch.SocketAdaptor.shutdownInput(SocketAdaptor.java:399) 
    at org.apache.zookeeper.ClientCnxnSocketNIO.cleanup(ClientCnxnSocketNIO.java:200) 
    at org.apache.zookeeper.ClientCnxn$SendThread.cleanup(ClientCnxn.java:1185) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1110) 
DEBUG ClientCnxnSocketNIO - Ignoring exception during shutdown output 
java.nio.channels.ClosedChannelException 
    at sun.nio.ch.SocketChannelImpl.shutdownOutput(SocketChannelImpl.java:797) 
    at sun.nio.ch.SocketAdaptor.shutdownOutput(SocketAdaptor.java:407) 
    at org.apache.zookeeper.ClientCnxnSocketNIO.cleanup(ClientCnxnSocketNIO.java:207) 
    at org.apache.zookeeper.ClientCnxn$SendThread.cleanup(ClientCnxn.java:1185) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1110) 
INFO ClientCnxn - Opening socket connection to server 192.168.99.100/192.168.99.100:32822. Will not attempt to authenticate using SASL (unknown error) 
INFO ClientCnxn - Socket connection established to 192.168.99.100/192.168.99.100:32822, initiating session 
DEBUG ClientCnxn - Session establishment request sent on 192.168.99.100/192.168.99.100:32822 
INFO ClientCnxn - Session establishment complete on server 192.168.99.100/192.168.99.100:32822, sessionid = 0x155225c51720000, negotiated timeout = 10000 
DEBUG ZkClient - Received event: WatchedEvent state:SyncConnected type:None path:null 
INFO ZkClient - zookeeper state changed (SyncConnected) 
DEBUG ZkClient - Leaving process event 
DEBUG ZkClient - State is SyncConnected 
DEBUG ClientCnxn - Reading reply sessionid:0x155225c51720000, packet:: clientPath:null serverPath:null finished:false header:: 1,8 replyHeader:: 1,1,-101 request:: '/brokers/ids,F response:: v{} 

Es sieht aus wie ich nicht vermutlich anschließen kann (zum Tierpfleger). Warum nicht?

+0

Ok, habe irgendwo gelesen, über advertised.listeners in server.properties Datei Kafka. Offenbar kündigt dies Kafka Publishern/Konsumenten an, wenn sie gefragt werden, also denke ich, dass dies Docker-ised sein muss, was bedeutet, dass 192.168.99.100: 32822 gesetzt wird (oder was auch immer der zugeordnete Port für 9092 ist). Ich habe das Set aber immer noch keine Würfel. Ich werde versuchen, die Listeners-Eigenschaft in der gleichen Konfigurationsdatei zu setzen und zu sehen, was passiert. – Greg

+0

Die Listeners-Eigenschaft wurde ebenfalls geändert, aber mit diesen beiden Änderungen wird immer noch keine Verbindung hergestellt. :-(Ich werde die advertised.listener auf externe-Docker-Werte setzen, da ich denke, das ist richtig. Gehen Sie mit anderen Einstellungen für die Listener-Eigenschaft tho - es kann etwas internes zu Kafka und sein Zookeeper, die sich in demselben Docker befinden – Greg

+0

Was überprüft Ihr Docker return – t6nand

Antwort

2

In neuen Kafka-Streams muss die IP des Producers von kafka (docker) erkannt worden sein. Kafka sendet ihre UUID (Sie können dies in/etc/hosts im kafka docker anzeigen) und erwarten eine Antwort darauf.

Zusammenfassung:

Karte Uuid kafka Docker Andockfenster-Maschine in/etc/host von Mac OS.

Ihnen dabei helfen, wie etc/hosts Datei in Mac zu ändern:

https://www.tekrevue.com/tip/edit-hosts-file-mac-os-x/

+0

Den internen Hostnamen des kafka dockers zu meiner Host-Datei hinzufügen und ihn auf 127.0.0.1 setzen, habe ich für mich repariert. – Wil

Verwandte Themen