阿里云kafka消息写入topic失败

1. 问题现象描述

20240918,14:22,测试反馈说kafka有问题,生产者写入消息的时候报错,并发了一张日志截图,主要报错如下:

to topic xxxx: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for xxxx-0:120000 ms has passed since batch creation。

The cloud topic xxxx-0 dose not support idempotent and transaction, please use the local topic

第一条报错的大概意思是写入超时,也就是网络有问题。第二条报错是说topic不支持幂等和事务,请使用本地topic。

2. 排查过程

2.1 检查网络环境

这个kafka实例是用的阿里云的,服务和配置我都检查过,一个多月没改动了,但还是根据报错检查一下,我先自行在pod中telnet了一下kafka实例的地址,检查了白名单,随后又按照阿里云官方提供的检查方式,检查了网络、生产、消费等方面,都显示正常。

2.2 检查kafka topic存储类型

阿里云上的kafka,创建topic时,可选的存储是云存储和local存储,我这边所有的topic默认都是使用的云存储,但是根据云厂商的回复,客户端版本如果使用3.0及以上的话,是没有办法使用幂等的,就会导致消息发送失败,刚好我问了一下开发,说用的是3.7.1,但开发说已经关闭了幂等功能。

好吧,到这里排查不下去了,准备抓包。

2.3 测试写入其他topic

这里让开发改了一下代码,看看写入其他topic是否正常,测试结果没问题,写其他topic能写。

2.4 抓包

这里把版本回滚到了消息写入异常的这一版,pod中用tcpdump 抓和kafka通信的包,让开发手动触发消息写入,报文截图如下:

可以看到上面kafka客户端版本是3.7.0,我寻思这跟开发说的一不一样的,于是把版本发到能够正常写入消息的这一版,继续抓包,报文如下:

新发现,能写的这个客户端是3.7.1,随后反馈给开发。

3. 问题原因

最后跟开发沟通,是因为他在3.7.1这个客户端版本,关闭了使用幂等功能,所以消息能写了,其实不换客户端版本也没关系。

最后问开发老版本3.7.0是不是没关使用幂等,开发说不记得了,我服了!

相关推荐
indexsunny4 小时前
互联网大厂Java求职面试实战:基于电商场景的技术问答及解析
java·spring boot·redis·kafka·security·microservices·面试指导
百锦再6 小时前
Java中的日期时间API详解:从Date、Calendar到现代时间体系
java·开发语言·spring boot·struts·spring cloud·junit·kafka
百锦再9 小时前
Java IO详解:File、FileInputStream与FileOutputStream
java·开发语言·jvm·spring boot·spring cloud·kafka·maven
百锦再9 小时前
Java InputStream和OutputStream实现类完全指南
java·开发语言·spring boot·python·struts·spring cloud·kafka
予枫的编程笔记10 小时前
【Kafka基础篇】RabbitMQ、RocketMQ、Kafka怎么选?3种主流MQ核心差异实测解析
kafka·rabbitmq·rocketmq·分布式流处理·发布订阅模型·消息队列(mq)·点对点模型
予枫的编程笔记10 小时前
【Kafka基础篇】Kafka Producer发送机制全链路拆解:从拦截器到网络发送一文吃透
java·kafka·消息队列·分布式消息·producer发送机制·kafka核心原理·消息发送优化
百锦再1 天前
Java Map常用方法和实现类深度详解
java·开发语言·spring boot·struts·kafka·tomcat·maven
百锦再1 天前
HashMap、Hashtable、TreeMap异同深度详解
jvm·spring boot·struts·spring cloud·缓存·kafka·tomcat
百锦再2 天前
Java之Volatile 关键字全方位解析:从底层原理到最佳实践
java·开发语言·spring boot·struts·kafka·tomcat·maven
百锦再2 天前
Java JUC并发编程全面解析:从原理到实战
java·开发语言·spring boot·struts·kafka·tomcat·maven