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
相关产品推荐
相关产品推荐

