Arquitectura orientada a eventos
Un evento afirma un hecho que ya ocurrió: se nombra en pasado, es inmutable y no tiene destinatario previsto. Un comando expresa una intención dirigida a un manejador, que puede rechazarla. Un evento puede ser una notificación delgada —el receptor vuelve a preguntar— o una transferencia de estado, que trae datos suficientes para mantener una réplica.
Log contra cola
En una cola el mensaje se entrega a uno de varios consumidores que compiten y se elimina al confirmarse. En un stream basado en log, el topic es un log de solo-anexado y particionado: los eventos no se borran al consumirse, se descartan al vencer la retención, y la compactación es otra política, que conserva el último valor de cada clave (con tombstone para el borrado). El orden se garantiza por partición, nunca por topic. Cada grupo de consumidores lleva sus offsets y puede rebobinar; el paralelismo útil máximo es la cantidad de particiones.
Sourcing, esquemas y entrega
En event sourcing el log es la fuente de verdad y el estado se reconstruye reproduciéndolo; los snapshots solo optimizan. No es publicar eventos, ni es CQRS.
BACKWARD: el esquema nuevo lee datos viejos, consumidores primero. FORWARD: el esquema viejo lee datos nuevos, productores primero. FULL: ambas. Un schema registry versiona, identifica y rechaza lo que viola la regla configurada.
La entrega es at-most-once o at-least-once; el "exactly once" real es efectivamente-una-vez.