Usando o Registro do Esquema Event Streams
O Registro de Esquema fornece um repositório centralizado para gerenciar e validar esquemas Os esquemas em um Registro de Esquema fornecem o contrato explícito que um programa que gera um evento fornece para outros programas que estão consumindo esses eventos.
Visão geral de esquemas
O Apache Kafka pode tratar quaisquer dados, mas ele não valida as informações nas mensagens. No entanto, o tratamento eficiente de dados muitas vezes exige a inclusão de informações específicas em um determinado formato. Usando esquemas, é possível definir a estrutura dos dados em uma mensagem, assegurando que tanto os produtores quanto os consumidores usem a estrutura correta.
Os esquemas ajudam os produtores a criar dados que estejam adequados a uma estrutura predefinida, definindo os campos que precisam estar presentes com o tipo de cada campo. Essa definição então ajuda os consumidores a analisar esses dados e interpretá-los corretamente. O plano Enterprise Event Streams suporta esquemas e inclui um Registro de esquema para uso e gerenciamento de esquemas.
É comum que todas as mensagens em um tópico usem o mesmo esquema. A chave e o valor de uma mensagem podem cada um ser descrito por um esquema.
Registro de esquema
Os esquemas são armazenados no registro de esquema do Event Streams. Além de armazenar um histórico com versão de esquemas, ele fornece uma interface para recuperá-los. Cada instância do Event Streams do plano Enterprise tem seu próprio registro de esquema. Um máximo de 1000 esquemas pode ser armazenado em uma instância do Enterprise
Produtores e consumidores validam os dados em relação ao esquema especificado que está armazenado no Schema Registry (além de passar pelos corretores do Kafka ). Os esquemas não precisam ser transferidos nas mensagens desta forma, o que significa que as mensagens podem ser menores.
Formato de dados Apache Avro
Os Schemas são definidos usando-se Apache Avro, uma tecnologia de serialização de dados de código aberto que é comumente usada com Apache Kafka. Ele fornece um formato de codificação de dados eficiente, usando o formato binário compacto ou um formato mais detalhado, mas um formato JSON legível.
O registro de esquema do Event Streams usa os formatos de dados Apache Avro. Quando as mensagens são enviadas no formato Avro, elas contêm os dados e o identificador único para o esquema usado. O identificador especifica qual esquema no registro deve ser usado para a mensagem.
O Avro suporta uma ampla gama de tipos de dados, incluindo tipos primitivos (nulo, booleano, inteiro, longo, flutuante, duplo, bytes e sequência) e tipos complexos (registro, enumeração, matriz, mapa, união e fixo).
Serialização e desserialização
Um aplicativo de produção usa um serializador para produzir mensagens que estejam em conformidade com um esquema específico. Conforme mencionado anteriormente, a mensagem contém os dados no formato Avro, com o identificador do esquema.
Em seguida, um aplicativo de consumo usa um desserializador para consumir mensagens que foram serializadas usando o mesmo esquema. Quando um consumidor lê uma mensagem enviada no formato Avro, o desserializador encontra o identificador do esquema na mensagem e recupera o esquema do Schema Registry para desserializar os dados.
Esse processo oferece uma maneira eficiente de garantir que os dados nas mensagens estejam em conformidade com a estrutura necessária.
O Event Streams Schema Registry é compatível com o serializador e desserializador Kafka AVRO.
Versões e compatibilidade
Sempre que você adicionar um esquema e quaisquer versões subsequentes do mesmo esquema, o site Event Streams poderá validar o formato automaticamente e rejeitar o esquema se houver algum problema. É possível desenvolver esquemas ao longo do tempo para acomodar a mudança de requisitos. Crie uma nova versão de um esquema existente, e o Schema Registry garante que a nova versão seja compatível com a versão existente, o que significa que os produtores e consumidores que usam a versão existente não serão prejudicados pela nova versão.
Os esquemas são comparados para evitar a criação de esquemas duplicados em que os esquemas diferem apenas de uma maneira que não afeta a semântica do esquema. Em alguns casos, a ordenação das propriedades JSON dentro de um esquema pode ser crucial para como o esquema é usado para codificação e decodificação de dados, mas em outros casos ele pode não ser relevante.
Por exemplo, a propriedade name de um esquema de registro não é usada como parte do processo de codificação e decodificação para que você possa posicioná-lo em qualquer lugar dentro do objeto JSON do registro. Todas essas variações
são consideradas o mesmo esquema.
A propriedade fields no JSON de um esquema de registro é um caso em que sua ordenação é importante. A especificação do Avro requer que os campos de um registro sejam codificados e decodificados na ordem em que aparecem no esquema
que é usado para a operação de encode e decodificação.
Como exemplo, considere os três esquemas a seguir.
Esquema 1
{
"type": "record",
"name": "book",
"fields": [
{
"name": "title",
"type": "string"
},
{
"name": "author",
"type": "string"
}
]
}
Esquema 2
{
"type": "record",
"name": "book",
"fields": [
{
"name": "author",
"type": "string"
},
{
"name": "title",
"type": "string"
}
]
}
Esquema 3
{
"type": "record",
"name": "book",
"fields": [
{
"type": "string"
"name": "author",
},
{
"type": "string"
"name": "title",
}
]
}
O esquema 1 e o Schema 2 são esquemas distintos e o registro armazena-os como esquemas separados. Eles não podem ser usados de forma intercambiável porque listam os campos author e title em uma ordem diferente. Os
dados codificados com Schema 1 não seriam decodificados corretamente se o processo de decodificação utilizasse o Schema 2.
Ao usar o SerDes para criar o novo esquema na ordem do Esquema 1, Esquema 2 e Esquema 3, o resultado seria dois novos esquemas. O esquema 1 e o Schema 2 são diferentes mas o Schema 3 é o equivalente a Schema 2.
Ao criar esquemas usando a API REST, os esquemas são considerados correspondentes apenas se forem textualmente os mesmos, incluindo toda a ordenação de atributo e campos descritivos. Isso é para permitir o caso em que você deseja que o Schema 3 seja um esquema diferente.
Ativando o registro de esquema
O registro de esquema é ativado por padrão para instâncias de serviço do plano Enterprise do Event Streams. O registro de esquema não está disponível para outros planos do Event Streams.
Acessando o registro de esquema
Para acessar o Schema Registry, você precisa do endereço URL do Schema Registry, que está nas credenciais de serviço do seu serviço. Para exibir essas credenciais na interface do usuário, clique em sua instância de serviço, selecione Credenciais de serviço no painel de navegação esquerdo e clique no link Exibir credenciais localizado ao lado de uma das credenciais de serviço listadas na tabela:
O valor de kafka_http_url também é o URL do Schema Registry.
Autenticação
Para acessar o Registro de Esquema, também é necessário um conjunto de credenciais que possa ser usado para autenticar com o registro.. Há duas opções, autenticação básica com uma chave de API ou autenticação de token de acesso.
Os exemplos neste documento mostram o uso da chave de API, mas qualquer opção pode ser usada.
Autenticação com chave API
As credenciais de serviço têm um apikey que você pode usar como a credencial para autenticar com o Registro de Esquema
Você também pode se autenticar usando uma chave de API que foi concedida por um ID de serviço, desde que o ID de serviço tenha uma política que permita pelo menos o acesso de função de "leitor" à instância Event Streams. Essa abordagem é mais flexível e será a melhor escolha se você estiver concedendo acesso a diversas outras pessoas ou equipes. Consulte o tópico da ajuda Gerenciando o acesso a seus recursos do Event Streams para obter mais detalhes.
A chave de API é fornecida como a parte da senha de um cabeçalho de autenticação básica HTTP. A parte do nome do usuário do cabeçalho é a palavra "token"..
O comando curl a ser usado é o seguinte, em que $APIKEY é substituído por sua chave de API:
curl -u token:$APIKEY ...
Autenticação com token de acesso
Também é possível usar um token de portador para uma ID de sistema ou usuário como credencial. Essa é geralmente uma abordagem mais segura, pois ela tem menos potencial para expor a chave API e o token de acesso expira automaticamente após algum tempo.
Para obter um token, use o comando IBM Cloud CLI ibmcloud iam oauth-tokens para gerar o token. Inclua esse token em um cabeçalho HTTP no formato "Authorization: Bearer $TOKEN", em que $TOKEN é o token do portador:
curl -H "Authorization: Bearer $TOKEN" ...
Importando dados de outros registros de esquema
É possível importar dados para o Registro de Esquema que foi exportado de outros registros de esquema. Quando dados são importados, o ID global associado a cada versão de artefato é preservado. Isso significa que é possível continuar usando dados que já estão armazenados no Kafka usando os mesmos valores de ID global do esquema.
A CLI do Event Streams suporta a importação de dados usando o formato de importação e exportação do registro Apicurio, como no exemplo a seguir.
ibmcloud es schema-import import.zip
É possível gerar os dados a serem importados usando o utilitário exportConfluent do registro Apicurio, que exporta dados de um registro de esquema Confluent. Event Streams foi testado com a versão 2.6.x deste utilitário.
Se o Registro de Esquema do Event Streams já tiver uma entrada com o mesmo ID global que uma versão de artefato que está sendo importada, a operação de importação falhará e você será solicitado a remover a versão de artefato se desejar continuar.
Terminais REST de registro de esquema
A API de REST oferece quatro recursos principais:
- Criação, leitura e exclusão de esquemas.
- Criação, leitura e exclusão de versões individuais de um esquema.
- Leitura e atualização da regra de compatibilidade global para o registro.
- Criação, leitura, atualização e exclusão de regras de compatibilidade que se aplicam aos esquemas individuais.
Para ações que alteram a versão de esquema, como criar, atualizar ou excluir artefato, versões de artefato e regras, um evento do Activity Tracker é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Erros
Se for encontrada uma condição de erro, o Schema Registry retornará um código de status non-2XX range HTTP. O corpo da resposta contém um objeto JSON no seguinte formato:
{
"error_code":404,
"message":"No artifact with id 'my-schema' might be found."
}
As propriedades do objeto JSON de erro são as seguintes:
| Nome da propriedade | Descrição |
|---|---|
| error_code | O código de status HTTP da resposta. |
| Mensagem | Uma descrição da causa do problema. |
| Incidente | Esse campo será incluído somente se o erro for resultado de um problema com o Registro de esquema. Esse valor pode ser usado pelo serviço IBM para correlacionar uma solicitação de informações de diagnóstico capturadas pelo registro. |
Configure um estado do esquema
Esse terminal é usado para configurar o estado de um esquema no registro para ENABLED ou DISABLED O estado de um esquema pode ser configurado emitindo uma solicitação PUT para o terminal /artifacts/{schema-id}/state (em que {schema-id} é o ID do esquema). Se a solicitação for bem-sucedida, será retornada uma resposta vazia e um código de status 204 (sem conteúdo).
Exemplo de solicitação curl:
curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/state -d '{"state": "DISABLED"}'
A configuração de um estado de esquema requer:
- Acesso da função de administrador ao recurso de esquema que corresponde ao esquema modificado.
Configurar um estado de versão de esquema....
Esse terminal é usado para definir o estado de uma versão de esquema no registro para ENABLED ou DISABLED O estado de uma versão de esquema pode ser configurado emitindo uma solicitação PUT para o terminal /artifacts/{schema-id}/versions/{version}/state (em que {schema-id} é o ID do esquema e {version} é o número da versão do esquema). Se a solicitação for bem-sucedida, será retornada uma resposta vazia e um código de status 204 (sem conteúdo).
Exemplo de solicitação curl:
curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/versions/1/state -d '{"state": "DISABLED"}'
A configuração de um estado da versão do esquema requer:
- Acesso da função de administrador ao recurso de esquema que corresponde ao esquema que está sendo modificado.
Criar um esquema
Esse terminal é usado para armazenar um esquema no registro. Os dados do esquema são enviados como o corpo da solicitação POST. Uma ID para o esquema pode ser incluída usando o cabeçalho de solicitação ‘X-Registry-ArtifactId'. Se esse cabeçalho não estiver presente na solicitação, será gerada uma ID. O cabeçalho do tipo de conteúdo deve ser configurado como “application/json”.
Exemplo de solicitação curl:
curl -u token:$APIKEY -H 'Content-Type: application/json' -H 'X-Registry-ArtifactId: my-schema' $URL/artifacts -d '{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}'
Resposta de exemplo:
{"id":"my-schema","type":"AVRO","version":1,"createdBy":"","createdOn":1579267788258,"modifiedBy":"","modifiedOn":1579267788258,"globalId":75}
A criação de um esquema requer pelo menos ambos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de escritor ao recurso de esquema que corresponde ao esquema criado.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Listar esquemas
Você pode gerar uma lista das IDs de todos os esquemas armazenados no registro fazendo uma solicitação GET para o ponto de extremidade /artifacts. É possível formatar a resposta usando o parâmetro jsonformat (apenas os formatos
string e object são suportados. O formato de sequência é o padrão e retorna uma matriz de IDs de artefatos (sequências). Apenas os artefatos ativados são incluídos na matriz quando essas opções são configuradas
O formato do objeto retorna um objeto JSON que contém uma matrizes em que cada entrada na matriz corresponde a um artefato no registro Ambos os artefatos ativados e desativados são retornados quando essa opção é configurada
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts
ou
curl -u token:$APIKEY $URL/artifacts?jsonformat=string
ou
curl -u token:$APIKEY $URL/artifacts?jsonformat=object
Resposta de exemplo quando jsonformat é sequência ou não fornecido (padronizado para sequência):
["my-schema-2","my-schema-4"]
Exemplo de resposta quando jsonformat é objeto:
{"artifacts":[{"id":"my-schema","state":"DISABLED"},{"id":"my-schema-2","state":"ENABLED"},{"id":"my-schema-3","state":"DISABLED"},{"id":"my-schema-4","state":"ENABLED"}],"count":4}
A listagem de esquemas exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
Estado e exclusão de esquemas
A exclusão do esquema é um processo de dois estágios O primeiro estágio de exclusão preserva o esquema no registro, mas o oculta de algumas operações.. O segundo estágio remove permanentemente o esquema, mas só pode ser aplicado após o primeiro estágio O processo de exclusão de dois estágios aplica-se no nível do artefato e também no nível da versão
Os dois estágios de exclusão são feitos tendo um status ativado ou desativado associado a artefatos e versões (primeiro estágio) e excluindo APIs para recursos e versões (segundo estágio).
Um artefato ou versão que foi desativado pode ser descoberto usando uma propriedade 'state' que é retornada por operações que listam artefatos ou versões ou obtendo os detalhes de um artefato ou versão. Os esquemas desativados contam para a cota de esquema de 1000 esquemas por instância Corporativa
Excluir um esquema
Os esquemas são excluídos do registro por meio de uma solicitação DELETE para o ponto de extremidade /artifacts/{schema-id} (em que {schema-id} é a ID do esquema). Se bem-sucedido, uma resposta vazia e um código de status de 204
(sem conteúdo) serão retornados.
Exemplo de solicitação curl:
curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema
A exclusão de um esquema exige pelo menos ambos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de administrador ao recurso de esquema que corresponde ao esquema excluído.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Criar uma nova versão de um esquema
Para criar uma nova versão de um esquema, faça uma solicitação POST para o ponto de extremidade /artifacts/{schema-id}/versions, (em que {schema-id} é a ID do esquema). O corpo da solicitação deve conter a nova versão do esquema.
Se a solicitação for bem-sucedida, o novo esquema será criado como a versão mais recente do esquema, com um número de versão apropriado, e será retornada uma resposta com o código de status 200 (OK) e uma carga útil que contém metadados que descrevem a nova versão (incluindo o número da versão).
Exemplo de solicitação curl:
curl -u token:$APIKEY -H 'Content-Type: application/json' $URL/artifacts/my-schema/versions -d '{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}'
Resposta de exemplo:
{"id":"my-schema","type":"AVRO","version":2,"createdBy":"","createdOn": 1579267978382,"modifiedBy":"","modifiedOn":1579267978382,"globalId":83}
A criação de uma nova versão de um esquema exige pelo menos ambos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de escritor ao recurso de esquema que corresponde ao esquema que recebe uma nova versão.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Obter a versão mais recente de um esquema
Para recuperar a versão mais recente de um determinado esquema, faça uma solicitação GET para o ponto de extremidade /artifacts/{schema-id} (em que {schema-id} é a ID do esquema). Se bem-sucedido, a versão mais recente do esquema
será retornada na carga útil da resposta.
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts/my-schema
Resposta de exemplo:
{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}
Para obter a versão mais recente de um esquema, é necessário:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de leitor ao recurso de esquema que corresponde ao esquema recuperado.
Obtendo uma versão específica de um esquema
Para recuperar uma versão específica de um esquema, faça uma solicitação GET para o ponto de extremidade /artifacts/{schema-id}/versions/{version} (em que {schema-id} é a ID do esquema e {version} é o número da versão específica
que você precisa recuperar). Se bem-sucedido, a versão especificada do esquema será retornada na carga útil da resposta.
Exemplo de solicitação de curl
curl -u token:$APIKEY $URL/artifacts/my-schema/versions/3
Resposta de exemplo:
{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}
Para obter a versão mais recente de um esquema, é necessário:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de leitor ao recurso de esquema que corresponde ao esquema recuperado.
Listando todas as versões de um esquema
Para listar todas as versões de um esquema atualmente armazenadas no registro, faça uma solicitação GET para o ponto de extremidade /artifacts/{schema-id}/versions (em que {schema-id} é a ID do esquema). Se bem-sucedido, uma lista
de todos os números de versão atuais para o esquema será retornada na carga útil da resposta. É possível formatar a resposta usando o parâmetro jsonformat (apenas os formatos number e object são suportados. Se você
especificar 'number' (o padrão), a resposta será uma matriz de valores numéricos que correspondem às versões ativadas do artefato (versões desativadas são omitidas). Ele é o mesmo formato que o terminal gerado atualmente Se você especificar
'object', a resposta será um objeto JSON que contém uma matriz de objetos JSON representando versões do artefato. As versões ativadas e desativadas estão incluídas na matriz.
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts/my-schema/versions
ou
curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=number
ou
curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=object
Exemplo de resposta quando jsonformat é número ou não fornecido (padronizando para número):
[1,3,4,6,7]
Exemplo de resposta quando jsonformat é objeto:
{"versions":[{"id":1,"state":"ENABLED"},{"id":2,"state":"DISABLED"},{"id":3,"state":"ENABLED"},{"id":4,"state":"ENABLED"},{"id":5,"state":"DISABLED"},{"id":6,"state":"ENABLED"},{"id":7,"state":"ENABLED"}],"count":7}
A obtenção da lista de versões disponíveis de um esquema exige pelo menos ambos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de leitor ao recurso de esquema que corresponde ao esquema recuperado.
Excluindo uma versão de um esquema
As versões do esquema são excluídas do registro por meio de uma solicitação DELETE para o ponto de extremidade /artifacts/{schema-id}/versions/{version} (em que {schema-id} é a ID do esquema e {version} é o número da versão do
esquema). Se bem-sucedido, uma resposta vazia e um código de status de 204 (sem conteúdo) serão retornados. A exclusão da única versão restante de um esquema também exclui o esquema.
Exemplo de solicitação curl:
curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/versions/3
A exclusão de uma versão de esquema requer pelo menos ambos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de administrador ao recurso de esquema que corresponde ao esquema excluído.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Obtendo o ID exclusivo global específico de uma versão de esquema
Para recuperar um ID exclusivo global específico de uma versão de esquema, faça uma solicitação GET para o ponto de extremidade /artifacts/{artifactId}/versions/{version}/meta (em que {artifactId} é o ID do artefato e {version}
é o número da versão específica que você precisa recuperar). Se bem-sucedido, o ID exclusivo global específico de uma versão de esquema será retornado na carga útil da resposta.
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts/9030f450-45fb-4750-bb37-771ad49ee0e8/versions/1/meta
Resposta de exemplo:
{"id":"9030f450-45fb-4750-bb37-771ad49ee0e8","type":"AVRO","version":1,"createdOn":1682340169202,"modifiedOn":1682340169202,"globalId":1}
A obtenção do ID exclusivo global de uma versão de esquema requer pelo menos os dois tipos de acesso a seguir:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de leitor ao recurso de esquema que corresponde ao esquema recuperado.
Atualizando uma regra global
As regras de compatibilidade global podem ser atualizadas emitindo uma solicitação PUT para o ponto de extremidade /rules/ {rule-type} (em que {rule-type} identifica o tipo de regra global a ser atualizada - atualmente, o único tipo compatível é COMPATIBILITY), com a nova configuração de regra no corpo da solicitação. Se a solicitação for bem-sucedida, a configuração de regra atualizada recentemente será retornada na carga útil da resposta com um código de status de 200 (OK).
O documento JSON que é enviado no corpo da solicitação deve ter as seguintes propriedades:
| Nome da propriedade | Descrição |
|---|---|
| Tipo | Deve sempre ser configurado com o valor COMPATIBILITY. |
| Configuração | Deve ser configurado para um dos valores a seguir: NONE, BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL ou FULL_TRANSITIVE (consulte a seção em regras de compatibilidade para obter detalhes sobre cada um desses valores). |
Exemplo de solicitação curl:
curl -u token:$APIKEY -X PUT $URL/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'
Resposta de exemplo:
{"type":"COMPATIBILITY","config":"BACKWARD"}
A atualização de uma configuração de regra global exige pelo menos:
- Acesso de função de gerenciador ao tipo de recurso de cluster Event Streams.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Obtendo o valor atual de uma regra global
O valor atual de uma regra global é recuperado por meio da emissão de uma solicitação GET para o ponto de extremidade /rules/ {rule-type} (em que {rule-type} é o tipo de regra global a ser recuperada - atualmente, o único tipo suportado é COMPATIBILITY). Se a solicitação for bem-sucedida, a configuração de regra atual será retornada na carga útil da resposta, com um código de status de 200 (OK).
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/rules/COMPATIBILITY
Resposta de exemplo:
{"type":"COMPATIBILITY","config":"BACKWARD"}
A obtenção da configuração de regra global exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
Criando uma regra por esquema
As regras podem ser aplicadas a um esquema específico, substituindo quaisquer regras globais que tenham sido definidas, fazendo uma solicitação POST para o ponto de extremidade /artifacts/{schema-id}/rules (em que {schema-id}
é a ID do esquema), com o tipo e o valor da nova regra contidos no corpo da solicitação (atualmente, o único tipo suportado é COMPATIBILITY). Se bem-sucedido, uma resposta vazia e um código de status de 204 (sem conteúdo) serão retornados.
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts/my-schema/rules -d '{"type":"COMPATIBILITY","config":"FORWARD"}'
A criação de regras por esquema exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso da função de administrador ao recurso de esquema ao qual a regra se aplica.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Obtendo uma regra por esquema
Para recuperar o valor atual de um tipo de regra aplicada a um esquema específico, é feita uma solicitação GET para o ponto de extremidade /artifacts/{schema-id}/rules/{rule-type} (em que {schema-id} é a ID do esquema e {rule-type}
é o tipo de regra global a ser recuperada - atualmente, o único tipo suportado é COMPATIBILITY). Se a solicitação for bem-sucedida, o valor da regra atual será retornado na carga útil da resposta, com um código de status de 200 (OK).
Exemplo de solicitação curl:
curl -u token:$APIKEY $URL/artifacts/my-schema/rules/COMPATIBILITY
Resposta de exemplo:
{"type":"COMPATIBILITY","config":"FORWARD"}
A obtenção de regras por esquema exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso de função de leitor ao recurso de esquema ao qual a regra se aplica.
Atualizando uma regra por esquema
As regras aplicadas a um esquema específico são modificadas por meio de uma solicitação PUT para o ponto de extremidade /artifacts/{schema-id}/rules/{rule-type} (em que {schema-id} é a ID do esquema e {rule-type} é o tipo de regra
global a ser recuperada - atualmente, o único tipo suportado é COMPATIBILITY). Se a solicitação for bem-sucedida, a configuração de regra atualizada recentemente será retornada na carga útil da resposta com um código de status de 200 (OK).
Exemplo de solicitação curl:
curl -u token:$APIKEY -X PUT $URL/artifacts/my-schema/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'
Resposta de exemplo:
{"type":"COMPATIBILITY","config":"BACKWARD"}
A atualização de uma regra por esquema exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso de função de gerenciador ao recurso de esquema ao qual a regra se aplica.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Excluindo uma regra por esquema
As regras aplicadas a um esquema específico são excluídas por meio de uma solicitação DELETE para o ponto de extremidade /artifacts/{schema-id}/rules/{rule-type} (em que {schema-id} é a ID do esquema e {rule-type} é o tipo de
regra global a ser recuperada - atualmente, o único tipo suportado é COMPATIBILITY). Se a solicitação for bem-sucedida, uma resposta vazia será retornada, com um código de status de 204 (sem conteúdo).
Exemplo de solicitação curl:
curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/rules/COMPATIBILITY
A exclusão de uma regra por esquema exige pelo menos:
- Acesso de função de leitor ao tipo de recurso de cluster do Event Streams.
- Acesso de função de gerenciador ao recurso de esquema ao qual a regra se aplica.
Um evento rastreador de atividade é gerado para relatar a ação. Para obter mais informações, consulte Eventos do Activity Tracker.
Aplicando regras de compatibilidade a novas versões de esquemas
O Schema Registry suporta a imposição de regras de compatibilidade quando você cria uma nova versão de um esquema. Se for feita uma solicitação para criar uma nova versão de esquema que não esteja adequada à regra de compatibilidade necessária, o registro rejeitará a solicitação. As regras a seguir são suportadas:
| Regra de compatibilidade | Testado com relação a | Descrição |
|---|---|---|
| Nenhum | N/A | Nenhuma verificação de compatibilidade é executada quando uma nova versão de esquema é criada. |
| BACKWARD | Versão mais recente do esquema | Uma nova versão do esquema pode omitir campos que estão presentes na versão existente do esquema. |
| BACKWARD_TRANSITIVE | Todas as versões do esquema | Uma nova versão do esquema pode incluir os campos opcionais que não estão presentes na existente. |
| FORWARD | Versão mais recente do esquema | Uma nova versão do esquema pode incluir campos que não estão presentes na versão existente do esquema. |
| FORWARD_TRANSITIVE | Todas as versões do esquema | Uma nova versão do esquema pode omitir os campos opcionais que estão presentes na existente. |
| FULL | Versão mais recente do esquema | Uma nova versão do esquema pode incluir os campos opcionais que não estão presentes na existente. |
| FULL_TRANSITIVE | Todas as versões do esquema | Uma nova versão do esquema pode omitir os campos opcionais que estão presentes na existente. |
Essas regras podem ser aplicadas a dois escopos:
- Em um escopo global, que é o padrão usado ao criar uma nova versão de esquema.
- Em um nível por esquema. Se uma regra de nível por esquema for definida, ela substituirá o padrão global para o esquema específico.
Por padrão, o registro tem uma configuração de regra de compatibilidade global de NONE. As regras de nível por esquema devem ser definidas; caso contrário, o esquema usa por padrão a configuração global.
Descrição da API completa
Para uma descrição da API REST com exemplos, consulte Event Streams schema-registry-rest.
Você pode fazer o download da especificação completa da API no arquivo Event Streams Schema Registry REST API YAML. Para visualizar o arquivo Swagger, use as ferramentas Swagger, por exemplo, o editor Swagger.
Para obter mais informações sobre como acessar o Schema Registry usando um SDK, consulte Event Streams API de REST do Schema Registry.
Para obter informações sobre Event Streams recursos e fontes de dados em Terraform, veja recursos e fontes de dados.
Usando o Schema Registry com terceiros SerDes
O Schema Registry é compatível com o uso dos seguintes produtos de terceiros SerDes:
- Confluent SerDes
Para configurar o Confluent SerDes para usar o registro de esquema, é necessário especificar duas propriedades na configuração de seu cliente Kafka:
| Nome da propriedade | Valor |
|---|---|
| SCHEMA_REGISTRY_URL_CONFIG | Configure-a para a URL do Schema Registry, incluindo suas credenciais como autenticação básica, além de um caminho de /confluent. Por exemplo, se $APIKEY for a chave de API a ser usada e $HOST for
o host do campo kafka_http_url na guia Credenciais de serviço, o valor terá o formato: https://token:{$APIKEY}@{$HOST}/{confluent} |
| BASIC_AUTH_CREDENTIALS_SOURCE | Configure para URL. Isso instrui os SerDes a usar a autenticação básica HTTP usando as credenciais fornecidas na URL do Registro de esquema. |
Opcionalmente, também é possível fornecer as propriedades a seguir para controlar a seleção de esquema (estratégia de nomenclatura de assunto):
| Nome da propriedade | Valor |
|---|---|
| VALUE_SUBJECT_NAME_STRATEGY | TopicNameStrategy(padrão), RecordNameStrategye TopicRecordNameStrategy são suportados. Por exemplo, para especificar que o esquema do valor da mensagem seja selecionado usando um TopicRecordNameStrategy,
você pode usar as seguintes propriedades de cliente: configs.put ( KafkaAvroSerializerConfig.VALUE_SUBJECT_NAME_STRATEGY, TopicRecordNameStrategy.class.getName( )); |
| KEY_SUBJECT_NAME_STRATEGY | TopicNameStrategy (padrão), RecordNameStrategye TopicRecordNameStrategy são suportados. Consulte VALUE_SUBJECT_NAME_STRATEGY para obter um exemplo. |
O diagrama a seguir mostra um exemplo das propriedades necessárias para criar um produtor Kafka que usa o Confluent SerDes e pode ser conectado ao serviço Event Streams:
Se uma mensagem for enviada usando um esquema que não esteja no registro, o SerDes tentará criar o novo esquema, ou a versão do esquema, no registro. Se esse comportamento não for necessário, ele poderá ser desativado removendo-se a permissão de gravação de recursos de esquema do aplicativo. Consulte Gerenciando o acesso ao registro do esquema.
A opção normalizar para consultas de esquema e registro não é suportada.
Usando o Schema Registry com ferramentas que usam a API de registro do Confluent
O Schema Registry suporta um subconjunto da API fornecido pela versão 7.2 do Confluent Schema Registry. Isso é destinado a fornecer compatibilidade limitada com o conjunto de ferramentas que foi projetado para trabalhar com o Registro de Esquema Confluente. Somente o endpoint HTTP REST com os seguintes caminhos está implementado:
- compatibilidade
- configuração
- esquemas
- assuntos
Para configurar um aplicativo para usar essa API de compatibilidade, especifique o terminal de Registro de Esquema no seguinte formato:
https://token:{$APIKEY}@{$HOST}/{confluent}
em que:
$APIKEYé a chave de API a ser usada na guia Credenciais de serviço$HOSTé o host do campokafka_http_urlna guia Credenciais de serviço
Uso do Schema Registry com ferramentas de terceiros
O Schema Registry pode ser testado com ferramentas de terceiros, como kafka-avro-console-producer.sh e kafka-avro-console-consumer.sh, que permitem testar a conformidade com o esquema usando o Confluent SerDes.
Para executar a ferramenta do produtor ou do consumidor, é necessária uma propriedade comum com as opções de conexão para a instância do Event Streams Enterprise.
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password="apikey";
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
Produtor e consumidor do console do Avro
É possível usar as ferramentas do produtor e do consumidor do console do Kafka Avro com o Event Streams. Você deve fornecer uma propriedade de cliente e, além disso, o método de conexão e as credenciais do Schema Registry devem ser fornecidos
como argumentos da linha de comando --property. Há dois métodos de conexão usando uma fonte de credenciais de USER_INFO ou de URL.
Para executar usando o método de fonte de credenciais de URL, use o seguinte código.
./kafka-avro-console-[producer|consumer] --broker-list $BOOTSTRAP_ENDPOINTS --topic schema-test --property schema.registry.url=$SCHEMA_REGISTRY_URL --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' --property basic.auth.credentials.source=URL --producer.config $CONFIG_FILE
Substitua as seguintes variáveis do exemplo por seus próprios valores.
- BOOTSTRAP_ENDPOINTS com o valor a partir de sua guia Event Streams Credenciais de serviço no console IBM Cloud, conforme a lista de seus servidores de bootstrap.
- SCHEMA_REGISTRY_URL com o valor
kafka_http_urlde seu Event Streams, guia Credenciais de serviço no console do IBM Cloud, com o nome do usuáriotokene apikey, juntamente com o caminho/confluent(por exemplo,https://{token}:{apikey}@{kafka_http_url}/{confluent}). - CONFIG_FILE pelo caminho do arquivo de configuração.
Para executar usando o método de fonte de credenciais de USER_INFO, use o código a seguir.
./kafka-avro-console-[producer|consumer] --broker-list $BOOTSTRAP_ENDPOINTS --topic schema-test --property schema.registry.url=$SCHEMA_REGISTRY_URL --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' --property basic.auth.credentials.source=USER_INFO --property basic.auth.user.info=token:apikey --producer.config $CONFIG_FILE
Substitua as seguintes variáveis do exemplo por seus próprios valores.
- BOOTSTRAP_ENDPOINTS com o valor a partir de sua guia Event Streams Credenciais de serviço no console IBM Cloud, conforme a lista de seus servidores de bootstrap.
- SCHEMA_REGISTRY_URL com o valor
kafka_http_urlde seu Event Streams guia Credenciais de serviços no console do IBM Cloud, com o caminho/confluent(por exemplo,https://{kafka_http_url}/{confluent}). - CONFIG_FILE pelo caminho do arquivo de configuração.