You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka 0.10.0集群突发apiKey:3、apiVersion:5无效请求异常求助

解决Kafka 0.10.0版本InvalidRequestException异常方案

集群背景

  • 基于HDP搭建的Kafka集群,broker版本为0.10.0,共4台节点,已稳定运行4-5年
  • 近期出现如下异常日志:
[2023-11-27 14:40:52,453] ERROR Closing socket for 192.9.231.83:9092-192.9.231.83:32584 because of error (kafka.network.Processor)
org.apache.kafka.common.errors.InvalidRequestException: Error getting request for apiKey: 3 and apiVersion: 5
Caused by: java.lang.IllegalArgumentException: Invalid version for API key 3: 5
        at org.apache.kafka.common.protocol.ProtoUtils.schemaFor(ProtoUtils.java:31)
        at org.apache.kafka.common.protocol.ProtoUtils.requestSchema(ProtoUtils.java:44)
        at org.apache.kafka.common.protocol.ProtoUtils.parseRequest(ProtoUtils.java:60)
        at org.apache.kafka.common.requests.MetadataRequest.parse(MetadataRequest.java:97)
        at org.apache.kafka.common.requests.AbstractRequest.getRequest(AbstractRequest.java:48)
        at kafka.network.RequestChannel$Request.liftedTree2$1(RequestChannel.scala:96)
        at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:91)
        at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:492)
        at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:487)
        at scala.collection.Iterator$class.foreach(Iterator.scala:727)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
        at kafka.network.Processor.processCompletedReceives(SocketServer.scala:487)
        at kafka.network.Processor.run(SocketServer.scala:417)
        at java.lang.Thread.run(Thread.java:745)

已排查情况

  • 确认集群内无broker版本不匹配问题
  • num.replica.fetchers参数已设置为8,排除该参数调整的解决路径

问题根源分析

日志中apiKey=3对应MetadataRequest(元数据请求),apiVersion=5是该请求的协议版本。Kafka 0.10.0版本的MetadataRequest最高仅支持到apiVersion=2,而请求使用了版本5,说明是客户端使用了远高于broker版本的Kafka客户端库发起请求,导致broker无法解析高版本协议。

具体解决方案

1. 定位问题客户端

  • 依据日志中的客户端IP(192.9.231.83),找到对应的业务应用或服务
  • 检查该应用使用的Kafka客户端依赖版本,确认是否为2.0及以上版本(MetadataRequest v5是在Kafka 2.0版本引入的)

2. 客户端侧适配

  • 降级客户端版本:若该应用是近期新部署或升级的,将其Kafka客户端版本降级到与broker匹配的0.10.x系列版本,彻底解决协议兼容问题
  • 强制指定兼容协议版本:若无法降级客户端,可在客户端配置中添加以下参数,强制使用broker兼容的旧版本协议:
    api.version.request=false
    broker.version.fallback=0.10.0.0
    metadata.max.age.ms=300000
    

3. 集群侧临时防护(可选)

  • 在broker配置中开启log.unknown.version=true,让broker记录未知版本请求的详细信息,便于后续排查
  • 若存在大量此类无效请求,可通过防火墙或Kafka的IP白名单机制限制问题客户端访问,避免占用集群资源

4. 长期解决方案

Kafka 0.10.0版本已停止维护多年,存在大量安全漏洞和兼容性缺陷,建议逐步将集群升级到稳定的新版本(如2.8.x或3.x系列),从根源上消除版本兼容隐患。

内容的提问来源于stack exchange,提问作者jessica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:50:03