我们可以使用嵌入在 avro 记录中的模式来反序列化值吗?

Posted

技术标签:

【中文标题】我们可以使用嵌入在 avro 记录中的模式来反序列化值吗?【英文标题】:can we use the schema embedded in the avro record to deserialize the value? 【发布时间】:2021-09-23 03:39:05 【问题描述】:

我们将 avro 用于我们的 kafka 主题记录,并且需要在我们为弹性搜索提供的 kafka connect sink 中对其进行反序列化。我们目前没有任何模式注册表,因此我们正在尝试利用registryless-avro-converter 来读取连接器中的记录。我看到这个转换器还需要一个模式作为输入传递才能读取记录。但我也开始知道模式在序列化时嵌入在 avro 记录中。

所以我想了解是否有任何方法可以利用记录中的这个嵌入模式来反序列化值?

由于此模式将始终用于序列化,因此消费者端的反序列化器无需担心维护最新模式(承载模式的开销目前对我们来说不是问题)。我这方面的知识处于初学者水平,因此试图了解基础知识。我知道 JsonConverter 可以帮助我们实现这一点,但只是想知道它是否可以通过 avro 以某种方式实现。

【问题讨论】:

【参考方案1】:

根据您的链接,可以选择提供schema.path

要使用 RegistrylessAvroConverter,只需在连接器的 key.converter 或 value.converter 设置中提供它。 RAC 可以在有或没有显式读取器或写入器模式的情况下运行。如果未提供显式架构,则使用的架构将在运行时确定。

注意在运行时确定的架构可能会有所不同,具体取决于您的连接器是如何实现的以及它如何生成连接数据架构。他们建议在对源使用无模式配置之前了解连接器的语义。

【讨论】:

以上是关于我们可以使用嵌入在 avro 记录中的模式来反序列化值吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 avro 中存储模式有啥好处?

由于错误的模式类型(JSON 而不是 AVRO),Pulsar 函数无法反序列化消息

使用带有 Avro 序列化的 Debezium mongodb CDC 创建的模式太多

json文档缺少字段的Avro序列化问题

使用 kafka lib 反序列化 PRIMITIVE AVRO KEY

带有 Avro 和 Schema Repo 的 Apache Kafka - 模式 ID 在消息中的啥位置?