Usando o Schema Registry

O Schema Registry fornece um repositório compartilhado de esquemas que permite que os aplicativos interajam de forma flexível entre si.

Os aplicativos criados geralmente precisam de uma maneira de compartilhar metadados em três dimensões:

  • Formato dos dados

  • Esquema

  • Semântica ou significado dos dados

O valor que o Schema Registry fornece e os aplicativos que se integram a ele são os seguintes:

  • Registro centralizado: forneça esquema reutilizável para evitar anexar esquema a cada pedaço de dados

  • Gerenciamento de versões: Defina o relacionamento entre as versões do esquema para que os consumidores e produtores possam evoluir em taxas diferentes

  • Validação de esquema: Ativar conversão de formato genérico, roteamento genérico e qualidade de dados

Por que o Schema Registry?

Devido à natureza dissociada do Kafka, os produtores e consumidores não se comunicam diretamente. Em vez disso, a transferência de informações acontece por meio do tópico Kafka. Ao mesmo tempo, o consumidor ainda precisa saber o tipo de dados que o produtor está enviando para desserializá-lo. Se o produtor começar a enviar dados incorretos para o Kafka ou se o tipo de dados for alterado, os consumidores downstream começarão a quebrar. Deve haver uma maneira de ter um tipo de dados comum acordado.

É aí que entra o Schema Registry. O Schema Registry é um aplicativo que reside fora do cluster do Kafka e trata a distribuição de esquemas para o produtor e consumidor, armazenando uma cópia do esquema em seu cache local.

Casos de Uso

O Schema Registry fornece um conjunto de APIs Rest (com interfaces Web) para disponibilizar o Esquema centralmente para aplicativos clientes. Os casos de uso comuns são:

  1. Registrando e Consultando um Esquema para um Tópico do Kafka

    Quando o Kafka é integrado a implantações de organização empresarial, você geralmente tem muitos tópicos do Kafka diferentes usados por diferentes aplicativos e usuários.

  2. Leitura/Deserialização e Escrita/Serialização de Dados de e para um Tópico do Kafka

    Além de armazenar metadados de esquema, outro caso de uso importante é armazenar metadados para o formato de como os dados são lidos e como eles são gravados. O Schema Registry suporta esse caso de uso fornecendo recursos para armazenar arquivos JAR para serializadores e desserializadores e, em seguida, mapear os serdes para o esquema.

  3. Gerenciamento de Fluxo de Dados com Roteamento Baseado em Esquema

    Se você estiver usando NiFi para mover diferentes tipos de eventos syslog para sistemas downstream, haverá requisitos de movimentação de dados em que você deverá fazer parsing do evento syslog para extrair o tipo de evento e rotear o evento para um determinado sistema downstream (diferentes tópicos do Kafka, por exemplo) com base no tipo de evento.

  4. A evolução dinâmica do esquema permite que o Esquema evolua ao longo de um período.

    Qualquer atualização no esquema cria uma nova revisão que é comunicada aos consumidores.

  5. A aplicação/validação do esquema do lado do consumidor pode ser obtida perfeitamente para a qualidade dos dados.

Iniciando o Produtor/Consumidor do Kafka Usando o Cliente Java

  1. Em pom.xml, adicione o seguinte à configuração do Produtor 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());

    As configurações a serem focadas são:

    • schema.registry.url
    • key.serializer
    • value.serializer
  2. Adicione o seguinte texto à configuração do Consumidor do 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. Depois que o Registro de Esquema for iniciado, acesse a UI da Web: http://<FQDN>:9093

Adicionando o Apache Schema Registry a Clusters ODH

Você pode adicionar o Registro de Esquema Apache aos clusters do Big Data Service usando o Ambari

O Registro de Esquema não é instalado por padrão em um cluster do Big Data Service. O registro de esquema suporta dois tipos de armazenamentos para armazenar metadados de esquema.

  • Mysql: Valor a ser definido: mysql
  • Na Memória: Valor a ser definido: inmemory

Para definir o tipo de armazenamento apropriado, defina o parâmetro Storage Type na seção Registro de Esquema Avançado da IU do Ambari.

Para definir o Mysql como um tipo de armazenamento, várias tabelas devem ser criadas antes de iniciar o servidor. Isso é feito automaticamente quando o parâmetro Storage Type é definido como mysql.

Observação

O parâmetro MySql Passowrd é obrigatório ao instalar o serviço Schema Registry. Essa senha é usada para acessar as informações de esquema armazenadas nas tabelas Mysql.

Para clusters do Big Data Service 3.0.28 ou anteriores, MySql Passowrd deve ser redefinido manualmente do nó un0 executando o comando:

sudo update_mysql_password registry <password>

Forneça essa senha durante a instalação do serviço Schema Registry.

  1. Acesse o Apache Ambari.
  2. Selecione Adicionar Serviço no menu Serviços.
  3. No Assistente de Adição de Serviço, selecione Registro de Esquema e selecione Próximo.
  4. Próxima.
  5. Na página Personalizar Serviços para o parâmetro Advanced schema-registry, atualize a Senha do MySql para o valor apropriado.

    Isso redefine a senha do banco de dados MySQL do registro.

  6. Selecione Próximo.
  7. Revise a configuração e selecione Implantar.
  8. Aguarde a conclusão da instalação e selecione Próximo.
  9. Selecione Concluído.
  10. Reinicie todos os serviços necessários no menu Serviço.
  11. Para verificar uma instalação bem-sucedida, acesse o Registro de Esquema no painel de controle do Apache Ambari e selecione Ações.
  12. Selecione Executar Verificação de Serviço.