使用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中判断版本代码路径在:

相关推荐
qq_297574673 小时前
第十四篇:RabbitMQ监控与日志分析——快速排查线上问题
分布式·rabbitmq·ruby
小的~~3 小时前
CentOS7安装CDH6.3.2
hive·hdfs·kafka
2401_840192275 小时前
k8s的crd、operator、cr分别是什么?
运维·分布式·kubernetes·prometheus
covco7 小时前
星链引擎矩阵系统:分布式任务调度与万级账号批量作业自动化技术实践
分布式·矩阵·自动化·批量作业
Little Tomato9 小时前
深入浅出高并发:从 JVM 锁竞争到分布式事务的性能博弈
jvm·分布式
zshs0009 小时前
从 Raft 到 MySQL:我是怎么推导出半同步复制原理的
数据库·分布式·mysql
凯瑟琳.奥古斯特10 小时前
页面置换算法详解与对比
开发语言·分布式·职场和发展
KANGBboy10 小时前
hadoop冷热数据分离
大数据·hadoop·分布式
skilllite作者10 小时前
Evotown——开启本地化、可验证的AI智能体进化新时代
人工智能·分布式·安全·搜索引擎·agentskills
敏君宝爸11 小时前
RabbitMQ多线程消费与死信队列方案
分布式·rabbitmq