关于org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.问题的解决
今天在测试自己编写的kafka消息发送接收小例子时,一直报org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms的问题,
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
记录一下解决问题的过程。
1.首先我检查了bootstrap.servers,TOPIC = "kafkatest"与集群的对应并没有问题
2.通过查阅资料,我怀疑是我的kafka依赖与集群kafka版本不一致,因为我是用ambai搭建并管理的集群,所以与传统的手搭集群还是有些区别。
- 查看我集群的kafka版本:
命令:
cd /usr/hdp/2.5.3.0-37/kafka/libs
ls
通过图片上我们可以看到有很多类似kafka_2.10-0.10.0.2.5.3.0-37.jar的jar文件,其中2.10代表scala的版本,0.10.0代表kafka版本,2.5.3.0代表ambari的版本
然后查看我项目中的pom.xml版本,并没有问题,所以也排除了版本不一致的可能性
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka --><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.10</artifactId><version>0.10.0.0</version></dependency>
3.排除前两种情况的可能性后,我认为可能是我kafka监听端口连接不上,所以我查看了kafka配置文件中监听端口发现显示为
listeners=PLAINTEXT://localhost:6667
我意识到这可能就是问题所在,因为我连接的是远程服务器的kafka服务,这里就需要改成IP和正确的端口号,如果是手动搭建的kafka集群,直接修改配置文件即可。
- 命令(在kafka目录下):
cd config
vi server.properties
但如果你和我一样是ambari搭建的集群,那就不能直接手动改配置文件,需要在ambari管理界面去改kafka属性,因为如果集群重启,会自动还原所有手动更改的配置
去测试一下,成功连接kafka集群,并且正常收发消息,问题解决。