IBM Cloud Docs
Utilización del registro de esquemas de Event Streams

Utilización del registro de esquemas de Event Streams

Schema Registry proporciona un repositorio centralizado para gestionar y validar esquemas. Los esquemas de un registro de esquema proporcionan el contrato explícito que un programa que genera un suceso proporciona a otros programas que están consumiendo dichos sucesos.

Visión general de esquemas

Apache Kafka puede manejar cualquier dato, pero no valida la información en los mensajes. Sin embargo, el manejo eficiente de los datos a menudo requiere que incluya información específica en un determinado formato. Utilizando esquemas, puede definir la estructura de los datos en un mensaje, asegurándose de que tanto los productores como los consumidores utilicen la estructura correcta.

Los esquemas ayudan a los productores a crear datos que se ajustan a una estructura predefinida, definiendo los campos que deben estar presentes junto con el tipo de cada campo. Esta definición ayuda a los consumidores a analizar los datos e interpretarlos correctamente. El plan Enterprise de Event Streams da soporte a esquemas e incluye un Registro de esquemas para utilizar y gestionar esquemas.

Es común que todos los mensajes de un tema utilicen el mismo esquema. La clave y el valor de un mensaje pueden describirse mediante un esquema.

Diagrama de visión general de esquemas.
Visión general de esquemas

Registro de esquemas

Los esquemas se almacenan en el registro de esquemas de Event Streams. Además de almacenar un historial con versiones de los esquemas, proporciona una interfaz para recuperarlos. Cada instancia de Event Streams del plan Empresa cuenta con su propio registro de esquemas. Se puede almacenar un máximo de 1000 esquemas en una instancia de Enterprise.

Los productores y consumidores validan los datos con el esquema especificado que se almacena en el Registro de Esquemas (además de pasar por los agentes de registro de esquemas [ Kafka ]). No es necesario que los esquemas se transfieran en los mensajes de este modo, lo que significa que los mensajes pueden ser más pequeños.

Diagrama de arquitectura del Registro de Esquemas.
Arquitectura del Registro de Esquemas

Formato de datos Apache Avro

Los esquemas se definen utilizando Apache Avro, una tecnología de serialización de datos de código abierto que se utiliza habitualmente con Apache Kafka. Proporciona un formato de codificación de datos eficiente, ya sea utilizando el formato binario compacto o un formato JSON más detallado, pero legible por el usuario.

El registro de esquemas de Event Streams utiliza formatos de datos Apache Avro. Cuando los mensajes se envían en formato Avro, contienen los datos y el identificador exclusivo para el esquema utilizado. El identificador especifica qué esquema del registro se va a utilizar para el mensaje.

Avro da soporte a un amplio rango de tipos de datos, incluidos los tipos primitivos (nulos, booleanos, int, largos, flotantes, dobles, bytes y series) y tipos complejos (registro, enum, matriz, correlación, unión y corregidos).

Diagrama de formato Avro.
Formato de mensaje Avro

Serialización y deserialización

Una aplicación de producción utiliza un serializador para producir mensajes que se ajustan a un esquema específico. Como se ha mencionado anteriormente, el mensaje contiene los datos en formato Avro, junto con el identificador del esquema.

Una aplicación consumidora utiliza entonces un deserializador para consumir mensajes que fueron serializados utilizando el mismo esquema. Cuando un consumidor lee un mensaje que se envía en formato Avro, el deserializador encuentra el identificador del esquema en el mensaje y recupera el esquema del Registro de esquemas para deserializar los datos.

Este proceso proporciona una forma eficaz de garantizar que los datos de los mensajes se ajustan a la estructura requerida.

El Registro de Esquemas de la Asociación de Lenguajes de Marcado Extensible ( Event Streams, OLE) es compatible con el serializador y deserializador AVRO de la Asociación de Lenguajes de Marcado Extensible(Kafka, OMG).

Diagrama de serialización y deserialización.
Serializador y deserializador

Diagrama de compatibilidad y versiones.
Compatibilidad y versiones

Versiones y compatibilidad

Event Streams, siempre que añada un esquema y cualquier versión posterior del mismo, puede validar el formato automáticamente y rechazar el esquema si existe algún problema. Puede desarrollar los esquemas a lo largo del tiempo para adaptarse a los cambios en los requisitos. Cree una nueva versión de un esquema existente y el Registro de Esquemas se asegurará de que la nueva versión sea compatible con la existente, lo que significa que los productores y consumidores que utilizan la versión existente no se verán afectados por la nueva versión.

