O Confluent Schema Registry fornece uma camada de serviço para seus metadados. Ele fornece uma interface RESTful para armazenar e recuperar seus esquemas Avro®, JSON Schema e Protobuf. Ele armazena um histórico versionado de todos os esquemas com base em uma estratégia de nome de assunto especificada, fornece diversas configurações de compatibilidade e permite a evolução de esquemas de acordo com as configurações de compatibilidade configuradas e suporte expandido para esses tipos de esquema. Ele fornece serializadores que se conectam a clientes Apache Kafka® que lidam com armazenamento e recuperação de esquema para mensagens Kafka enviadas em qualquer um dos formatos suportados.
Este README inclui as seguintes seções:
Aqui estão alguns links para páginas do Schema Registry na documentação do Confluent.
O seguinte pressupõe que você tenha o Kafka e uma instância do Schema Registry em execução usando as configurações padrão. Esses exemplos, e muito mais, também estão disponíveis em Exemplos de uso de API em docs.confluent.io.
# Register a new version of a schema under the subject "Kafka-key"
$ curl -X POST -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"schema": "{"type": "string"}"} '
http://localhost:8081/subjects/Kafka-key/versions
{ " id " :1}
# Register a new version of a schema under the subject "Kafka-value"
$ curl -X POST -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"schema": "{"type": "string"}"} '
http://localhost:8081/subjects/Kafka-value/versions
{ " id " :1}
# List all subjects
$ curl -X GET http://localhost:8081/subjects
[ " Kafka-value " , " Kafka-key " ]
# List all schema versions registered under the subject "Kafka-value"
$ curl -X GET http://localhost:8081/subjects/Kafka-value/versions
[1]
# Fetch a schema by globally unique id 1
$ curl -X GET http://localhost:8081/schemas/ids/1
{ " schema " : " " string " " }
# Fetch version 1 of the schema registered under subject "Kafka-value"
$ curl -X GET http://localhost:8081/subjects/Kafka-value/versions/1
{ " subject " : " Kafka-value " , " version " :1, " id " :1, " schema " : " " string " " }
# Fetch the most recently registered schema under subject "Kafka-value"
$ curl -X GET http://localhost:8081/subjects/Kafka-value/versions/latest
{ " subject " : " Kafka-value " , " version " :1, " id " :1, " schema " : " " string " " }
# Delete version 3 of the schema registered under subject "Kafka-value"
$ curl -X DELETE http://localhost:8081/subjects/Kafka-value/versions/3
3
# Delete all versions of the schema registered under subject "Kafka-value"
$ curl -X DELETE http://localhost:8081/subjects/Kafka-value
[1, 2, 3, 4, 5]
# Check whether a schema has been registered under subject "Kafka-key"
$ curl -X POST -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"schema": "{"type": "string"}"} '
http://localhost:8081/subjects/Kafka-key
{ " subject " : " Kafka-key " , " version " :1, " id " :1, " schema " : " " string " " }
# Test compatibility of a schema with the latest schema under subject "Kafka-value"
$ curl -X POST -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"schema": "{"type": "string"}"} '
http://localhost:8081/compatibility/subjects/Kafka-value/versions/latest
{ " is_compatible " :true}
# Get top level config
$ curl -X GET http://localhost:8081/config
{ " compatibilityLevel " : " BACKWARD " }
# Update compatibility requirements globally
$ curl -X PUT -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"compatibility": "NONE"} '
http://localhost:8081/config
{ " compatibility " : " NONE " }
# Update compatibility requirements under the subject "Kafka-value"
$ curl -X PUT -H " Content-Type: application/vnd.schemaregistry.v1+json "
--data ' {"compatibility": "BACKWARD"} '
http://localhost:8081/config/Kafka-value
{ " compatibility " : " BACKWARD " }
Você pode baixar versões pré-construídas do registro de esquema como parte da plataforma Confluent. Para instalar a partir do código-fonte, siga as instruções na seção Desenvolvimento.
A interface REST para registro de esquema inclui um servidor Jetty integrado. Os scripts wrapper bin/schema-registry-start
e bin/schema-registry-stop
são o método recomendado para iniciar e parar o serviço.
Para construir uma versão de desenvolvimento, você pode precisar de versões de desenvolvimento de utilitários comuns e restantes. Depois de instalá-los, você pode construir o Schema Registry com Maven.
Este projeto usa o estilo de código Google Java para manter o código limpo e consistente.
Para construir:
mvn compile
Para executar os testes de unidade e integração:
mvn test
Para executar uma instância do Schema Registry em um cluster Kafka local (usando a configuração padrão incluída no Kafka):
mvn exec:java -pl :kafka-schema-registry -Dexec.args= " config/schema-registry.properties "
Para criar uma versão empacotada, opcionalmente ignorando os testes:
mvn package [-DskipTests]
Produz:
package-schema-registry/target/kafka-schema-registry-package-$VERSION-package
package-kafka-serde-tools/target/kafka-serde-tools-package-$VERSION-package
Cada um dos produzidos contém um layout de diretório semelhante às versões binárias empacotadas.
Você também pode produzir um JAR gordo independente do registro de esquema usando o perfil standalone
:
mvn package -P standalone [-DskipTests]
Isso gera package-schema-registry/target/kafka-schema-registry-package-$VERSION-standalone.jar
, que inclui todas as dependências também.
As especificações OpenAPI (anteriormente conhecidas como Swagger) são construídas automaticamente usando swagger-maven-plugin
na fase compile
.
Obrigado por nos ajudar a tornar o Schema Registry ainda melhor!
O projeto está licenciado sob a Confluent Community License, exceto as bibliotecas client-*
e avro-*
, que estão sob a licença Apache 2.0. Consulte o arquivo LICENSE em cada subpasta para obter o contrato de licença detalhado.