使用 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 主题是有意义的。
但是当涉及到架构定义的位置时,我遗漏了一些东西:
如果我不使用架构注册表,但在我的项目中有 Avro 文件,我可以生成 Java 类 并在发送时将其用作抽象层消息。这非常好,但现在我在多个项目中有这个文件的多个版本。我可以想象让它们保持同步会受到伤害。
如果我使用模式注册表,上面的问题就解决了。但是现在我看不到在生成消息时从模式定义中获利的方法:我需要手动生成 GenericRecord 对象以发送到 Kafka,而且我无法查看我生成的消息是否与模式匹配。
我也看不出有什么方法可以使用模式来反序列化消费者端的消息。
在序列化和反序列化消息时,是否有任何方法可以从模式定义中获益?
我找不到任何在两端都这样做的示例,特别是使用架构注册表。
没错,您必须使用模式注册表来避免模式版本控制问题。
I would not have any way to see if the message I generated matches the schema
为什么?您可以轻松地编写一些单元测试来在生产者端验证您的 GenericRecord。
否则,我建议你使用
KafkaAvroSerializer 和 KafkaAvroDeserializer 分别在生产者和消费者方面。
两者都通过 SchemaRegistryClient 实现连接到架构注册表:CachedSchemaRegistryClient 或 MockSchemaRegistryClient(专用于单元测试)
- 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>
我正在学习 Kafka,对我来说,使用 Avro 来创建一个带有 Schema 的 Kafka 主题是有意义的。
但是当涉及到架构定义的位置时,我遗漏了一些东西:
如果我不使用架构注册表,但在我的项目中有 Avro 文件,我可以生成 Java 类 并在发送时将其用作抽象层消息。这非常好,但现在我在多个项目中有这个文件的多个版本。我可以想象让它们保持同步会受到伤害。
如果我使用模式注册表,上面的问题就解决了。但是现在我看不到在生成消息时从模式定义中获利的方法:我需要手动生成 GenericRecord 对象以发送到 Kafka,而且我无法查看我生成的消息是否与模式匹配。
我也看不出有什么方法可以使用模式来反序列化消费者端的消息。
在序列化和反序列化消息时,是否有任何方法可以从模式定义中获益?
我找不到任何在两端都这样做的示例,特别是使用架构注册表。
没错,您必须使用模式注册表来避免模式版本控制问题。
I would not have any way to see if the message I generated matches the schema
为什么?您可以轻松地编写一些单元测试来在生产者端验证您的 GenericRecord。
否则,我建议你使用
KafkaAvroSerializer 和 KafkaAvroDeserializer 分别在生产者和消费者方面。
两者都通过 SchemaRegistryClient 实现连接到架构注册表:CachedSchemaRegistryClient 或 MockSchemaRegistryClient(专用于单元测试)
- 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>