Los esquemas se comparan para evitar crear esquemas duplicados donde los esquemas difieren sólo de una forma que no afecta a la semántica del esquema. En algunos casos, el orden de las propiedades JSON dentro de un esquema puede ser crucial para cómo se utiliza el esquema para codificar y descodificar datos, pero en otros casos puede que no sea relevante.

Por ejemplo, la propiedad name de un esquema de registro no se utiliza como parte del proceso de codificación y decodificación, por lo que puede colocarlo en cualquier lugar dentro del objeto JSON de registro. Todas estas variaciones se consideran el mismo esquema.

La propiedad fields en el JSON de un esquema de registro es un caso en el que su ordenación es importante. La especificación Avro requiere que los campos de un registro se codifiquen y descodifiquen en el orden en que aparecen en el esquema que se utiliza para la operación de codificación y descodificación.

Como ejemplo, considere los tres esquemas siguientes.

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",
    }
  ]
}

El esquema 1 y el esquema 2 son esquemas distintos y el registro los almacena como esquemas separados. No se pueden utilizar indistintamente porque listan los campos author y title en un orden diferente. Los datos codificados con el Esquema 1 no se descodificarán correctamente si el proceso de descodificación utiliza el Esquema 2.

Cuando se utiliza SerDes para crear el nuevo esquema en el orden Esquema 1, Esquema 2 y Esquema 3, el resultado sería dos nuevos esquemas. El esquema 1 y el esquema 2 son diferentes, pero el esquema 3 es el equivalente al esquema 2.

Cuando se crean esquemas utilizando la API REST, los esquemas se consideran coincidentes sólo si son textualmente iguales, incluidos todos los campos descriptivos y de ordenación de atributos. Esto es para permitir que el caso en el que desea que el esquema 3 sea un esquema diferente.

Habilitación del registro de esquemas

El registro de esquemas está habilitado de forma predeterminada para las instancias de servicio del plan Empresa de Event Streams. El registro de esquemas no está disponible para otros planes de Event Streams.

Acceso al registro de esquemas

Para acceder al Registro de Esquemas, necesita el identificador de servicio ( URL ) del Registro de Esquemas, que se encuentra en las credenciales de servicio de su servicio. Para ver estas credenciales en la interfaz de usuario, haga clic en su instancia de servicio, seleccione Credenciales de servicio en el panel de navegación izquierdo y, a continuación, haga clic en el enlace Ver credenciales situado junto a una de las credenciales de servicio que aparecen en la tabla:

Diagrama de credenciales de servicio.
Kafka

El valor de kafka_http_url es también el e URL a del Registro de Esquemas.

Autenticación

Para acceder al registro de esquema, también necesita un conjunto de credenciales que se pueden utilizar para autenticarse con el registro. Hay dos opciones, la autenticación básica con una clave de API o la autenticación de señal portadora.

Los ejemplos de este documento muestran el uso de la clave de API, pero se puede utilizar cualquiera de las opciones.

Autenticación con clave de API

Las credenciales de servicio tienen un apikey que puede utilizar como credencial para autenticarse con el registro de esquema.

También puede autenticarse utilizando una clave API que se haya concedido a partir de un ID de servicio, siempre que el ID de servicio tenga una política que le permita al menos el acceso de rol de «lector» a la instancia Event Streams. Este enfoque es más flexible y es una mejor opción si otorga acceso a varias otras personas o equipos. Consulte el tema de ayuda Gestión del acceso a los recursos de Event Streams para obtener más detalles.

La clave API se suministra como la parte de la contraseña de un encabezado de autenticación básica de HTTP. La parte de nombre de usuario de la cabecera es la palabra "token".

El mandato curl a utilizar es el siguiente, donde $APIKEY se sustituye por la clave de API:

curl -u token:$APIKEY ...

Autenticación con señal portadora

También es posible utilizar una ficha al portador para un ID de sistema o un usuario como credencial. Este es generalmente un enfoque más seguro, ya que tiene menos potencial para exponer la clave de API y la señal portadora caduca automáticamente después de algún tiempo.

