Utiliser le registre de schémas

Schema Registry fournit un référentiel partagé de schémas qui permet aux applications d'interagir les unes avec les autres de manière flexible.

Les applications créées ont souvent besoin d'un moyen de partager les métadonnées entre trois dimensions :

  • Format de données

  • Schéma

  • Sémantique ou signification des données

La valeur fournie par Schema Registry et les applications qui s'y intègrent sont les suivantes :

  • Registre centralisé : fournir un schéma réutilisable pour éviter d'attacher un schéma à chaque élément de données

  • Gestion des versions : définir la relation entre les versions de schéma afin que les consommateurs et les émetteurs puissent évoluer à des taux différents

  • Validation de schéma : Activer la conversion de format générique, le routage générique et la qualité des données

Pourquoi utiliser Schema Registry ?

En raison de la nature découplée de Kafka, les producteurs et les consommateurs ne communiquent pas directement. Au lieu de cela, le transfert d'informations se fait via la rubrique Kafka. Dans le même temps, le consommateur doit toujours connaître le type de données que le producteur envoie pour les désérialiser. Si le fournisseur commence à envoyer des données incorrectes à Kafka ou si le type de données est modifié, les consommateurs en aval commencent à se casser. Il doit exister un moyen d'avoir un type de données commun convenu.

C'est là que le registre de schémas intervient. Schema Registry est une application qui réside en dehors du cluster Kafka et gère la distribution des schémas au producteur et au consommateur en stockant une copie du schéma dans son cache local.

Cas d'emploi

Schema Registry fournit un ensemble d'API Rest (avec des interfaces Web) pour rendre le schéma disponible de manière centralisée pour les applications client. Les cas d'emploi courants sont les suivants :

  1. Enregistrement et interrogation d'un schéma pour une rubrique Kafka

    Lorsque Kafka est intégré aux déploiements d'entreprise, vous disposez généralement de nombreux sujets Kafka différents utilisés par différentes applications et utilisateurs.

  2. Lecture/désérialisation et écriture/sérialisation de données depuis et vers un sujet Kafka

    Outre le stockage des métadonnées de schéma, un autre cas d'emploi clé consiste à stocker des métadonnées pour le format de lecture et d'écriture des données. Schema Registry prend en charge ce cas d'utilisation en fournissant des fonctionnalités permettant de stocker des fichiers JAR pour les sérialiseurs et les désérialiseurs, puis de mettre en correspondance les séries avec le schéma.

  3. Gestion des flux de données avec routage basé sur un schéma

    Si vous utilisez NiFi pour déplacer différents types d'événement syslog vers des systèmes en aval, vous devez analyser l'événement syslog pour extraire le type d'événement et acheminer l'événement vers un certain système en aval (différentes rubriques Kafka, par exemple) en fonction du type d'événement.

  4. L'évolution dynamique du schéma permet à Schema d'évoluer sur une période donnée.

    Toute mise à jour dans le schéma crée une nouvelle révision qui est communiquée aux destinataires.

  5. L'application/validation du schéma côté consommateur peut être réalisée en toute transparence pour la qualité des données.

Démarrer le fournisseur/client Kafka à l'aide du client Java

  1. Dans pom.xml, ajoutez les éléments suivants à la configuration du fournisseur de portlets Kafka :
    import com.hortonworks.registries.schemaregistry.serdes.avro.kafka.KafkaAvroSerializer;
    ..
    config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.setProperty("schema.registry.url", "http://<host name>:9093/api/v1");
    config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); 
    config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class.getName());

    Les configurations sur lesquelles se concentrer sont les suivantes :

    • schema.registry.url
    • key.serializer
    • value.serializer
  2. Ajoutez le texte suivant à la configuration du consommateur Kafka :
    import com.hortonworks.registries.schemaregistry.serdes.avro.kafka.KafkaAvroSerializer;
    ..
    config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.setProperty("schema.registry.url", "http://<host name>:9093/api/v1");
    config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); 
    config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class.getName());
  3. Une fois le registre de schémas démarré, accédez à l'interface utilisateur Web : http://<FQDN>:9093

Ajout du registre de schémas Apache aux clusters ODH

Vous pouvez ajouter le registre de schémas Apache aux clusters Big Data Service à l'aide d'Ambari

Schema Registry n'est pas installé par défaut sur un cluster Big Data Service. Le registre de schémas prend en charge deux types de stockage pour le stockage des métadonnées de schéma.

  • Mysql : valeur à définir : mysql
  • En mémoire : valeur à définir : inmemory

Pour définir le type de stockage approprié, définissez le paramètre Storage Type sous la section Schema-registry avancée de l'interface utilisateur Ambari.

Pour définir Mysql en tant que type de stockage, plusieurs tables doivent être créées avant de démarrer le serveur. Cette opération est effectuée automatiquement lorsque le paramètre Storage Type est défini sur mysql.

Remarque

Le paramètre MySql Passowrd est obligatoire lors de l'installation du service Schema Registry. Ce mot de passe est utilisé pour accéder aux informations de schéma stockées dans les tables Mysql.

Pour les clusters Big Data Service 3.0.28 ou versions antérieures, MySql Passowrd doit être réinitialisé manuellement à partir du noeud un0 en exécutant la commande suivante :

sudo update_mysql_password registry <password>
                            

Indiquez ce mot de passe lors de l'installation du service Schema Registry.

  1. Accédez à Apache Ambari.
  2. Sélectionnez Ajouter un service dans le menu Services.
  3. Dans l'assistant Ajouter un service, sélectionnez Registre des schémas, puis Suivant.
  4. Suivant.
  5. Sous la page Personnaliser les services pour le paramètre Advanced schema-registry, mettez à jour le mot de passe Mysql avec la valeur appropriée.

    Le mot de passe de la base de données de registre MySQL est réinitialisé.

  6. Sélectionnez Suivant.
  7. Vérifiez la configuration, puis sélectionnez Déployer.
  8. Attendez la fin de l'installation, puis sélectionnez Next.
  9. Sélectionnez Terminé.
  10. Redémarrez tous les services requis à partir du menu Service.
  11. Pour vérifier la réussite de l'installation, accédez au registre de schémas à partir du tableau de bord Apache Ambari, puis sélectionnez Actions.
  12. Sélectionnez Exécuter la vérification du service.