【问题标题】:Why can't I connect to Kafka/Zookeeper? (In a Docker)为什么我无法连接到 Kafka/Zookeeper? (在 Docker 中)
【发布时间】:2016-06-05 21:07:15
【问题描述】:

我在 Mac 上的 Docker 中运行 Kafka (0.10.0.0)(带有 docker-machine)。我从 Spotify 派生了我的 Dockerfile,这意味着 Kafka 和 Zookeeper 在同一个镜像中运行。

我的实例干净利落地启动并在其中四处游荡出现一切正常/正常。

在这种情况下,Docker 将端口 2181 和 9092 映射到高端口 32822 和 32820。从我正在运行的 Kafka Docker 外部,我能够成功地远程登录 192.168.99.100 32822(其中 192.168.99.100 是我的 docker-machine 的 IP)。从那里我可以发出 zookeeper 命令并获得预期的输出。

这一切看起来都很鼓舞人心,但是……然后我试试这个代码:

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()

这会产生这个错误输出:

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 watcher=org.I0Itec.zkclient.ZkClient@55397e3
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{}

我好像无法连接(大概是 Zookeeper)。为什么不呢?

【问题讨论】:

  • 好的,在 Kafka 的 server.properties 文件中阅读有关adverted.listeners 的信息。显然,这是 Kafka 在被问到时向发布者/消费者宣传的内容,所以我认为这必须是 Docker 化的,这意味着设置为 192.168.99.100: 32822 (或任何 9092 的映射端口)。我有那套,但仍然没有骰子。我将尝试在同一个配置文件中设置 listeners 属性,看看会发生什么。
  • 也更改了 listeners 属性,但是通过这 2 个更改,它仍然无法连接。 :-( 我将把 Advertisementd.listeners 设置为外部的 Docker 值,因为我认为这是正确的。将使用 listeners 属性的其他设置 - 它可能是 Kafka 内部的东西和Zookeeper,它们在同一个 Docker 中。
  • 你的 docker inspect 返回什么?

标签: apache-kafka apache-zookeeper


【解决方案1】:

在新的 kafka 流中,生产者的 ip 必须已被 kafka (docker) 知道。 Kafka 发送他们的 uuid(您可以在 kafka docker 内的 /etc/hosts 中显示此内容)并观察其响应。

总结:

将 uuid kafka docker 映射到 mac OS 的 /etc/host 中的 docker-machine。

为了帮助您,如何在 mac 中更改 etc/host 文件:

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

【讨论】:

  • 将 kafka docker 内部主机名添加到我的主机文件并将其映射到 127.0.0.1 为我修复了它。
【解决方案2】:

更简洁的方法是设置 advertised.listeners=host-ip:port,因为 advertised.host.name 和 advertised.port 在 Kafka server.properties 文件中已弃用。

如果将host-ip 设置为0.0.0.0,它将监听来自任何地方的请求。但它不安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 2015-04-24
    • 2018-04-28
    • 2019-03-23
    • 2022-01-06
    • 1970-01-01
    • 2015-01-27
    • 2018-06-28
    相关资源
    最近更新 更多