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