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

