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

如何为Avro Schema中logicalType 'date'字段添加null默认值?

解决Avro Schema中logicalType 'date'字段的null默认值问题

我来帮你搞定这个Avro序列化异常的问题——你遇到的org.apache.kafka.common.errors.SerializationException,核心原因是当前的birthday字段只定义了带logicalType: date的int类型,既没有声明允许null值,也没配置对应的默认值,所以当字段为null时,序列化器不知道该如何处理。

修改后的Avro Schema

你需要把字段类型改成联合类型(包含null和原date类型),同时添加null作为默认值,修改后的Schema如下:

{ 
  "type": "record", 
  "namespace": "my.model.package", 
  "name": "Person", 
  "version": "1", 
  "fields": [ 
    {
      "name":"birthday",
      "type": ["null", { "type": "int", "logicalType": "date"}],
      "default": null
    } 
  ] 
}

关键说明

  • 联合类型顺序:Avro的联合类型数组中,默认值的类型必须和数组第一个元素的类型匹配,所以我们把null放在了联合类型的第一位。
  • 默认值配置:添加"default": null后,当birthday字段未赋值或者为null时,序列化器会自动使用这个默认值,不会再抛出序列化异常。
  • 兼容性:修改后的Schema依然支持使用org.joda.time.LocalDate填充birthday字段,完全不影响原有正常场景的使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:10