Para obtener una señal, utilice el mandato IBM Cloud CLI ibmcloud iam oauth-tokens para generar la señal. Incluya este token en un encabezado de tipo " HTTP " con el formato "Authorization: Bearer $TOKEN", donde $TOKEN es el token del portador:

curl -H "Authorization: Bearer $TOKEN" ...

Importación de datos de otros registros de esquema

Puede importar datos en el registro de esquema que se ha exportado desde otros registros de esquema. Cuando se importan datos, se conserva el ID global asociado a cada versión de artefacto. Esto significa que puede seguir utilizando datos que ya están almacenados en Kafka utilizando los mismos valores de ID global de esquema.

La CLI de Event Streams da soporte a la importación de datos utilizando el formato de importación y exportación del registro de Apicurio, como en el ejemplo siguiente.

ibmcloud es schema-import import.zip

Puede generar los datos que se van a importar utilizando el programa de utilidad exportConfluent del registro de Apicurio, que exporta datos de un registro de esquema de Confluent. Event Streams ha sido probado con la versión 2.6.x de esta utilidad.

Si el registro de esquemas de Event Streams ya tiene una entrada con el mismo ID global que una versión de artefacto que se está importando, la operación de importación falla y se le solicita que elimine la versión de artefacto si desea continuar.

Puntos finales REST del registro de esquemas

La API REST ofrece cuatro funciones principales:

  1. Creación, lectura y supresión de esquemas.
  2. Creación, lectura y supresión de versiones individuales de un esquema.
  3. Lectura y actualización de la regla de compatibilidad global para el registro.
  4. Creación, lectura, actualización y supresión de reglas de compatibilidad que se aplican a esquemas individuales.

Para las acciones que alteran la versión del esquema, como por ejemplo crear, actualizar o suprimir artefactos, reglas y versiones de artefacto, se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Errores

non-2XX Si se encuentra una condición de error, el Registro de Esquemas devuelve un código de estado HTTP range. El cuerpo de la respuesta contiene un objeto JSON en el siguiente formato:

{
    "error_code":404,
    "message":"No artifact with id 'my-schema' might be found."
}

Las propiedades del objeto JSON del error son las siguientes:

Nombre de propiedad Descripción
error_code El código de estado HTTP de la respuesta.
Mensaje Una descripción de la causa del problema.
Incidencia Este campo solo se incluye si el error es el resultado de un problema con el registro de esquemas. El servicio IBM puede utilizar este valor para correlacionar una solicitud con información de diagnóstico capturada por el registro.

Establecer un estado de esquema

Este punto final se utiliza para establecer el estado de un esquema en el registro en ENABLED o DISABLED. El estado de un esquema se puede establecer emitiendo una solicitud PUT al punto final /artifacts/{schema-id}/state (donde {schema-id} es el ID del esquema). Si la solicitud se realiza correctamente, se devuelve una respuesta vacía y un código de estado 204 (sin contenido).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/state -d '{"state": "DISABLED"}'

El establecimiento de un estado de esquema requiere:

  • Acceso de rol de administrador al recurso de esquema que coincide con el esquema que se modifica.

Establecer un estado de versión de esquema

Este punto final se utiliza para establecer el estado de una versión de esquema en el registro en ENABLED o DISABLED. El estado de una versión de esquema se puede establecer emitiendo una solicitud PUT al punto final /artifacts/{schema-id}/versions/{version}/state (donde {schema-id} es el ID del esquema y {version} es el número de versión de la versión del esquema). Si la solicitud se realiza correctamente, se devuelve una respuesta vacía y un código de estado 204 (sin contenido).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY –X PUT $URL/artifacts/my-schema/versions/1/state -d '{"state": "DISABLED"}'

El establecimiento de un estado de versión de esquema requiere:

  • Acceso de rol de administrador al recurso de esquema que coincide con el esquema que se está modificando.

Crear un esquema

Este punto final se utiliza para almacenar un esquema en el registro. Los datos de esquema se envían como el cuerpo de la solicitud POST. Se puede incluir un ID para el esquema utilizando el encabezado de solicitud ‘X-Registry-ArtifactId'. Si este encabezado no está presente en la solicitud, se genera un ID. La cabecera del tipo de contenido debe establecerse en "application/json".

