Avro:可以避免生产者和消费者之间共享“ Schema”吗?

时间:2020-01-30 11:14:00

标签: avro

一些完善的消息传递系统(无论哪个)被用作众多小型和独立(微型)服务之间的“并发胶水”。

因此,在某个特定的地方,可以生成消息并从中使用消息。

我正在尝试将Avro设置为二进制格式,并且Schema困扰我:我不希望维护实际Schema的全局存储,我是d让我的消费者假设某些属性确实存在,如果不存在,只需记录诸如“格式错误”之类的消息,然后立即切换到下一个。这意味着:生产者将使用一个Schema进行生产,而消费者将使用另一个Schema进行消费,这当然会共享某些属性,可能以不同的顺序 >。我可以用Avro来实现还是滥用?

1 个答案:

答案 0 :(得分:1)

http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html

解析此[Avro]二进制数据的唯一方法是在模式旁边读取数据,该模式告诉您接下来需要什么类型。您需要具有与所使用数据的编写者完全相同的模式版本。如果您使用了错误的架构,则解析器将无法生成二进制数据的开头或结尾。

那么Avro如何支持架构演变?很好,尽管您需要知道写入数据的确切模式(作者的模式),但不必与消费者期望的模式(读者的模式)相同。实际上,您可以为Avro解析器提供两个不同的架构,它使用解析规则将数据从写入者架构转换为读取器架构。