Versionamento de Eventos
Estratégias de compatibilidade
Tutorial comparando versionamento no payload, tópico e upcasting no consumidor.
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
- Versão no payload (
eventVersion): simples, baixo custo operacional. - Tópico por versão (
customer.created.v1,customer.created.v2): isolamento maior, mais operação. - 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.