Ejemplo de solicitud de 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"}]}'

Respuesta de ejemplo:

{"id":"my-schema","type":"AVRO","version":1,"createdBy":"","createdOn":1579267788258,"modifiedBy":"","modifiedOn":1579267788258,"globalId":75}

La creación de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de escritor al recurso de esquema que coincide con el esquema creado.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Generación de listas de esquemas

Puede generar una lista de los ID de todos los esquemas almacenados en el registro realizando una solicitud GET al punto de conexión /artifacts. Puede formatear la respuesta utilizando el parámetro jsonformat (solo se soportan los formatos string y object ). El formato de serie es el predeterminado y devuelve una matriz de ID de artefacto (series). Sólo los artefactos habilitados se incluyen en la matriz cuando se establecen estas opciones. El formato de objeto devuelve un objeto JSON que contiene una matriz donde cada entrada de la matriz corresponde a un artefacto del registro. Tanto los artefactos habilitados como los inhabilitados se devuelven cuando se establece esta opción.

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts

o

curl -u token:$APIKEY $URL/artifacts?jsonformat=string

o

curl -u token:$APIKEY $URL/artifacts?jsonformat=object

Respuesta de ejemplo cuando jsonformat es serie, o no se proporciona (toma el valor predeterminado de serie):

["my-schema-2","my-schema-4"]

Respuesta de ejemplo cuando jsonformat es 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}

Generar listas de esquemas requiere al menos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.

Estado y supresión de esquemas

La supresión de esquema es un proceso de dos etapas. La primera etapa de supresión conserva el esquema en el registro, pero lo oculta de algunas operaciones. La segunda etapa elimina permanentemente el esquema, pero sólo se puede aplicar después de la primera etapa. El proceso de supresión de dos etapas se aplica a nivel de artefacto y también a nivel de versión.

Las dos etapas de supresión se realizan teniendo un estado habilitado o inhabilitado asociado a artefactos y versiones (primera etapa) y suprimiendo API para recursos y versiones (segunda etapa).

Un artefacto o versión que se ha inhabilitado se puede descubrir utilizando una propiedad 'state' que devuelven las operaciones que listan artefactos o versiones, u obteniendo los detalles de un artefacto o versión. Los esquemas inhabilitados cuentan para la cuota de esquema de 1000 esquemas por instancia de empresa.

Supresión de un esquema

Los esquemas se eliminan del registro mediante la emisión de una solicitud DELETE al punto final /artifacts/{schema-id} (donde {schema-id} es el ID del esquema). Si se ejecuta correctamente, se devuelve una respuesta vacía y un código de estado 204 (sin contenido).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema

La supresión de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de administrador al recurso de esquema que coincide con el esquema que se elimina.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Creación de una nueva versión de un esquema

Para crear una nueva versión de un esquema, realice una solicitud POST al punto final /artifacts/{schema-id}/versions, (donde {schema-id} es el ID del esquema). El cuerpo de la solicitud debe contener la nueva versión del esquema.

Si la solicitud se realiza correctamente, el nuevo esquema se crea como la última versión del esquema, con un número de versión apropiado, y se devuelve una respuesta con el código de estado 200 (OK), y una carga útil que contiene metadatos que describen la nueva versión (incluido el número de versión).

Ejemplo de solicitud de 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"}]}'

Respuesta de ejemplo:

{"id":"my-schema","type":"AVRO","version":2,"createdBy":"","createdOn": 1579267978382,"modifiedBy":"","modifiedOn":1579267978382,"globalId":83}

La creación de una nueva versión de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de escritor al recurso de esquema que coincide con el esquema que obtiene una nueva versión.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Obtención de la versión más reciente de un esquema

Para recuperar la última versión de un esquema concreto, realice una solicitud GET al punto final /artifacts/{schema-id} (donde {schema-id} es el ID del esquema). Si se ejecuta correctamente, se devuelve la versión más reciente del esquema en la carga útil de la respuesta.

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts/my-schema

Respuesta de ejemplo:

{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}

La obtención de la versión más reciente de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de lector al recurso de esquema que coincide con el esquema recuperado.

Obtención de una versión específica de un esquema

