docker - Kafka无法解析Zookeper的DNS名称

标签 docker dns apache-kafka kubernetes apache-zookeeper

我有一个kafka 0.10.1.0群集(2个节点)和zookeeper 3.4.6(3个节点)

集群在this tutorial之后托管在Kubernetes上。

卡夫卡server.properties的相关条目:

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://kafka.internal.<companyname>.com:9092
zookeeper.connect=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

服务器启动后,每个Kafka代理都会迅速失败,并显示以下内容。对我来说,它似乎无法解析DNS名称zookeeper-1。我还尝试从zookeeper.connect中删除端口,尽管我阅读了the relevant code,但我认为这不会有所作为。

自然,我确认可以从集群内部解析zookeeper-1。群集中的其他容器可以解析名称。

我还尝试了一系列其他别名,包括服务的DNS名称和Zookeeper的负载均衡器,所有这些别名我都独立确认能够正常工作。在每种情况下,仅Kafka都会报告Name or service not known
[2016-11-22 19:55:45,506] INFO Initiating client connection, connectString=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181 sessionTimeout=6000 watcher=org.I0Itec.zkclient.ZkClient@7722c3c3 (org.apache.zookeeper.ZooKeeper)
[2016-11-22 19:56:05,571] INFO Terminate ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
[2016-11-22 19:56:05,572] FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
org.I0Itec.zkclient.exception.ZkException: Unable to connect to zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
    at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:71)
    at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1227)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:156)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:130)
    at kafka.utils.ZkUtils$.createZkClientAndConnection(ZkUtils.scala:76)
    at kafka.utils.ZkUtils$.apply(ZkUtils.scala:58)
    at kafka.server.KafkaServer.initZk(KafkaServer.scala:327)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:200)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
    at kafka.Kafka$.main(Kafka.scala:67)
    at kafka.Kafka.main(Kafka.scala)
Caused by: java.net.UnknownHostException: zookeeper-1: Name or service not known
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
    at java.net.InetAddress.getAllByName(InetAddress.java:1192)
    at java.net.InetAddress.getAllByName(InetAddress.java:1126)
    at org.apache.zookeeper.client.StaticHostProvider.<init>(StaticHostProvider.java:61)
    at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:446)
    at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:380)
    at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:69)
    ... 10 more
[2016-11-22 19:56:05,575] INFO shutting down (kafka.server.KafkaServer)
[2016-11-22 19:56:05,616] INFO shut down completed (kafka.server.KafkaServer)

与Kafka图像有关的其他信息:它基于wurstmeister/kafka-docker,但已更新为从openjdk:8-jre继承。

最佳答案

事实证明,这是Kubernetes本身的问题。

在不相关地升级到v1.4.6并且没有其他更改之后,这些名称能够正常解析。

关于docker - Kafka无法解析Zookeper的DNS名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40751101/

相关文章:

docker - 如何允许用户运行(但不能管理)Docker容器?

linux - 将最后一行 Docker 日志尾部存储到 shell 变量

email - 来自非安全服务器的 HTTPS 重定向在浏览器中给出错误消息

apache-kafka - Kafka 流 - 加入两个 ktables 调用连接函数两次

hadoop - Spark可以存储最后10分钟的数据以进行实时应用

docker - 使用 Atom/Sublime-Text 编辑 Docker 容器 FS?

docker - 如何使用 NGINX 入口 Controller 从 Cloudflare 恢复原始客户端 IP

dns - 自定义域的记录与 CNAME 记录

azure - 如何在 Azure 网站上的 GoDaddy 添加子域

apache-kafka - 事件与主题 Apache Kafka