问题描述
kafka producer/consumer连接kafka broker超时,报错日志:
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
解决办法
假如:kafka broker部署在172.17.162.198(主机名为myhost01)机器。
方式1:修改producer/consumer本机的hosts文件,添加broker机器的host配置。
在/etc/hosts(linux)文件下,添加配置:
172.17.162.198 myhost01
方式2:修改kafka broker配置文件,设置advertised.listeners属性。(推荐)
在~/kafka/config/server.properties中,修改配置:
advertised.listeners=PLAINTEXT://172.17.162.198:9092
问题原因
如果kafka broker没有设置advertised.listeners属性,则默认将broker主机名发布到zookeeper。当kafka客户端(producer/consumer)连接到kafka集群之后,虽然刚开始通过ip直连broker成功,但是之后会更新为zookeeper中存储的meta元信息(为hostname主机名),所以通过hostname主机名称来连接会报错TimeoutException超时。