我想为Kafka生产者/消费者实现avro串行化器/反串行化器。可以有多个场景
1.写入器架构和读取器架构相同,永远不会更改。在这种情况下,不需要将avro架构与负载沿着发送。在使用者端,我们可以使用读取器架构本身来反序列化负载。此post中提供了示例实现
1.当模式随时间变化时使用模式解析特性。因此avro仍然可以使用模式解析规则反序列化不同的读取器和写入器模式。因此我们需要发送avro scehma沿着有效载荷
我的问题如何在生成时发送模式,以便反序列化器读取整个字节并分离出实际的有效负载和模式?我正在使用avro生成的类。注意,我不想使用模式注册表。
1条答案
按热度按时间qkf9rpyu1#
在任何Avro用例中,您都需要一个读取器和写入器模式,即使它们是相同的。
SpecificDatumWriter
(用于序列化程序)和SpecificDatumReader
(用于反序列化程序)都采用一个模式。您可以使用Kafka记录头来编码AVSC字符串,并与有效负载沿着发送,但请记住Kafka记录/批处理有一个允许大小的上限。使用 some Schema Registry(不必是Confluent的),将开销从整个字符串减少到简单的整数ID。