2017-06-28 2 views
1

J'apprends le Kafka et pour moi il est logique d'utiliser Avro pour avoir un sujet Kafka avec Schema.Comment profiter de la définition de schéma pour sérialiser/désérialiser le message lors de l'utilisation de Avro + Schema Registry?

Mais je manque quelque chose en ce qui concerne l'endroit où mettre la définition du schéma:

  • Si je ne pas utiliser le registre de schéma, mais que le fichier Avro dans mon projet, je peux générer des classes Java et Utilisez-le comme une couche d'abstraction lors de l'envoi du message. C'est très bien mais maintenant j'ai plusieurs versions de ce fichier dans plusieurs projets. Je peux imaginer que les garder synchronisés fera mal. Si j'utilise le registre de schéma, le problème ci-dessus est résolu. Mais maintenant je ne vois pas comment tirer profit de la définition du schéma lors de la production du message: j'ai besoin de générer manuellement l'objet GenericRecord pour l'envoyer à Kafka et je n'aurais aucun moyen de voir si le message généré correspond au schéma.

  • Je ne vois également aucun moyen d'utiliser le schéma afin de désérialiser le message du côté du consommateur.

Est-il possible de tirer profit de la définition du schéma lors de la sérialisation et désérialisation le message?

Je ne trouve aucun exemple qui fait cela aux deux extrémités, en particulier en utilisant le registre de schéma.

Répondre

2

Vous avez raison, vous devez utiliser le registre de schéma pour éviter les problèmes de versionnement de schéma.

Je ne dispose d'aucun moyen de voir si le message que je généré correspond au schéma

pourquoi? vous pouvez facilement écrire des tests unitaires pour valider votre GenericRecord du côté de votre producteur.

Sinon, je vous recommande de utiliser

KafkaAvroSerializer et KafkaAvroDeserializer respectivement sur les côtés et producteurs des consommateurs.

Les deux sont reliés au registre de schéma avec une implémentation SchemaRegistryClient: CachedSchemaRegistryClient ou MockSchemaRegistryClient (dédié à vos tests unitaires)

  • sérialiseur/désérialiseur se trouve ici: io.confluent: kafka- Avro-sérialiseur: 3.2.0
  • mise en œuvre de SchemaRegistryClient se trouve ici: io.confluent: kafka-schéma-registre-client: 3.2.0

Si vous utilisez 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>