Uso del registro degli schemi

Schema Registry fornisce un repository condiviso di schemi che consente alle applicazioni di interagire in modo flessibile tra loro.

Le applicazioni create spesso hanno bisogno di un modo per condividere i metadati in tre dimensioni:

  • Formato dati

  • Schema

  • Semantica o significato dei dati

Di seguito sono riportati i valori forniti da Schema Registry e dalle applicazioni che vi si integrano.

  • Registro di sistema centralizzato: fornire uno schema riutilizzabile per evitare di collegare lo schema a ogni dato

  • Gestione delle versioni: definire la relazione tra le versioni dello schema in modo che consumatori e produttori possano evolvere a tassi diversi

  • Convalida dello schema: abilita la conversione generica del formato, l'instradamento generico e la qualità dei dati

Perché scegliere Schema Registry?

A causa della natura disaccoppiata di Kafka, produttori e consumatori non comunicano direttamente. Invece, il trasferimento di informazioni avviene attraverso l'argomento Kafka. Allo stesso tempo, il consumatore deve ancora conoscere il tipo di dati che il produttore sta inviando per deserializzarlo. Se il producer inizia a inviare dati non validi a Kafka o se il tipo di dati viene modificato, i consumer a valle iniziano a interrompersi. Ci deve essere un modo per avere un tipo di dati comune che è concordato.

È qui che entra in gioco Schema Registry. Schema Registry è un'applicazione che risiede al di fuori del cluster Kafka e gestisce la distribuzione degli schemi al producer e al consumer memorizzando una copia dello schema nella cache locale.

Casi d'uso

Schema Registry fornisce un set di API Rest (con interfacce Web) per rendere lo schema disponibile centralmente per le applicazioni client. I casi d'uso comuni sono i seguenti:

  1. Registrazione ed esecuzione di query su uno schema per un argomento Kafka

    Quando Kafka è integrato nelle distribuzioni delle organizzazioni aziendali, in genere si dispone di molti argomenti Kafka diversi utilizzati da applicazioni e utenti diversi.

  2. Lettura/Deserializzazione e scrittura/Serializzazione dei dati da e per un argomento Kafka

    Oltre a memorizzare i metadati dello schema, un altro caso d'uso chiave consiste nel memorizzare i metadati per il formato di lettura e scrittura dei dati. Schema Registry supporta questo caso d'uso fornendo funzionalità per memorizzare file JAR per serializzatori e deserializzatori e quindi mappare i server allo schema.

  3. Gestione del flusso di dati con instradamento basato su schema

    Se si utilizza NiFi per spostare diversi tipi di eventi syslog nei sistemi a valle, sono previsti requisiti di spostamento dei dati in cui è necessario analizzare l'evento syslog per estrarre il tipo di evento e instradare l'evento a un determinato sistema a valle (ad esempio, diversi argomenti Kafka) in base al tipo di evento.

  4. L'evoluzione dinamica dello schema consente allo schema di evolversi in un periodo di tempo.

    Qualsiasi aggiornamento nello schema crea una nuova revisione comunicata ai consumatori.

  5. L'applicazione/convalida dello schema da parte del consumatore può essere raggiunta senza problemi per la qualità dei dati.

Avvio del producer/consumatore Kafka mediante il client Java

  1. In pom.xml, aggiungere quanto segue alla configurazione del producer 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());

    Le configurazioni su cui concentrarsi sono:

    • schema.registry.url
    • key.serializer
    • value.serializer
  2. Aggiungere il testo seguente alla configurazione del consumer 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. Dopo l'avvio del Registro di schema, accedere all'interfaccia utente Web: http://<FQDN>:9093

Aggiunta del registro di schema Apache ai cluster ODH

È possibile aggiungere il registro degli schemi Apache ai cluster di Big Data Service utilizzando Ambari

Schema Registry non è installato per impostazione predefinita in un cluster Big Data Service. Schema Registry supporta due tipi di archivi per la memorizzazione dei metadati dello schema.

  • Mysql: valore da impostare: mysql
  • In memoria: valore da impostare: inmemory

Per impostare il tipo di memorizzazione appropriato, impostare il parametro Storage Type nella sezione Schema-registry avanzato dall'interfaccia utente di Ambari.

Per impostare Mysql come tipo di memorizzazione, è necessario creare diverse tabelle prima di avviare il server. Questa operazione viene eseguita automaticamente quando il parametro Storage Type è impostato su mysql.

Nota

Il parametro MySql Passowrd è obbligatorio quando si installa il servizio Schema Registry. Questa password viene utilizzata per accedere alle informazioni dello schema memorizzate nelle tabelle Mysql.

Per i cluster Big Data Service 3.0.28 o versioni precedenti, è necessario reimpostare manualmente MySql Passowrd dal nodo un0 eseguendo il comando:

sudo update_mysql_password registry <password>

Fornire questa password durante l'installazione del servizio Schema Registry.

  1. Accedi ad Apache Ambari.
  2. Selezionare Aggiungi servizio dal menu Servizi.
  3. Nella procedura guidata Aggiungi servizio, selezionare Registro schema, quindi selezionare Successivo.
  4. Successivo.
  5. Nella pagina Personalizza servizi per il parametro Advanced schema-registry aggiornare Password Mysql al valore appropriato.

    Questa operazione reimposta la password per il database MySQL del registro.

  6. Selezionare Next.
  7. Rivedere la configurazione, quindi selezionare Distribuisci.
  8. Attendere il completamento dell'installazione, quindi selezionare Next.
  9. Selezionare Complete.
  10. Riavviare tutti i servizi richiesti dal menu Servizio.
  11. Per verificare la corretta installazione, accedere a Schema Registry dal dashboard di Apache Ambari, quindi selezionare Azioni.
  12. Selezionare Esegui controllo servizio.