Para recuperar una versión específica de un esquema, realice una solicitud GET al punto final /artifacts/{schema-id}/versions/{version} (donde {schema-id} es el ID del esquema y {version} es el número de versión de la versión específica que necesita recuperar). Si se ejecuta correctamente, se devuelve la versión especificada del esquema en la carga útil de la respuesta.

Ejemplo de solicitud curl

curl -u token:$APIKEY $URL/artifacts/my-schema/versions/3

Respuesta de ejemplo:

{"type":"record","name":"Citizen","fields":[{"name": "firstName","type":"string"},{"name":"lastName","type":"string"},{"name":"age","type":"int"},{"name":"phoneNumber","type":"string"}]}

La obtención de la versión más reciente de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de lector al recurso de esquema que coincide con el esquema recuperado.

Listado de todas las versiones de un esquema

Para enumerar todas las versiones de un esquema que están almacenadas actualmente en el registro, haga una solicitud GET al punto final /artifacts/{schema-id}/versions (donde {schema-id} es el ID del esquema). Si se ejecuta correctamente, se devuelve una lista de todos los números de versión actuales para el esquema en la carga útil de la respuesta. Puede dar formato a la respuesta utilizando el parámetro jsonformat (solo se da soporte a los formatos number y object ). Si especifica 'número' (el valor predeterminado), la respuesta es una matriz de valores numéricos que corresponden a versiones habilitadas del artefacto (se omiten las versiones inhabilitadas). Tiene el mismo formato que el que genera actualmente el punto final. Si especifica 'object', la respuesta es un objeto JSON que contiene una matriz de objetos JSON que representan versiones del artefacto. Tanto las versiones habilitadas como las inhabilitadas se incluyen en la matriz.

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts/my-schema/versions

o

curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=number

o

curl -u token:$APIKEY $URL/artifacts/my-schema/versions?jsonformat=object

Respuesta de ejemplo cuando jsonformat es número, o no se proporciona (el valor predeterminado es número):

[1,3,4,6,7]

Respuesta de ejemplo cuando jsonformat es 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}

La obtención de la lista de versiones disponibles de un esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de lector al recurso de esquema que coincide con el esquema recuperado.

Supresión de una versión de un esquema

Las versiones de esquema se eliminan del registro mediante una solicitud DELETE al punto de conexión /artifacts/{schema-id}/versions/{version} (donde {schema-id} es el ID del esquema y {version} es el número de versión del esquema). Si se ejecuta correctamente, se devuelve una respuesta vacía y un código de estado 204 (sin contenido). Al eliminar la única versión restante de un esquema, también se elimina el esquema.

Ejemplo de solicitud de curl:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/versions/3

La supresión de una versión de esquema requiere al menos ambos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de administrador al recurso de esquema que coincide con el esquema que se elimina.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Obtención del ID exclusivo global específico de una versión de esquema

Para recuperar un ID único global específico de una versión de esquema, realice una solicitud GET al punto final /artifacts/{artifactId}/versions/{version}/meta (donde {artifactId} es el ID del artefacto y {version} es el número de versión de la versión específica que necesita recuperar). Si es satisfactorio, el ID exclusivo global específico de una versión de esquema se devuelve en la carga útil de la respuesta.

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts/9030f450-45fb-4750-bb37-771ad49ee0e8/versions/1/meta

Respuesta de ejemplo:

{"id":"9030f450-45fb-4750-bb37-771ad49ee0e8","type":"AVRO","version":1,"createdOn":1682340169202,"modifiedOn":1682340169202,"globalId":1}

La obtención del ID exclusivo global de una versión de esquema requiere al menos los dos tipos de acceso siguientes:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de lector al recurso de esquema que coincide con el esquema recuperado.

Actualización de una regla global

Las reglas de compatibilidad global pueden actualizarse enviando una solicitud PUT al punto final /rules/ {rule-type} (donde {rule-type} identifica el tipo de regla global que se va a actualizar; actualmente el único tipo admitido es COMPATIBILITY), con la nueva configuración de la regla en el cuerpo de la solicitud. Si la solicitud es correcta, la configuración de regla recién actualizada se devuelve en la carga útil de la respuesta, junto con un código de estado 200 (OK).

El documento JSON que se envía en el cuerpo de la solicitud debe tener las siguientes propiedades:

