神金!SpringBoot项目Kafka为啥连接不上啊!

神金!SpringBoot项目Kafka为啥连接不上啊!

1. 问题描述

某个服务连接kafka总是报如下错误:

rust 复制代码
:06:04.880 [kafka-producer-network-thread | producer-1] ERROR o.s.k.s.LoggingProducerListener - [error,261] - Exception thrown when sending a message with key='null' and payload='{"msg":"success","code":"200","data":[{"ropewayId":"2","ssId":"1","latitude":"301189677","longitude"...' to topic pos_msg:
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for pos_msg-0:120000 ms has passed since batch creation

翻译翻译大概的意思是发送消息到kafka的时候超时了,消息发送不过去。

2. 问题排查

2.1 检查kafka是否运行正常

这里我用的kafka-ui这个ui工具,非常方便查看kafka的一些情况如下(下图为博主自己的图,):

可以看到,kafka服务是在线无疑的,那么肯定是kafka客户端的问题。

2.1.1 手动连接kafka看看能否成功

(1) 首先放开端口

怀疑是9092端口未放开导致的,放开9092端口之后也无效!

(2) docker容器当中手动向kafka推送消息

由于采用docker部署的kafka,这里现在容器中看看能否向kafka成功推送消息:

bash 复制代码
docker exec -it kafka /bin/bash #进入容器
kafka-console-producer.sh --broker-list localhost:9092 --topic test # 向kafka写入消息

出现如下返回表示写入消息成功,说明至少kafka在docker容器内部是可以成功写入消息的:

(3) docker容器外部向kafka推送消息

为了方便测试,我又新建了一个kafka的docker镜像kafka-test,在这个镜像中我们来测试是否能够成功发送消息:

bash 复制代码
docker exec -it kafka-test /bin/bash #进入容器
kafka-console-producer.sh --broker-list xxx.xxx.xxx.xxx:9193 --topic test # 向kafka写入消息

如下图我们发现,kafka即使是通过公网ip也能够正常的将消息推送过去,那么问题可能出在Spring Boot的配置上

(4)向出问题的topic推送消息

虽然上面向着测试topic推送消息无论是容器内部还是容器外部都没有出问题,但是当我直接向出问题的topic推送消息的时候确出现了同样的报错:

2.2 检查Spring Boot项目本身

如果通过以上针对于kafka的测试,发现kafka服务本身是正常的,并且也能够正常的接受到消息,那么出现上面报错的原因只可能是------Spring Boot项目本身有问题!

但是博主这里无需排查这部分问题,后面遇到了再来填坑

3. 修复问题

3.1 修改为新的topic

这里不太明白为什么老的topic没办法正常推送数据,于是新建立了一个topic发现可以正常发送数据了。

3.2 kafka消费者测试

但是问题依旧没有被解决!!! 虽然修改为新的topic之后,kafka的消息能够被正常的发送过去了,但是消费者这边却不消费,真的很烦,这里继续查消费者的问题:

javascript 复制代码
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

发现根本没反应终端直接卡住,这说明消费没有成功:

最后参考这篇文章:blog.csdn.net/hxc2101/art... 將zookeeper中的/brokers/topics/__consumer_offsets主題刪除之後,消息消費回復了正常

THE END

搞了一早上才弄好原因可能是kafka重裝之後zookeeper中的消費offset不正确所导致的bug,哎真难受。

相关推荐
清汤饺子2 分钟前
用了大半年 Claude Code,我总结了 16 个实用技巧
前端·javascript·后端
ん贤3 小时前
Go channel 深入解析
开发语言·后端·golang
changhong19866 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
月月玩代码8 小时前
Actuator,Spring Boot应用监控与管理端点!
java·spring boot·后端
XPoet9 小时前
AI 编程工程化:Skill——给你的 AI 员工装上技能包
前端·后端·ai编程
码事漫谈9 小时前
从“功能实现”到“深度优化”:金仓数据库连接条件下推技术的演进之路
后端
码事漫谈10 小时前
数据库查询优化中的谓词下推策略与成本感知优化实践
后端
Amour恋空10 小时前
SpringBoot+Lombok+Logback实现日志
spring boot·后端·logback
廋到被风吹走10 小时前
【LangChain4j】特点功能及使用场景
后端·python·flask
毕设源码-邱学长10 小时前
【开题答辩全过程】以 基于Spring Boot的体育场地预约管理系统为例,包含答辩的问题和答案
java·spring boot·后端