UnknownHostException kafka

时间:2014-08-26 02:52:58

标签: apache-zookeeper apache-kafka

我正在尝试设置Kafka群集(实际上是群集中的第一个节点)。

我有一个单节点zookeeper群集设置。我在一个单独的节点上设置kafka。

运行CentOS 6.4,运行IPV6,这是一个PITA。我确认机器可以使用netcat相互通信。

当我启动kafka时,我收到以下异常(导致kafka关闭)。 编辑:我启动了kafka,我必须在server.config文件中设置host.name属性。

我能够创建一个测试主题并从kafka服务器发送消息。

但是,在尝试使用消息时出现同样的错误。

任何帮助,建议?

bin/kafka-console-consumer.sh --zookeeper zk1:2181 --topic test --from-beginning Exception in thread "main" java.net.UnknownHostException: kafka: kafka: Name or service not known at java.net.InetAddress.getLocalHost(InetAddress.java:1473) at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:107) at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:128) at kafka.consumer.Consumer$.create(ConsumerConnector.scala:89) at kafka.consumer.ConsoleConsumer$.main(ConsoleConsumer.scala:178) at kafka.consumer.ConsoleConsumer.main(ConsoleConsumer.scala) Caused by: java.net.UnknownHostException: kafka: Name or service not known at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) at java.net.InetAddress.getLocalHost(InetAddress.java:1469) ... 5 more

2 个答案:

答案 0 :(得分:15)

当您运行> bin/kafka-console-consumer.sh命令时,kafka会加载ConsoleConsumer,这将尝试创建具有自动生成的使用者ID的使用者。 Kafka生成使用者ID的方法是将本地主机的名称连接到它。因此,问题在于java无法解析我正在使用的Open Stack VM上的本地主机的IP地址。

所以答案是Open Stack VM正在将本地主机名解析为kafka,这是VM的名称。我在Kafka和Zookeeper实例中设置了kafka1

所以,当java调用getLocalHost时,它正试图找到kafka的IP地址,我在

我只是在我的/ etc / hosts文件中添加了kafka的条目,一切都开始工作了!

我原以为它会解析为localhost,但它没有,它解析为vm的名称,kafka

答案 1 :(得分:1)

正如noplay所指出的那样,问题是Kafka无法解析正确的IP,例如,在没有分配公共IP的私有子网中运行的EC2实例上可能会发生这种情况。解决方案总结如下:

hostname

这将显示主机名,如ip-10-180-128-217。 然后只需更新你的/ etc / hosts

sudo nano /etc/hosts

编辑,例如

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-180-128-217