Nombre de propiedad Descripción
Tipo Debe estar siempre establecido en el valor COMPATIBILITY.
Config Debe establecerse en uno de los valores siguientes: NONE, BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL o FULL_TRANSITIVE (consulte la sección sobre reglas de compatibilidad para obtener detalles sobre cada uno de estos valores).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY -X PUT $URL/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'

Respuesta de ejemplo:

{"type":"COMPATIBILITY","config":"BACKWARD"}

Actualizar una configuración de regla global requiere como mínimo:

  • Acceso de rol de gestor al tipo de recurso de clúster de Event Streams.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Obtención del valor actual de una regla global

El valor actual de una regla global se recupera emitiendo una solicitud GET al punto final /rules/ {rule-type} (donde {rule-type} es el tipo de regla global que se va a recuperar; actualmente el único tipo admitido es COMPATIBILITY). Si la solicitud es correcta, la configuración de la regla actual se devuelve en la carga útil de la respuesta, junto con un código de estado 200 (OK).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/rules/COMPATIBILITY

Respuesta de ejemplo:

{"type":"COMPATIBILITY","config":"BACKWARD"}

Obtener una configuración de regla global requiere como mínimo:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.

Creación de una regla por esquema

Las reglas se pueden aplicar a un esquema específico, anulando cualquier regla global que se haya establecido, realizando una solicitud POST al punto final /artifacts/{schema-id}/rules (donde {schema-id} es el ID del esquema), con el tipo y el valor de la nueva regla que está contenida en el cuerpo de la solicitud (actualmente el único tipo admitido es COMPATIBILITY). Si se ejecuta correctamente, se devuelve una respuesta vacía y un código de estado 204 (sin contenido).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts/my-schema/rules -d '{"type":"COMPATIBILITY","config":"FORWARD"}'

Crear reglas por esquema requiere al menos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de administrador al recurso de esquema al que se aplica la regla.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Obtención de una regla por esquema

Para recuperar el valor actual de un tipo de regla que se aplica a un esquema específico, se realiza una solicitud GET al punto final /artifacts/{schema-id}/rules/{rule-type} (donde {schema-id} es el ID del esquema y {rule-type} es el tipo de regla global que se va a recuperar; actualmente el único tipo admitido es COMPATIBILITY). Si la solicitud es correcta, el valor de la regla actual se devuelve en la carga útil de la respuesta, junto con un código de estado 200 (OK).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY $URL/artifacts/my-schema/rules/COMPATIBILITY

Respuesta de ejemplo:

{"type":"COMPATIBILITY","config":"FORWARD"}

Obtener reglas por esquema requiere al menos:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de lector al recurso de esquema al que se aplica la regla.

Actualización de una regla por esquema

Las reglas aplicadas a un esquema específico se modifican realizando una solicitud PUT al punto final /artifacts/{schema-id}/rules/{rule-type} (donde {schema-id} es el ID del esquema y {rule-type} es el tipo de regla global que se va a recuperar; actualmente, el único tipo admitido es COMPATIBILITY). Si la solicitud es correcta, la configuración de regla recién actualizada se devuelve en la carga útil de la respuesta, junto con un código de estado 200 (OK).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY -X PUT $URL/artifacts/my-schema/rules/COMPATIBILITY -d '{"type":"COMPATIBILITY","config":"BACKWARD"}'

Respuesta de ejemplo:

{"type":"COMPATIBILITY","config":"BACKWARD"}

Actualizar una regla por esquema requiere como mínimo:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de gestor al recurso de esquema al que se aplica la regla.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Supresión de una regla por esquema

Las reglas aplicadas a un esquema específico se eliminan realizando una solicitud DELETE al punto final /artifacts/{schema-id}/rules/{rule-type} (donde {schema-id} es el ID del esquema y {rule-type} es el tipo de regla global que se va a recuperar; actualmente el único tipo admitido es COMPATIBILITY). Si la solicitud es correcta, se devuelve una respuesta vacía, con un código de estado de 204 (sin contenido).

Ejemplo de solicitud de curl:

curl -u token:$APIKEY -X DELETE $URL/artifacts/my-schema/rules/COMPATIBILITY

Suprimir una regla por esquema requiere como mínimo:

  • Acceso de rol de lector al tipo de recurso de clúster de Event Streams.
  • Acceso de rol de gestor al recurso de esquema al que se aplica la regla.

