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

修改Avro Record Name后别名失效的兼容问题咨询

修改Avro Record Name并保持向后兼容的可行性问题

背景与需求

使用Confluent Schema Registry,采用topicRecordName策略演化Avro Schema,需保持向后兼容且必须修改Record Name。修改原因是需要将两个Schema合并为一个事件,同时兼容旧数据。

旧Schema

{
  "type": "record",
  "name": "OldSchema",
  "namespace": "com.example.kafkaschemaregistrydemo.event",
  "fields": [
    {
      "name": "firstName",
      "type": ["null", "string"],
      "default": null
    }
  ]
}

新Schema

{
  "type": "record",
  "name": "NewSchema",
  "aliases": ["OldSchema"],
  "namespace": "com.example.kafkaschemaregistrydemo.event",
  "fields": [
    {
      "name": "firstName",
      "type": ["null", "string"],
      "default": null
    }
  ]
}

消费代码(Java)

@KafkaListener(topics = "TopicName", groupId = "test-group")
public void consume(@Payload NewSchema event){
    System.out.println("Supplier New Event");
    System.out.println("Consumed message" + event.toString());
}

遇到的错误

Cannot convert from [com.example.kafkaschemaregistrydemo.events.OldSchema] to [com.example.kafkaschemaregistrydemo.event.NewSchema] for GenericMessage....

已尝试的方法

  • 修改配置:configProps.put(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, false);
  • 同时生成旧Schema与新Schema对应的Java类
  • 尝试使用SpecificRecord和GenericRecord作为消费参数类型
  • 移除@Payload注解
  • 已通过Schema Registry的向后兼容性检查

问题

请问该需求是否可行?若不可行,有哪些替代方案?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:18