【问题标题】:How to let Kafka Avro consumer read payload with the specific schema id / version but without generating the Avro schema java class?如何让 Kafka Avro 消费者读取具有特定模式 id/版本但不生成 Avro 模式 java 类的有效负载?
【发布时间】:2021-05-14 11:42:40
【问题描述】:

我正在使用 Avro 和模式注册表。我想知道如何让消费者通过在 Java 项目中指定模式 id 来读取数据,而无需 Avro 模式的 Java 类。据我了解,我们无法使用通用记录指定模式版本,我想知道通用记录如何处理模式演变。对于Specific Record,我们必须在Java项目中为Avro schema生成Java类,在云应用中可能不太方便。有没有办法在我的 Java 项目中选择模式 ID 作为配置,而无需从模式注册表中下载模式文件?非常感谢!

【问题讨论】:

  • 你能澄清“可能不方便”吗?无论序列化格式如何,您总是需要更新您的消费者代码以读取新的记录字段。
  • 我同意你的看法。我在想,如果有一种更简单的方法可以将模式 id 配置放入消费者 Java 项目中,例如放入主题名称配置,那么我们可能不需要生成模式类。我想我在另一个关于在云项目中生成模式类的问题中得到了你的答案。非常感谢!!

标签: apache-kafka avro confluent-schema-registry


【解决方案1】:

您可以查看从无法绕过/覆盖 ID 查找的消息中获取架构 ID 的 source code here

这并不是说您可以编写自己的反序列化器或小型 Kafka Streams 作业,在转发到 Confluent 反序列化器之前覆盖消息中的 ID

Avro 需要读取器和写入器模式,并且 ID 查找是针对写入器的。当您提供特定记录时,您定义的阅读器不一定来自注册表,只需要与书面消息兼容

【讨论】:

  • 再次感谢您!太有帮助了!我查看了源代码,感谢详细而清晰的解释!
猜你喜欢
  • 2021-05-09
  • 2021-02-13
  • 2017-03-14
  • 2018-07-04
  • 2020-07-19
  • 2020-11-09
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多