Versionamento de Eventos

Estratégias de compatibilidade

Tutorial comparando versionamento no payload, tópico e upcasting no consumidor.

Avançado 35 min 30 pontos Leitura 0%

Nesta aula você vai

  • Comparar estratégias de versionamento em Kafka
  • Aplicar upcasting para reduzir impacto em consumidores
  • Escolher estratégia com critérios técnicos claros

Estratégias de compatibilidade

Nesta aula você vai decidir qual estratégia de versionamento adotar no monorepo e implementar uma abordagem prática.

Estratégias comparadas

  1. Versão no payload (eventVersion): simples, baixo custo operacional.
  2. Tópico por versão (customer.created.v1, customer.created.v2): isolamento maior, mais operação.
  3. Upcasting no consumidor: consumidor converte versões antigas para modelo interno atual.

Implementação recomendada no projeto

Para este módulo: versão no payload + upcasting.

Arquivo: services/analytics-service/src/consumers/customerCreatedUpcaster.ts

export function upcastCustomerCreated(event: any): CustomerCreatedV2 {
  if (event.eventVersion === "v2") return event;
  if (event.eventVersion === "v1") {
    return {
      ...event,
      eventVersion: "v2",
      document: "UNKNOWN",
      marketingConsent: false
    };
  }
  throw new Error("UNSUPPORTED_EVENT_VERSION");
}

Teste de upcasting

Arquivo: services/analytics-service/tests/unit/customerCreatedUpcaster.test.ts

it("upcasts v1 to v2", () => {
  const result = upcastCustomerCreated(v1Fixture);
  expect(result.eventVersion).toBe("v2");
  expect(result.document).toBe("UNKNOWN");
});

Comando:

cd services/analytics-service
npm test -- customerCreatedUpcaster.test.ts

Checklist de decisão arquitetural

  • Quantos consumidores existem hoje?
  • Há necessidade regulatória de manter eventos isolados por tópico?
  • Equipe suporta manter dupla operação temporária?
  • Existe observabilidade por versão?

Resumo

Você comparou estratégias de compatibilidade e implementou upcasting para absorver versões antigas sem interromper consumidores atuais.