当使用avro+schema registry时,如何利用模式定义来序列化/反序列化消息?

lzfw57am  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(502)

我正在学习Kafka,对我来说,用avro来描述Kafka的主题是有意义的。
但是,当涉及到如何放置模式定义时,我遗漏了一些东西:
如果我不使用schema注册表,但是在我的项目中有avro文件,我可以生成java类,并在发送消息时将其用作抽象层。这是非常好的,但现在我有这个文件在多个项目的多个版本。我可以想象,保持它们的同步会带来伤害。
如果我使用schema注册表,上面的问题就解决了。但是现在,在生成消息时,我看不到从模式定义中获益的方法:我需要手动生成genericord对象以发送给kafka,而且我无法查看生成的消息是否与模式匹配。
我也看不到使用模式来反序列化使用者端的消息的方法。
在序列化和反序列化消息时,是否有任何方法可以从模式定义中获益?
我找不到任何这样做的例子,特别是使用schema注册表。

eni9jsuy

eni9jsuy1#

对,您必须使用模式注册表来避免模式版本问题。
我无法查看生成的消息是否与模式匹配
为什么?您可以轻松地编写一些单元测试来验证生产者端的genericord。
否则,我建议你使用
Kafka夫罗塞利泽和Kafka夫罗塞利泽分别在生产者和消费者方面。
两者都通过schemaregistryclient实现连接到schema注册表:cachedschemaregistryclient或mockschemaregistryclient(专用于单元测试)
序列化程序/反序列化程序可以在以下位置找到:io。confluent:kafka-avro-serializer:3.2.0
schemaregistryclient实现可以在这里找到:io。confluent:kafka-schema-registry-client:3.2.0
如果您使用maven:

<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-avro-serializer</artifactId>
    <version>3.2.0</version>
</dependency>

<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-schema-registry-client</artifactId>
    <version>3.2.0</version>
</dependency>

相关问题