Se genera un suceso de Activity Tracker para informar de la acción. Para obtener más información, consulte Sucesos de Activity Tracker.

Aplicación de reglas de compatibilidad a nuevas versiones de esquemas

El Registro de Esquemas respalda la aplicación de las normas de compatibilidad cuando se crea una nueva versión de un esquema. Si se realiza una solicitud para crear una nueva versión de esquema que no se ajusta a la regla de compatibilidad necesaria, el registro rechaza la solicitud. Se da soporte a las siguientes reglas:

Regla de compatibilidad Probado sobre Descripción
NINGUNO N/D No se realiza ninguna comprobación de compatibilidad cuando se crea una nueva versión de esquema.
BACKWARD Versión más reciente del esquema Una nueva versión del esquema puede omitir los campos que están presentes en la versión existente del esquema.
BACKWARD_TRANSITIVE Todas las versiones del esquema Una nueva versión del esquema puede añadir campos opcionales que no están presentes en la versión existente del esquema.
FORWARD Versión más reciente del esquema Una nueva versión del esquema puede añadir campos que no están presentes en la versión existente del esquema.
FORWARD_TRANSITIVE Todas las versiones del esquema Una nueva versión del esquema puede omitir los campos opcionales que están presentes en la versión existente del esquema.
FULL Versión más reciente del esquema Una nueva versión del esquema puede añadir campos opcionales que no están presentes en la versión existente del esquema.
FULL_TRANSITIVE Todas las versiones del esquema Una nueva versión del esquema puede omitir los campos opcionales que están presentes en la versión existente del esquema.

Estas reglas se pueden aplicar en dos ámbitos:

  1. En un ámbito global, que es el valor predeterminado que se utiliza al crear una nueva versión de esquema.
  2. A un nivel por esquema. Si se define una regla de nivel por esquema, sustituye el valor predeterminado global para el esquema específico.

De forma predeterminada, el registro tiene un valor de regla de compatibilidad global de NONE. Deben definirse reglas por nivel de esquema; de lo contrario, el esquema utiliza de forma predeterminada la configuración global.

Descripción completa de la API

Para obtener una descripción de la API REST con ejemplos, consulte Event Streams schema-registry-rest.

Puede descargar la especificación completa de la API desde el archivo YAML de la API REST del Registro de Esquemas de Event Streams. Para ver el archivo Swagger, utilice las herramientas Swagger, por ejemplo, el editor Swagger.

Para obtener más información sobre cómo acceder al registro de esquemas utilizando un SDK, consulte API REST de registro de esquemas deEvent Streams.

Para obtener información sobre los recursos y orígenes de datos de Event Streams en Terraform, consulte recursos y orígenes de datos.

Uso del Registro de Esquemas con el tercero SerDes

El Registro de Esquemas admite el uso de los siguientes terceros SerDes:

  • Confluent SerDes

Para configurar Confluent SerDes para que utilice el registro de esquemas, debe especificar dos propiedades en la configuración del cliente Kafka:

Nombre de propiedad Valor
SCHEMA_REGISTRY_URL_CONFIG Establézcalo en el URL del registro de esquemas, incluidas sus credenciales como autenticación básica y con una vía de acceso de /confluent. Por ejemplo, si $APIKEY es la clave API que se debe utilizar y $HOST es el host del campo kafka_http_url en la pestaña Credenciales de servicio, el valor tiene la forma: https://token:{$APIKEY}@{$HOST}/{confluent}
BASIC_AUTH_CREDENTIALS_SOURCE Se establece en URL. Esto indica a SerDes que utilice la autenticación básica HTTP utilizando las credenciales proporcionadas en el URL del registro de esquemas.

Si lo desea, también puede proporcionar las siguientes propiedades para controlar la selección de esquemas (estrategia de denominación de asunto):

Nombre de propiedad Valor
VALUE_SUBJECT_NAME_STRATEGY Se da soporte a TopicNameStrategy (valor predeterminado), RecordNameStrategy y TopicRecordNameStrategy. Por ejemplo, para especificar que el esquema para el valor del mensaje se selecciona utilizando un TopicRecordNameStrategy, puede utilizar las siguientes propiedades de cliente: configs.put ( KafkaAvroSerializerConfig.VALUE_SUBJECT_NAME_STRATEGY, TopicRecordNameStrategy.class.getName( ));
KEY_SUBJECT_NAME_STRATEGY Se da soporte a TopicNameStrategy (valor predeterminado), RecordNameStrategy y TopicRecordNameStrategy. Consulte VALUE_SUBJECT_NAME_STRATEGY para ver un ejemplo.

