之前一直可以本地启动的kafka服务突然之间就启动失败了, 一直报错。查看日志controller.log发现报错信息:

java.io.IOException: Connection to 172.16.4.223:9092 (id: 1 rack: null) failed.
	at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:71)
	at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:289)
	at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:243)
	at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)

尝试了很多博客说的方式,包括清空日志, 删除zookeeper信息等等,重试后还是一直报错,并不能实际解决问题;因此只能自己探索

1、 首先考虑为什么连接不到这个地址,是不是端口被占用了?

lsof -i:9092

发现并没有端口占用

2、 接着考虑这个地址连接是不是有问题?查看本机的ip地址信息:

ifconfig


en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=400<CHANNEL_IO>
	ether 3c:06:30:3e:8f:35 
	inet6 fe80::1c2f:8742:5028:ac53%en0 prefixlen 64 secured scopeid 0xb 
	inet 172.16.4.225 netmask 0xfffffc00 broadcast 172.16.7.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active

为什么本机的IP地址是172.16.4.225, kafka却要连接172.16.4.223呢?,这个时候就该看一下kafka server的配置文件了

cat config/server.properties

# The address the socket server listens on. It will get the value returned from 
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
# listeners=PLAINTEXT://localhost:9092

发现默认的 listeners被注释掉了,看详细注释里说,如果该配置未指定的话,则通过java.net.InetAddress.getCanonicalHostName()获取ip地址, 是不是这个获取的有问题呢?赶紧写个代码段查看一下通过java获取的localhost是不是有问题?

public static void main(String[] args) throws UnknownHostException {
        System.out.println(InetAddress.getLocalHost());
    }

发现果然是java获取的ip地址有问题

 最后尝试把该配置取消注释,并且修改成:listeners=PLAINTEXT://localhost:9092

保存,重启kafka, 启动成功了!!!!!!

至于为什么java获取的localhost ip地址是223并没有深究了,java不在研究范围内,如有大佬了解的话,烦请告知一二,感激不尽

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