Schema Registry no Azure Event Hubs

Schema Registry no Azure Event Hubs

Neste artigo você vai configurar o Schema Registry no Azure Event Hubs com Terraform, criando um schema group Avro com compatibilidade Forward. O Schema Registry no Azure Event Hubs garante que todos os produtores e consumidores concordem com o formato das mensagens — sem schema registry, um produtor que muda o formato de um campo pode quebrar silenciosamente todos os consumidores.

Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • 📖 Art. 02: Azure Event Hubs com Terraform
  • 📖 Art. 03: Python e Kafka no Azure Event Hubs
  • 📖 Art. 04: Kafka Connect no Azure Container Instances
  • ⚙️ Art. 05 (este): Schema Registry no Azure Event Hubs
  • 🔒 Art. 06: Monitoramento Kafka com Grafana no Azure

Sumário

O que é Schema Registry

Schema Registry é um serviço centralizado que armazena e valida os schemas (formatos) das mensagens que trafegam em um sistema de mensageria. Sem schema registry, cada produtor e consumidor precisa concordar informalmente sobre o formato das mensagens — e qualquer mudança no produtor pode quebrar consumidores existentes sem aviso. Com schema registry, o schema é um contrato formal: quando um produtor tenta publicar uma mensagem com schema incompatível, o registro rejeita a publicação antes que a mensagem chegue ao event hub.

O Schema Registry no Azure Event Hubs é um serviço nativo do namespace — sem custo adicional no SKU Standard — que suporta dois formatos: Avro (binário, compacto, tipado) e JSON Schema (texto, legível, mais flexível). Para o nosso sistema de pedidos, Avro é a escolha mais eficiente: as mensagens são menores (sem nomes de campos repetidos como em JSON) e o schema garante que o campo pedido_id seja sempre um inteiro.

Schema Registry no Azure Event Hubs

O Schema Registry no Azure Event Hubs é organizado em schema groups — agrupamentos lógicos de schemas relacionados. Um schema group define o tipo de schema (Avro ou JSON) e o modo de compatibilidade que se aplica a todos os schemas dentro do grupo. No SKU Standard, cada namespace suporta até 1 schema group. No SKU Premium, o limite é 10 schema groups.

Para o nosso lab, criamos um único schema group Avro com compatibilidade Forward — adequado para a maioria dos cenários de evolução de schema em produção. O Terraform provisiona o schema group; os schemas individuais (como o schema do evento de pedido) são registrados via REST API após o deploy.

Avro vs JSON Schema

Avro é um formato de serialização binário desenvolvido pelo Apache que usa um schema para descrever a estrutura dos dados. Ao contrário do JSON, as mensagens Avro não incluem os nomes dos campos — apenas os valores binários, na ordem definida pelo schema. Isso resulta em mensagens muito menores: um evento de pedido com 5 campos em Avro tem tipicamente 40-60% do tamanho equivalente em JSON. Para o Schema Registry no Azure Event Hubs, Avro é recomendado quando o throughput de mensagens é alto.

JSON Schema é uma opção mais acessível para equipes que já trabalham com JSON: as mensagens continuam legíveis sem ferramentas especiais e o schema define apenas os tipos e restrições. Use JSON Schema quando a legibilidade e a facilidade de debug são prioridade e o overhead de tamanho das mensagens é aceitável.

Modos de compatibilidade: Forward e Backward

O modo de compatibilidade define o contrato de evolução de schemas no Schema Registry no Azure Event Hubs:

ModoDefiniçãoCaso de uso
ForwardNovo schema é legível por consumidores com schema antigoProdutores atualizam antes dos consumidores
BackwardSchema antigo é legível por consumidores com schema novoConsumidores atualizam antes dos produtores
FullCompatível em ambas as direçõesRestrição mais conservadora, permite atualizações em qualquer ordem
NoneSem verificação de compatibilidadeLabs e experimentos

Para o nosso sistema de e-commerce, Forward é a escolha certa: quando adicionamos um novo campo opcional (como canal_venda) ao schema de pedidos, os consumidores com schema antigo simplesmente ignoram o campo desconhecido. O produtor pode ser atualizado com segurança antes dos consumidores.

Pré-requisitos

O Schema Registry no Azure Event Hubs deste artigo requer o Art. 02 aplicado — o namespace evhns-kafka-blog-castilho-eus deve existir. O módulo faz referência ao ID do namespace via data source.

Passo 1 — main.tf: módulo de schema registry

O módulo terraform-eventhub-schema-modules cria os schema groups dentro do namespace. No SKU Standard, apenas 1 schema group é suportado — o módulo já trata essa limitação:

data "azurerm_eventhub_namespace" "kafka" {
  name                = "evhns-kafka-blog-castilho-eus"
  resource_group_name = "rg-kafka-blog-castilho-eus"
}

