使用Apache Avro别名重命名字段后,消费者反序列化消息报错求助
Avro别名反序列化异常解决方法
问题根源
你搞反了Avro别名的作用方向:生产者Schema中给eventType加别名event,是让生产者能兼容读取旧字段名event的数据,但消费者用的旧Schema(字段名event)并不知道新字段名eventType是自己的别名,所以反序列化时找不到event字段,抛出异常。
解决方案
方案1:修改消费者Schema(推荐)
给消费者的event字段添加别名eventType,让它能识别生产者发送的eventType字段并映射到自身的event字段:
{ "name": "event", "aliases": ["eventType"], // 新增别名对应生产者的新字段名 "type": [ "null", "string" ] }
方案2:调整生产者逻辑(若无法修改消费者Schema)
如果不能修改消费者Schema,可调整生产者的序列化逻辑,确保发送的数据使用旧字段名event;或者将生产者Schema中的主字段名改为event,eventType作为别名,但这会违背你重命名字段的初衷。
错误信息解释
报错org.apache.avro.AvroTypeException: Found com.Employee, expecting com.Employee, missing required field event的核心是:消费者Schema期望找到event字段,但生产者发送的是eventType,消费者Schema未配置对应别名,因此判定字段缺失。
内容的提问来源于stack exchange,提问作者VKR
相关产品推荐
相关产品推荐

