使用Flink2.0消费低版本的Kafka

目前我们线上使用的Flink2.0版本,其中使用的Kafka版本为4.0.0,所以使用的flink-kafka-connector版本为4.0.1-2.0,所以我们使用的kafka-clients为4.0版本,但是在消费低版本的kafka时报了以下错误:

UnsupportedVersionException: The node does not support FETCH with version in range 4,12.
The supported range is 0, 3.

其中查询对端kafka的api版本信息:

其中能看到远端Kafka支持的Fetch请求的版本为0, 3,而我们使用的kafka-clients:4.0.0版本支持4,12,所以是客户端版本太高了,不兼容低版本的Fetch版本,这会导致无法消费kafka的数据了。

通过AI分析:提示让降级kafka-clients版本,或者降级flink版本,使用适配低版本kafka的连接器,然而这两种方案改动都比较大。

通过分析kafka源码发现,其中的Fetch类是通过Json文件动态生成的:

复制代码
JSON 定义文件 → MessageGenerator → ApiMessageTypeGenerator → ApiMessageType.java → ApiKeys.java

JSON文件定义为:

可以看到在4.0版本中,kafka-clients最低支持是4-17。最后我们观察低于4.0版本的客户端中支持情况,发现在3.9.1版本中,Fetch是支持0-17的,所以kafka-clients最后切换到3.19.1版本即可。

其中kafka中判断版本代码路径在:

相关推荐
ly76892 天前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock
筑梦之路2 天前
docker-compose方式部署kafka集群(Kraft方式)——筑梦之路
docker·容器·kafka
灯澜忆梦2 天前
【minio】#5 | MinIO 分布式部署 + HTTPS 部署
分布式·网络协议·https·对象存储·minio
谢亮_vipxieliang2 天前
Spring Cloud 服务治理入门:注册发现、配置中心、网关限流、熔断降级与分布式一致性方案
分布式·spring·spring cloud
樱花落木兰3 天前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
ShineWinsu3 天前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
Flynt3 天前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
JosieBook3 天前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
梦帮科技3 天前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm