Saltar al contenido principal
Change Data Capture · Novedad en 2.1.0

Change Data Capture — cada cambio, como un flujo

Zaris captura cada Put y Delete sobre el espacio de claves en un feed de cambios de primera clase, duradero y ordenado. Léelo desde un consumidor OpenChangeFeed, reanuda desde un cursor controlado por el servidor y mantén tus cachés, índices, modelos de lectura y sistemas posteriores perfectamente sincronizados con los datos.

Cómo funciona

Un feed ordenado, muchos consumidores

Las escrituras fluyen hacia un feed duradero a medida que se aplican. Los consumidores con nombre leen de él de forma independiente, filtran en el origen y recuerdan su posición — de modo que cada sistema posterior se mantiene sincronizado a su propio ritmo.

Espacio de clavesPut / Deleteen cualquier particiónFeed de cambiosduradero · ordenadocursor reanudablecapturado automáticamenteÍndice de búsquedaInvalidador de caché / CDNVista materializadaRegistro de auditoría / ETLconsumidores con nombre · offset y lag por consumidor · filtros de prefijo / tipo de operación
El SDK de consumidor

Unas pocas líneas para una proyección en vivo

  • OpenChangeFeed(options, ct)Produce un flujo de ChangeEvents públicos — la clave, el tipo de operación (Put/Delete), el valor y sus metadatos (incluido el TTL) y la hora de escritura de origen.
  • Reanuda, no reproduzcas de nuevoDefine un ConsumerName duradero y el servidor hace seguimiento de tu offset confirmado — reabre y continúa exactamente donde lo dejaste, incluso tras un fallo o un despliegue. Sin commit manual.
  • Filtra en el servidorAcota el feed por prefijo de clave y tipo de operación, de modo que recibas solo los cambios que te interesan.
// A durable ConsumerName makes the server track this consumer's committed
// offset and lag — reopen the feed and it resumes automatically.
var options = new ChangeFeedOptions
{
    ConsumerName = "search-indexer",
    KeyPrefix    = "product:",                       // server-side filter
    Kinds        = new[] { FeedEventKind.Put, FeedEventKind.Delete },
};

var feed = (IZarisChangeFeedClient)client;           // the Zaris client is a feed consumer

await foreach (ChangeEvent e in feed.OpenChangeFeed(options, ct))
{
    if (e.IsDelete)
        await index.RemoveAsync(e.Key);
    else if (e.Value is { } bytes)                   // raw bytes of a plain-value write
        await index.UpsertAsync(e.Key, bytes, e.ExpiresAtUnixMs);
    // No manual commit: the named consumer's offset is tracked server-side.
}
Por qué CDC en Zaris

No es pub/sub. No es un trabajo de sondeo. Un sistema de registro del cambio.

Pub/sub y Streams son explícitos y efímeros — tú publicas en ellos. El feed de cambios es implícito y duradero: registra lo que realmente le ocurrió a tus datos, en orden, para quien lo necesite.

Capturado automáticamente

Cada Put y Delete sobre el espacio de claves se convierte en un evento de cambio ordenado — sin fontanería en la aplicación, sin escrituras dobles. A diferencia de pub/sub o Streams, en los que publicas de forma explícita, el feed es un registro fiel de lo que realmente cambió.

Duradero y ordenado

Los cambios llegan a un feed duradero y replicado en el orden en que se aplicaron, de modo que un consumidor que arranca horas más tarde sigue viendo cada cambio, exactamente una vez por cursor, en secuencia.

Reanudable, por consumidor

Reanuda desde un offset de consumidor con nombre, duradero y controlado por el servidor. Cada consumidor tiene su propia posición, por lo que un destino lento nunca frena a los demás — y su lag es visible para los operadores.

Filtrado en el origen

Reduce el feed por prefijo de clave y tipo de operación en el servidor, de modo que un consumidor solo reciba la porción que le interesa — menos trabajo en la red y en tu código.

Eventos de cambio enriquecidos

Cada ChangeEvent lleva la clave, el tipo de operación, el valor y sus metadatos (incluido el TTL) y un token de cursor — todo lo que un sistema posterior necesita para aplicar el cambio y recordar su posición.

Seguro y opcional

El feed requiere autorización de lectura cuando la seguridad está activada, y toda la capacidad es aditiva y opcional — un almacén que nunca abre un feed no se ve afectado en absoluto.

Lo que puedes construir

Conecta tus datos con todo lo que viene después

Frescura

Invalidación de caché y CDN

Impulsa una invalidación precisa desde la fuente de verdad — en cuanto una clave cambia, expulsa exactamente la entrada de caché o CDN correcta en lugar de adivinar con TTL genéricos.

Búsqueda

Mantén un índice de búsqueda sincronizado

Transmite los Puts y Deletes directamente a Elasticsearch, OpenSearch o un almacén de vectores, para que tu índice vaya por detrás de los datos por milisegundos, no por un proceso por lotes nocturno.

Modelos de lectura

Vistas materializadas y proyecciones

Mantén modelos de lectura desnormalizados y proyecciones CQRS plegando el flujo de cambios hacia adelante — reconstruye uno desde el inicio del feed cada vez que cambie la forma.

Cumplimiento

Registros de auditoría y event sourcing

Conserva un rastro ordenado y duradero de cada mutación para auditoría, reproducción y reconstrucción a un punto en el tiempo — capturado en el almacén, no añadido a cada servicio.

Integración

Outbox y ETL hacia sistemas posteriores

Usa el feed como un outbox fiable: envía cambios a un data warehouse, un bus de mensajes o un sistema de un socio sin escrituras dobles ni un frágil trabajo de sondeo.

Tiempo real

Suscripciones de interfaz en vivo

Distribuye los cambios a paneles y clientes para que las pantallas se actualicen en el instante en que se mueven los datos subyacentes — sin bucle de sondeo, sin datos obsoletos.

Convierte tu almacén en un flujo de cambios

Change Data Capture es opcional y aditivo — abre un feed donde lo necesites y deja intacto cualquier otro almacén.