El siguiente diagrama muestra un ejemplo de las propiedades que se requieren para crear un productor de Kafka que utilice el Confluent SerDes y que pueda conectarse al servicio Event Streams:

Kafka properties for Confluent Serdes
Kafka properties for Confluent Serdes

Si se envía un mensaje utilizando un esquema que no está en el registro, el servicio de validación de mensajes ( SerDes ) intenta crear el nuevo esquema, o la versión del esquema, en el registro. Si este comportamiento no es necesario, puede desactivarse eliminando el permiso de escritura para los recursos de esquema de la aplicación. Consulte Gestión del acceso al registro de esquemas.

La opción normalize para las búsquedas de esquema y el registro no es compatible.

Utilización del registro de esquema con herramientas que utilizan la API de registro de Confluent

El registro de esquema da soporte a un subconjunto de la API proporcionada por la versión 7.2 del registro de esquema confluente. Esto está pensado para proporcionar una compatibilidad limitada con las herramientas que se han diseñado para trabajar con el registro de esquema confluente. Solo se implementa el punto final REST de HTTP con las siguientes rutas:

  • compatibilidad
  • configuración
  • esquemas
  • asuntos

Para configurar una aplicación para que utilice esta API de compatibilidad, especifique el punto final de registro de esquema en el formato siguiente:

https://token:{$APIKEY}@{$HOST}/{confluent}

donde:

  • $APIKEY es la clave de API que se utiliza en el separador Credenciales de servicio
  • $HOST es el host del campo kafka_http_url en el separador Credenciales de servicio

Uso del Registro de Esquemas con herramientas de terceros

El Registro de Esquemas puede probarse con herramientas de terceros, como kafka-avro-console-producer.sh y kafka-avro-console-consumer.sh, que permiten probar la conformidad con el esquema utilizando el Confluent SerDes.

Para ejecutar la herramienta de productor o de consumidor, se requiere una propiedad común con las opciones de conexión para la instancia de empresa de Event Streams.

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

Productor y consumidor de la consola Avro

Puede utilizar el productor de la consola de Kafka Avro y las herramientas de consumidor con Event Streams. Debe proporcionar una propiedad de cliente y, además, el método de conexión y las credenciales para el Registro de Esquemas deben suministrarse como argumentos de línea de comandos --property. Existen dos métodos de conexión mediante el uso de una fuente de credenciales de USER_INFO o de URL.

Para ejecutar utilizando el método de fuente de credenciales de URL, utilice el siguiente 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

Sustituya las siguientes variables del ejemplo por sus propios valores.

  • BOOTSTRAP_ENDPOINTS con el valor de la pestaña Event Streams Credenciales de servicio en la consola de IBM Cloud, como la lista de los servidores de programa de arranque.
  • SCHEMA_REGISTRY_URL con el valor kafka_http_url de la pestaña de Event Streams Credenciales de servicio en la consola de IBM Cloud, con el nombre de usuario token y la clave de api, junto con la vía de acceso /confluent (por ejemplo, https://{token}:{apikey}@{kafka_http_url}/{confluent}).
  • CONFIG_FILE por la vía de acceso del archivo de configuración.

Para ejecutar utilizando el método de fuente de credenciales de USER_INFO, utilice el siguiente 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=USER_INFO --property basic.auth.user.info=token:apikey --producer.config $CONFIG_FILE

Sustituya las siguientes variables del ejemplo por sus propios valores.

  • BOOTSTRAP_ENDPOINTS con el valor de la pestaña Event Streams Credenciales de servicio en la consola de IBM Cloud, como la lista de los servidores de programa de arranque.
  • SCHEMA_REGISTRY_URL con el valor kafka_http_url de la pestaña de Event Streams Credenciales de servicio en la consola de IBM Cloud, con la vía de acceso /confluent (por ejemplo, https://{kafka_http_url}/{confluent}).
  • CONFIG_FILE por la vía de acceso del archivo de configuración.