org.apache.kafka.common.errors.TimeoutException:Topic xxx not present in metadata after 60000ms.

1.发现问题:服务中向kafka的一个topic发送消息,报了这个错误

org.apache.kafka.common.errors.TimeoutException:Topic xxx not present in metadata after 60000ms.

2.排查思路:手动连接kafka,打开两个窗口一个向xxx这个topic发送消息,另一个看能否正常消费消息。

窗口1:执行发送消息命令

bin/kafka-console-producer.sh --broker-list 192.168.65.60:9092,192.168.65.60:9093,192.168.65.60:9094 --topic xxx

窗口2:消费消息

bin/kafka-console-consumer.sh --bootstrap-server 192.168.65.60:9092,192.168.65.60:9093,192.168.65.60:9094 --from-beginning --topic xxx

我再窗口1发送消息时,窗口1报了错误

Error while fetching metadata with correlation id 0 : {test=UNKNOWN_TOPIC_OR_PARTITION}

3.问题转变:现在问题变为解决当前当前不能向topic发消息:

3.1:排查问题
在kafka安装目录的 config/server.properties配置文件中修改配置

  1. kafka部署的机器ip和提供服务的端口号
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://192.168.65.60:9093  
  1. 杀死之前已经启动的kafka
ps -ef | grep kafka
kill -9 进程id
  1. 重新启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
  1. 在重新发送消息,发现消息已经可以正常收到。
  2. 回到服务中,发现服务中调用报错依然存在
  3. 检查配置:项目中使用的springboot+kafka.application.yml中配置如下
spring: 
	kafka: 
		bootstrap-servers: kafka.server.com

这里因为kafka部署着集群,本来是用nginx监听这个域名,将请求转发到三台机器。但是实际上这里不能使用这个域名,应该直接配置三台机器的ip:port。修改配置如下

spring: 
	kafka: 
		bootstrap-servers: ip1:port1,ip2:port2,ip3:port3 

修改之后,重启服务,发现问题解决。

你可能感兴趣的:(问题处理,kafka,kafka,apache,zookeeper)