Schema Registry verwenden

Schema Registry stellt ein gemeinsames Repository von Schemas bereit, mit dem Anwendungen flexibel miteinander interagieren können.

Anwendungen, die erstellt wurden, benötigen häufig eine Möglichkeit, Metadaten über drei Dimensionen hinweg gemeinsam zu nutzen:

  • Datenformat

  • Schema

  • Semantik oder Bedeutung der Daten

Der von der Schema-Registry bereitgestellte Wert und die darin integrierten Anwendungen lauten wie folgt:

  • Zentralisierte Registry: Geben Sie ein wiederverwendbares Schema an, um zu vermeiden, dass jedem Datenelement ein Schema zugeordnet wird

  • Versionsverwaltung: Definieren Sie die Beziehung zwischen Schemaversionen, sodass sich Verbraucher und Producer zu unterschiedlichen Raten entwickeln können

  • Schemavalidierung: Allgemeine Formatkonvertierung, generisches Routing und Datenqualität aktivieren

Warum Schema Registry?

Aufgrund der entkoppelten Natur von Kafka kommunizieren Produzenten und Verbraucher nicht direkt. Stattdessen erfolgt der Informationsaustausch über das Kafka-Thema. Gleichzeitig muss der Verbraucher immer noch wissen, welche Art von Daten der Produzent sendet, um sie zu deserialisieren. Wenn der Producer beginnt, fehlerhafte Daten an Kafka zu senden, oder wenn der Datentyp geändert wird, brechen die Downstream-Consumer ab. Es muss eine Möglichkeit geben, einen gemeinsamen Datentyp zu haben, der vereinbart ist.

Hier kommt Schema Registry ins Spiel. Schema Registry ist eine Anwendung, die sich außerhalb des Kafka-Clusters befindet und die Verteilung von Schemas an den Producer und Consumer verwaltet, indem eine Kopie des Schemas im lokalen Cache gespeichert wird.

Anwendungsfälle

Schema Registry stellt eine Gruppe von Rest-APIs (mit Webschnittstellen) bereit, um das Schema zentral für Clientanwendungen verfügbar zu machen. Gängige Anwendungsfälle:

  1. Schema für ein Kafka-Topic registrieren und abfragen

    Wenn Kafka in Unternehmensorganisations-Deployments integriert ist, werden in der Regel viele verschiedene Kafka-Themen von verschiedenen Apps und Benutzern verwendet.

  2. Lesen/Deserialisieren und Schreiben/Serialisieren von Daten aus und zu einem Kafka-Thema

    Zusätzlich zum Speichern von Schemametadaten besteht ein weiterer wichtiger Anwendungsfall darin, Metadaten für das Format des Lesevorgangs und der Schreibweise von Daten zu speichern. Schema Registry unterstützt diesen Anwendungsfall, indem sie Funktionen zum Speichern von JAR-Dateien für Serializer und Deserializer bereitstellt und dann die Serdes dem Schema zuordnet.

  3. Datenflussverwaltung mit schemabasiertem Routing

    Wenn Sie NiFi verwenden, um verschiedene Typen von syslog-Ereignissen in nachgelagerte Systeme zu verschieben, müssen Sie das Ereignis syslog parsen, um den Ereignistyp zu extrahieren, und das Ereignis basierend auf dem Ereignistyp an ein bestimmtes nachgelagertes System (z.B. andere Kafka-Themen) weiterleiten.

  4. Die dynamische Schemaentwicklung ermöglicht die Entwicklung des Schemas über einen bestimmten Zeitraum.

    Alle Aktualisierungen im Schema erstellen eine neue Revision, die an Consumer kommuniziert wird.

  5. Die Durchsetzung/Validierung des Schemas von der Consumer-Seite kann für die Datenqualität nahtlos erreicht werden.

Kafka-Producer/Consumer mit Java-Client starten

  1. Fügen Sie in pom.xml der Kafka-Producerkonfiguration Folgendes hinzu:
    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());

    Zu fokussierende Konfigurationen sind:

    • schema.registry.url
    • key.serializer
    • value.serializer
  2. Fügen Sie der Kafka-Consumer-Konfiguration folgenden Text hinzu:
    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. Greifen Sie nach dem Start der Schema-Registry auf die Web-UI zu: http://<FQDN>:9093

Apache Schema Registry zu ODH-Clustern hinzufügen

Sie können Apache Schema Registry mit Ambari zu Big Data Service-Clustern hinzufügen

Schema-Registry ist nicht standardmäßig in einem Big Data Service-Cluster installiert. Die Schema-Registry unterstützt zwei Arten von Speichern zum Speichern von Schemadaten.

  • Mysql: Einzustellender Wert: mysql
  • In-Memory: Einzustellender Wert: inmemory

Um den entsprechenden Speichertyp festzulegen, legen Sie den Parameter Storage Type in der Ambari-UI im Abschnitt "Schema-Registry erweitern" fest.

Um Mysql als Speichertyp festzulegen, müssen vor dem Hochfahren des Servers mehrere Tabellen erstellt werden. Dies geschieht automatisch, wenn der Parameter Storage Type auf mysql gesetzt ist.

Hinweis

Der Parameter MySql Passowrd ist obligatorisch, wenn Sie den Schema-Registry-Service installieren. Dieses Kennwort wird für den Zugriff auf die Schemainformationen verwendet, die in den Mysql-Tabellen gespeichert sind.

Bei Big Data Service 3.0.28-Clustern oder früheren Clustern muss MySql Passowrd manuell vom Knoten un0 zurückgesetzt werden, indem Sie den folgenden Befehl ausführen:

sudo update_mysql_password registry <password>

Geben Sie dieses Kennwort bei der Installation des Schemaregistrierungsservice an.

  1. Öffnen Sie Apache Ambari.
  2. Wählen Sie im Menü Services die Option "Service hinzufügen".
  3. Wählen Sie im Assistenten "Service hinzufügen" die Option Scheme-Registry und dann Weiter aus.
  4. Nächster.
  5. Aktualisieren Sie auf der Seite Services anpassen für den Parameter Advanced schema-registry das Mysql-Kennwort auf den entsprechenden Wert.

    Dadurch wird das Kennwort für die Registry-Datenbank MySQL zurückgesetzt.

  6. Wählen Sie Weiter.
  7. Prüfen Sie die Konfiguration, und wählen Sie Bereitstellen aus.
  8. Warten Sie, bis die Installation abgeschlossen ist, und wählen Sie Weiter.
  9. Wählen Sie Abgeschlossen aus.
  10. Starten Sie alle erforderlichen Services im Menü Service neu.
  11. Um eine erfolgreiche Installation zu prüfen, rufen Sie Schema Registry im Apache Ambari-Dashboard auf, und wählen Sie Aktionen aus.
  12. Wählen Sie Serviceprüfung ausführen aus.