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

本文记录了一次在服务中遇到Kafka发送消息TimeoutException的问题,通过手动测试发现是由于topic不存在或者配置不正确导致。经过检查发现项目配置中使用了域名而非直接的IP:Port,修正为集群IP和端口后,服务恢复正常。问题解决过程包括检查kafka配置文件,重启服务以及更新Spring Boot应用的Kafka配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值