Aller au contenu principal
Change Data Capture · Nouveau dans la 2.1.0

Change Data Capture — chaque changement, sous forme de flux

Zaris capture chaque Put et Delete dans l'espace de clés dans un change feed de premier ordre, durable et ordonné. Lisez-le depuis un consommateur OpenChangeFeed, reprenez à partir d'un curseur suivi par le serveur, et gardez vos caches, index, modèles de lecture et systèmes en aval parfaitement synchronisés avec les données.

Comment ça marche

Un feed ordonné, de nombreux consommateurs

Les écritures affluent dans un feed durable à mesure qu'elles sont appliquées. Des consommateurs nommés y lisent indépendamment, filtrent à la source et mémorisent leur position — de sorte que chaque système en aval reste synchronisé selon son propre rythme.

Espace de clésPut / Deletesur n'importe quelle partitionChange feeddurable · ordonnécurseur reprenablecapturé automatiquementIndex de rechercheInvalidateur de cache / CDNVue matérialiséeJournal d'audit / ETLconsommateurs nommés · offset et retard par consommateur · filtres par préfixe / type d'opération
Le SDK consommateur

Quelques lignes vers une projection en direct

  • OpenChangeFeed(options, ct)Produit un flux de ChangeEvents publics — la clé, le type d'op (Put/Delete), la valeur et ses métadonnées (dont le TTL), et l'heure d'écriture à la source.
  • Reprendre, pas rejouerDéfinissez un ConsumerName durable et le serveur suit votre offset validé — rouvrez et reprenez exactement là où vous vous êtes arrêté, même après un crash ou un déploiement. Aucun commit manuel.
  • Filtrer sur le serveurDélimitez le feed par préfixe de clé et type d'opération, pour ne recevoir que les changements qui vous intéressent.
// 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.
}
Pourquoi le CDC dans Zaris

Pas du pub/sub. Pas une tâche de polling. Un système de référence pour le changement.

Le pub/sub et les Streams sont explicites et éphémères — vous y publiez. Le change feed est implicite et durable : il enregistre ce qui est réellement arrivé à vos données, dans l'ordre, pour quiconque en a besoin.

Capturé automatiquement

Chaque Put et Delete dans l'espace de clés devient un événement de changement ordonné — aucune plomberie applicative, aucune double écriture. Contrairement au pub/sub ou aux Streams, auxquels vous publiez explicitement, le feed est un enregistrement fidèle de ce qui a réellement changé.

Durable et ordonné

Les changements arrivent dans un feed durable et répliqué, dans l'ordre où ils ont été appliqués, de sorte qu'un consommateur qui démarre des heures plus tard voit toujours chaque changement, exactement une fois par curseur, en séquence.

Reprenable, par consommateur

Reprenez à partir d'un offset de consommateur nommé, durable et suivi par le serveur. Chaque consommateur a sa propre position, de sorte qu'un sink lent ne retient jamais les autres — et son retard est visible pour les opérateurs.

Filtré à la source

Restreignez le feed par préfixe de clé et type d'opération sur le serveur, de sorte qu'un consommateur ne reçoive que la tranche qui l'intéresse — moins de travail sur le réseau et dans votre code.

Événements de changement riches

Chaque ChangeEvent porte la clé, le type d'opération, la valeur et ses métadonnées (dont le TTL), et un jeton de curseur — tout ce dont un système en aval a besoin pour appliquer le changement et mémoriser sa position.

Sécurisé et opt-in

Le feed est soumis à autorisation de lecture lorsque la sécurité est activée, et toute la capacité est additive et en opt-in — un store qui n'ouvre jamais de feed n'est absolument pas affecté.

Ce que vous pouvez construire

Câblez vos données vers tout ce qui est en aval

Fraîcheur

Invalidation de cache et CDN

Pilotez une invalidation précise depuis la source de vérité — à l'instant où une clé change, évincez exactement la bonne entrée de cache ou de CDN au lieu de deviner avec des TTL généralisés.

Recherche

Garder un index de recherche synchronisé

Diffusez les Puts et Deletes directement vers Elasticsearch, OpenSearch ou un vector store, pour que votre index suive les données avec un retard de quelques millisecondes, et non un batch nocturne.

Modèles de lecture

Vues matérialisées et projections

Maintenez des modèles de lecture dénormalisés et des projections CQRS en repliant le flux de changements vers l'avant — reconstruisez-en un depuis le début du feed chaque fois que la forme change.

Conformité

Journaux d'audit et event sourcing

Persistez une trace ordonnée et durable de chaque mutation pour l'audit, la relecture et la reconstruction à un instant donné — capturée au niveau du store, et non greffée sur chaque service.

Intégration

Outbox et ETL vers les systèmes en aval

Utilisez le feed comme un outbox fiable : expédiez les changements vers un entrepôt de données, un bus de messages ou un système partenaire sans double écriture ni tâche de polling fragile.

Temps réel

Abonnements d'UI en direct

Diffusez les changements vers les tableaux de bord et les clients pour que les écrans se mettent à jour à l'instant où les données sous-jacentes bougent — sans boucle de polling, sans obsolescence.

Transformez votre store en un flux de changements

Le Change Data Capture est en opt-in et additif — ouvrez un feed là où vous en avez besoin, laissez tous les autres stores intacts.