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

.Net使用Confluent.Kafka.SchemaRegistry时ValueSerializer报序列化错误

错误原因
  • 核心问题是Schema类型与序列化器不匹配:你参考JSON序列化示例编写的代码,使用的是Confluent.Kafka的JSON序列化器,该序列化器对接Schema Registry时要求注册的是标准JSON Schema,结构以类型声明开头、用type: object标记对象类型、通过properties节点定义字段。但你手动注册的是Avro格式Schema,type: record、通过fields数组定义字段是Avro Schema的专属结构,两种Schema格式规则完全不同,序列化校验阶段直接失败。
  • 注册操作遗漏关键参数:你通过curl提交Schema时没有显式指定schemaType字段,Schema Registry默认会将传入的Schema识别为Avro类型,和代码中JSON序列化器预期的Schema类型不一致,即便字段名、字段类型完全对应,格式校验也无法通过。
修复方案

根据你实际使用的序列化协议二选一即可:

  • 若计划使用Avro序列化
    • 移除代码中JSON序列化相关逻辑,引入Confluent.SchemaRegistry.Serdes.Avro依赖包,生产端使用AvroSerializer<T>作为值序列化器
    • 定义与已注册Avro Schema结构匹配的C#实体类:类名为Person、命名空间对应com.xxx,依次定义string类型的firstName、lastName属性,long类型的age属性即可
  • 若计划使用JSON Schema序列化
    • 先清理之前错误注册的Avro Schema,替换为符合规范的JSON Schema,注册请求体参考如下:
'{
  "schema": "{\"type\":\"object\",\"title\":\"Person\",\"namespace\":\"com.xxx\",\"properties\":{\"firstName\":{\"type\":\"string\"},\"lastName\":{\"type\":\"string\"},\"age\":{\"type\":\"integer\"}},\"required\":[\"firstName\",\"lastName\",\"age\"]}",
  "schemaType": "JSON"
}'
  • 重新执行curl注册命令时,必须携带schemaType: "JSON"参数,避免Schema Registry误识别Schema类型
  • 确认项目引入Confluent.SchemaRegistry.Serdes.Json依赖,C#实体类字段、类型与JSON Schema定义保持一致即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:48:28