module "schema_registry" {
  source       = "../../terraform-eventhub-schema-modules"
  namespace_id = data.azurerm_eventhub_namespace.kafka.id

  schema_groups = [
    {
      name                 = "sg-avro-blog-castilho-eus"
      schema_type          = "Avro"
      schema_compatibility = "Forward"
    },
  ]
}

O argumento namespace_id (e não o nome do namespace) é necessário para o recurso azurerm_eventhub_schema_group. O data source do namespace resolve o ID automaticamente.

Passo 2 — Executar o Terraform

cp backend.hcl.example backend.hcl
terraform init -backend-config=backend.hcl
terraform plan
terraform apply

Resultado do apply

Após o apply, o Schema Registry no Azure Event Hubs está disponível no namespace:

RecursoNomeDetalhe
Schema Groupsg-avro-blog-castilho-eusTipo: Avro, Compatibilidade: Forward

Verifique via CLI:

az eventhubs namespace schema-registry list \
  --resource-group rg-kafka-blog-castilho-eus \
  --namespace-name evhns-kafka-blog-castilho-eus \
  --output table

Registrar um schema Avro

Com o schema group criado, registre o schema do evento de pedido via REST API do Schema Registry no Azure Event Hubs. O endpoint usa a mesma autenticação SAS do namespace:

NAMESPACE="evhns-kafka-blog-castilho-eus"
SCHEMA_GROUP="sg-avro-blog-castilho-eus"
SCHEMA_NAME="Pedido"

# Obter token SAS
SAS_TOKEN=$(az eventhubs namespace authorization-rule keys list \
  --resource-group rg-kafka-blog-castilho-eus \
  --namespace-name $NAMESPACE \
  --name RootManageSharedAccessKey \
  --query primaryKey -o tsv)

# Registrar schema
curl -X PUT \
  "https://$NAMESPACE.servicebus.windows.net/$SCHEMA_GROUP/schemas/$SCHEMA_NAME?api-version=2021-10" \
  -H "Authorization: SharedAccessSignature $SAS_TOKEN" \
  -H "Content-Type: application/json; serialization=Avro" \
  -d '{
    "type": "record",
    "name": "Pedido",
    "namespace": "com.castilho.kafka",
    "fields": [
      {"name": "pedido_id", "type": "int"},
      {"name": "produto",   "type": "string"},
      {"name": "quantidade","type": "int"},
      {"name": "timestamp", "type": "long"}
    ]
  }'

Limitações do SKU Standard

O SKU Standard impõe algumas limitações importantes ao Schema Registry no Azure Event Hubs: (1) máximo de 1 schema group por namespace — se você precisar de grupos separados para Avro e JSON, faça upgrade para o SKU Premium; (2) o limite de schemas por grupo é 25 no Standard e 1000 no Premium; (3) não há suporte a schema groups com tipo JSON no SKU Standard de algumas regiões — verifique a disponibilidade antes de escolher JSON Schema em vez de Avro.

No Terraform do Art. 05 dessa série, o schema group JSON foi removido justamente por essa limitação — o SKU Standard só permite 1 grupo, e escolhemos Avro por ser o formato mais eficiente para o caso de uso.

Troubleshooting

Erro: SchemaGroupQuotaExceeded — o SKU Standard já tem 1 schema group. Execute terraform destroy no schema group existente antes de criar um novo, ou faça upgrade do namespace para Premium.

Schema incompatível rejeitado — se tentar registrar uma versão nova do schema que viola a compatibilidade Forward (ex: remover um campo obrigatório), o registro retorna 409 Conflict. Revise as mudanças — campos novos devem ter valores default em Avro para manter compatibilidade Forward.

Próximos passos

Com o Schema Registry no Azure Event Hubs configurado e o schema Avro de pedidos registrado, o último artigo da série configura o monitoramento completo com Azure Managed Grafana e Log Analytics — dashboards de throughput, latência e consumer group lag em tempo real.

Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • 📖 Art. 02: Azure Event Hubs com Terraform
  • 📖 Art. 03: Python e Kafka no Azure Event Hubs
  • 📖 Art. 04: Kafka Connect no Azure Container Instances
  • ⚙️ Art. 05 (este): Schema Registry no Azure Event Hubs
  • 🔒 Art. 06: Monitoramento Kafka com Grafana no Azure

Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI

🚀 Vamos nos conectar?

Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.

Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!


💬 Dúvidas ou Problemas?

Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!

Muito obrigado pela visita e até o próximo post!

Jefferson Castilho Especialista em Cloud & DevOps.

Este guia técnico é exclusivo do Blog do Castilho. Explore nossa para mais conteúdos sobre IA e Cloud.

 

Deixe uma resposta

Descubra mais sobre Blog do Castilho - Tecnologia | FinOps | DevOps | Cloud

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continuar lendo