提问者:小点点

与有效负载一起发送avro模式


我想为Kafka生产者/消费者实现avro序列化器/反序列化器。可以有多个场景

  1. 作家模式和阅读器模式是相同的,永远不会改变。在这种情况下,无需将avro模式与有效负载一起发送。在消费者,我们可以使用阅读器模式本身来反序列化有效负载。这篇文章提供了示例实现
  2. 当模式会随着时间的推移而演变时,使用模式解析功能。所以avro仍然可以使用模式解析规则反序列化不同的读取器和写入器模式。所以我们需要将avro scehma与payload一起发送

我的问题如何在生产时也发送模式,以便反序列化器读取整个字节并分离实际负载和模式?我正在使用avro生成的类。注意,我不想使用模式注册表。


共1个答案

匿名用户

在任何Avro用例中,您都需要一个读取器和写入器模式,即使它们是相同的。SpeficDatumWriter(用于序列化器)和SpecficDatumReader(用于反序列化器)都采用模式。

您可以使用Kafka记录标头对AVSC字符串进行编码,并与有效负载一起发送,但请记住,Kafka记录/批处理的允许大小有上限。使用一些Schema注册表(不必是Confluent的),将开销从整个字符串减少到简单的整数ID。