使用 Avro + Schema Registry 时如何从模式定义中获益 serialize/deserialize 消息?

How to profit from the schema definition to serialize/deserialize the message when using Avro + Schema Registry?

我正在学习 Kafka,对我来说,使用 Avro 来创建一个带有 Schema 的 Kafka 主题是有意义的。

但是当涉及到架构定义的位置时,我遗漏了一些东西:

在序列化和反序列化消息时,是否有任何方法可以从模式定义中获益?

我找不到任何在两端都这样做的示例,特别是使用架构注册表。

没错,您必须使用模式注册表来避免模式版本控制问题。

I would not have any way to see if the message I generated matches the schema

为什么?您可以轻松地编写一些单元测试来在生产者端验证您的 GenericRecord。

否则,我建议你使用

KafkaAvroSerializerKafkaAvroDeserializer 分别在生产者和消费者方面。

两者都通过 SchemaRegistryClient 实现连接到架构注册表:CachedSchemaRegistryClientMockSchemaRegistryClient(专用于单元测试)

  • Serializer/Deserializer 可以在这里找到: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>