【问题现象】
查看日志,发现报如下异常。
java代码
出错原因是 InetAddress.getLocalHost 出现异常,是在自动生成consumer id时,查找本机主机名出错。
什么情况下,需要自动生成consumer id?查看 kafka document,当我们不配置时,会自动生成。
解决方案就简单了,我们在创建consumer时,手动设置即可。如下高亮代码所示,注意这是演示代码,实际代码,需要确保唯一,加入uuid和时间变量等。
配置 /etc/hosts
127.0.0.1 linux-26
其中linux-26是本机的主机名。
【总结】
为了避免该问题, 在发布时,要么安装脚本去做检查配置;要么写入安装指导手册中,检查/etc/hosts配置,是否配置了当前主机名与IP的映射。
消费者客户端切换调用High Consumer API后,出现客户端无法启动问题。
查看日志,发现报如下异常。
java代码
Caused by: java.net.UnknownHostException: linux-26: linux-26: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:119)
at kafka.javaapi.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:66)
at kafka.javaapi.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:69)
at kafka.consumer.Consumer$.createJavaConsumerConnector(ConsumerConnector.scala:105)
at kafka.consumer.Consumer.createJavaConsumerConnector(ConsumerConnector.scala)
at com.huawei.m2m.platform.pumaagent.monitor.kafka.consumer.HighLevelConsumer.start(HighLevelConsumer.java:99)
at com.huawei.m2m.platform.pumaagent.monitor.kafka.KafkaDialingTestService.startConsumer(KafkaDialingTestService.java:258)
at com.huawei.m2m.platform.pumaagent.monitor.KafkaClusterDialingTask.<init>(KafkaClusterDialingTask.java:60)
... 9 more
Caused by: java.net.UnknownHostException: linux-26: unknown error
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
出错原因是 InetAddress.getLocalHost 出现异常,是在自动生成consumer id时,查找本机主机名出错。
什么情况下,需要自动生成consumer id?查看 kafka document,当我们不配置时,会自动生成。
解决方案就简单了,我们在创建consumer时,手动设置即可。如下高亮代码所示,注意这是演示代码,实际代码,需要确保唯一,加入uuid和时间变量等。
修改后,发布测试,问题解决!
再深入思考,为什么不能自动生成?难道是软件bug?应该不是。回想起以前定位的一个问题,记录SLB-Tool 连接慢定位与解决过程 。虽然现象不同,但是跟因一模一样。原来是 /etc/hosts 少了一条配置。
配置 /etc/hosts
127.0.0.1 linux-26
其中linux-26是本机的主机名。
【总结】
为了避免该问题, 在发布时,要么安装脚本去做检查配置;要么写入安装指导手册中,检查/etc/hosts配置,是否配置了当前主机名与IP的映射。