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

kafka-schema-registry-maven-plugin 7.2.1注册Protobuf Schema时遭遇RestClientException异常求助

Kafka Schema Registry Maven Plugin 7.2.1: RestClientException with Unexpected '<' (Code 60) and Error 50005

我来帮你排查这个棘手的问题——从错误信息来看,Schema Registry返回了HTML内容(以<开头)而不是预期的JSON响应,这说明服务端在处理插件的请求时触发了内部错误(错误码50005对应UNKNOWN_ERROR),但手动用curl发送相同的Schema却能成功,问题应该出在插件发送请求的细节上。下面是一步步的排查思路和解决方案:

1. 深挖Schema Registry的服务端日志

你提到已经检查过服务端日志,但建议开启更详细的调试日志来捕捉插件请求的完整上下文:

  • 修改Schema Registry的log4j.properties配置,将io.confluent.rest和io.confluent.kafka.schemaregistry的日志级别设为DEBUG
  • 重新启动Schema Registry,然后再次运行Maven注册命令
  • 查看服务端日志中对应请求的详细记录:包括收到的请求体、请求头,以及服务端抛出的具体异常堆栈。这能直接告诉你服务端为什么返回500错误。

2. 对比插件请求与手动curl请求的差异

既然手动请求能成功,那两者的请求一定存在细微差别:

  • 抓包对比:用Wireshark或tcpdump抓取插件发送的POST请求和curl发送的请求,对比以下内容:
    • 请求头(尤其是Content-Type、Accept等)
    • 请求体的格式(是否有多余的转义字符、编码问题)
  • 模拟插件请求:把插件日志里的请求体原封不动复制到curl命令中,加上插件使用的请求头,看是否能重现错误。比如如果插件用的Content-Type不是application/json,可能会导致服务端解析失败。

3. 排查Maven插件的依赖冲突

Maven插件可能依赖了与Schema Registry不兼容的JSON解析库(比如Jackson),导致请求体序列化出现问题:

  • 运行以下命令查看插件的依赖树:
    mvn dependency:tree -P Schema-registration -Dincludes=io.confluent,com.fasterxml.jackson
    
  • 检查是否有Jackson版本与Confluent 7.2.1依赖的版本不一致(Confluent 7.2.1通常依赖Jackson 2.13.x)。如果有冲突,在插件配置中排除冲突的依赖:
    <plugin>
      <groupId>io.confluent</groupId>
      <artifactId>kafka-schema-registry-maven-plugin</artifactId>
      <version>7.2.1</version>
      <dependencies>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.13.4.2</version>
        </dependency>
      </dependencies>
      <!-- 你的现有配置 -->
    </plugin>
    

4. 检查Protobuf文件的编码与格式

虽然你手动复制Schema能成功,但插件读取文件时可能遇到编码问题:

  • 确保Protobuf文件是UTF-8无BOM编码(Windows下容易出现BOM头问题)
  • 简化Protobuf文件到最基础的结构,比如先只保留一个简单的message,再尝试注册,排除复杂结构导致的解析问题:
    syntax = "proto3";
    package datamanager.entities;
    message LawDownloadEvent {
      string test_field = 1;
    }
    

5. 调整插件配置的细节

尝试在插件配置中添加显式参数,确保与手动请求的行为一致:

  • 显式设置normalize参数(你的请求URL中有normalize=false,但配置里没指定):
    <configuration>
      <!-- 现有配置 -->
      <normalize>false</normalize>
    </configuration>
    
  • 去掉配置中不必要的空参数(比如<compatibilityLevels/>、<previousSchemaPaths/>),避免插件解析配置时出现异常。

6. 检查Maven运行环境的代理/拦截

有时候Maven会使用系统代理,导致请求被拦截并返回HTML错误页面(比如公司防火墙的拦截页面):

  • 检查Maven的settings.xml是否配置了代理,尝试临时禁用代理再运行命令
  • 确认Maven运行环境的网络访问权限和curl使用的环境一致(比如是否用了不同的用户、不同的网络配置)

如果以上步骤都没解决问题,建议查看Confluent的官方Issue Tracker,看看是否有其他用户遇到类似的7.2.1版本插件问题,或者尝试升级到7.2.x系列的最新补丁版本(比如7.2.5),可能已经修复了这个bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:08:11