Skip to content

Schema evolution y contratos ​

Los eventos son contratos entre equipos. Si un productor cambia un evento sin compatibilidad, puede romper consumidores que ni siquiera conoce.

Contrato de evento ​

Un contrato define:

  • Nombre del evento.
  • Topic.
  • Key.
  • Schema.
  • Semantica de campos.
  • Compatibilidad.
  • Owner.

Cambios seguros ​

Suelen ser seguros:

  • Añadir campo opcional.
  • Añadir campo con default.
  • Ampliar enum solo si consumidores toleran valores nuevos.
  • Añadir headers no obligatorios.

Cambios peligrosos ​

Suelen romper:

  • Borrar campos.
  • Renombrar campos.
  • Cambiar tipo.
  • Cambiar significado sin cambiar nombre.
  • Cambiar key de particion.

Versionado semantico ​

Ejemplo:

txt
OrderCreated v1
OrderCreated v2

No abuses de topics nuevos por cada version menor. Pero si el significado cambia mucho, separar puede ser mas claro.

Compatibilidad en CI ​

Una pipeline madura valida:

  1. Schema nuevo contra versiones anteriores.
  2. Ejemplos de payload.
  3. Consumers contract tests.
  4. Documentacion actualizada.

Schema Registry ​

Un Schema Registry permite bloquear cambios incompatibles antes de que lleguen a produccion.

Modos:

  • Backward.
  • Forward.
  • Full.
  • None.

Contratos con JSON ​

Si usas JSON, puedes usar JSON Schema.

Ejemplo simple:

json
{
  "type": "object",
  "required": ["event_id", "event_type", "occurred_at", "payload"],
  "properties": {
    "event_id": { "type": "string" },
    "event_type": { "type": "string" },
    "occurred_at": { "type": "string", "format": "date-time" }
  }
}

Documentacion minima ​

Cada topic deberia tener:

  • Owner.
  • Productores.
  • Consumidores conocidos.
  • Retencion.
  • Schema.
  • Ejemplos.
  • SLA o criticidad.

Buenas practicas ​

  • Trata eventos como API publica.
  • Evita cambios silenciosos.
  • Automatiza validacion de schemas.
  • Mantén ejemplos reales.
  • Comunica deprecaciones.
  • Define politica de compatibilidad por dominio.