Zum Hauptinhalt springen
Change Data Capture · Neu in 2.1.0

Change Data Capture — jede Änderung als Stream

Zaris erfasst jedes Put und Delete im Keyspace in einem erstklassigen, dauerhaften, geordneten Change Feed. Lesen Sie ihn mit einem OpenChangeFeed-Consumer, setzen Sie von einem serverseitig verfolgten Cursor aus fort und halten Sie Ihre Caches, Indizes, Read Models und nachgelagerten Systeme im Gleichschritt mit den Daten.

So funktioniert es

Ein geordneter Feed, viele Consumer

Schreibvorgänge fließen bei ihrer Anwendung in einen dauerhaften Feed. Benannte Consumer lesen unabhängig daraus, filtern an der Quelle und merken sich ihre Position — so bleibt jedes nachgelagerte System in seinem eigenen Takt synchron.

KeyspacePut / Deleteauf jeder PartitionChange Feeddauerhaft · geordnetwiederaufnehmbarer Cursorautomatisch erfasstSuchindexCache-/CDN-InvalidiererMaterialized ViewAudit-Log / ETLbenannte Consumer · Offset & Lag pro Consumer · Präfix-/Operationstyp-Filter
Das Consumer-SDK

Wenige Zeilen bis zur Live-Projektion

  • OpenChangeFeed(options, ct)Liefert einen Stream öffentlicher ChangeEvents — den Key, den Operationstyp (Put/Delete), den Wert samt Metadaten (einschließlich TTL) und den Zeitpunkt des Quell-Schreibvorgangs.
  • Fortsetzen statt neu abspielenSetzen Sie einen dauerhaften ConsumerName, und der Server verfolgt Ihren committeten Offset — öffnen Sie erneut und machen Sie genau dort weiter, wo Sie aufgehört haben, auch nach einem Absturz oder Deployment. Kein manueller Commit.
  • Auf dem Server filternBegrenzen Sie den Feed nach Key-Präfix und Operationstyp, sodass Sie nur die Änderungen erhalten, die Sie interessieren.
// 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.
}
Warum CDC in Zaris

Kein Pub/Sub. Kein Polling-Job. Ein System of Record für Änderungen.

Pub/Sub und Streams sind explizit und flüchtig — Sie publizieren in sie hinein. Der Change Feed ist implizit und dauerhaft: Er hält fest, was mit Ihren Daten tatsächlich geschehen ist, der Reihe nach, für jeden, der es braucht.

Automatisch erfasst

Jedes Put und Delete im Keyspace wird zu einem geordneten Änderungsereignis — ohne Anwendungs-Plumbing, ohne Dual-Writes. Anders als Pub/Sub oder Streams, in die Sie explizit publizieren, ist der Feed ein getreues Protokoll dessen, was sich tatsächlich geändert hat.

Dauerhaft & geordnet

Änderungen landen in der Reihenfolge ihrer Anwendung in einem dauerhaften, replizierten Feed, sodass ein Consumer, der Stunden später startet, noch jede Änderung sieht — pro Cursor genau einmal, in Reihenfolge.

Wiederaufnehmbar, pro Consumer

Setzen Sie von einem dauerhaften, serverseitig verfolgten Offset des benannten Consumers fort. Jeder Consumer hat seine eigene Position, sodass eine langsame Senke die anderen nie ausbremst — und ihr Lag für Betreiber sichtbar ist.

An der Quelle gefiltert

Schränken Sie den Feed auf dem Server nach Key-Präfix und Operationstyp ein, sodass ein Consumer nur den Ausschnitt erhält, der ihn interessiert — weniger Arbeit auf der Leitung und in Ihrem Code.

Reichhaltige Änderungsereignisse

Jedes ChangeEvent enthält den Key, den Operationstyp, den Wert samt Metadaten (einschließlich TTL) und ein Cursor-Token — alles, was ein nachgelagertes System braucht, um die Änderung anzuwenden und seine Position zu merken.

Sicher & optional

Der Feed ist bei aktivierter Sicherheit leseautorisiert, und die gesamte Funktion ist additiv und optional — ein Store, der nie einen Feed öffnet, bleibt vollständig unberührt.

Was Sie bauen können

Binden Sie Ihre Daten an alles Nachgelagerte an

Aktualität

Cache- & CDN-Invalidierung

Steuern Sie eine präzise Invalidierung aus der Quelle der Wahrheit: Sobald sich ein Key ändert, räumen Sie genau den richtigen Cache- oder CDN-Eintrag, statt mit pauschalen TTLs zu raten.

Suche

Suchindex synchron halten

Streamen Sie Puts und Deletes direkt nach Elasticsearch, OpenSearch oder in einen Vektor-Store, sodass Ihr Index den Daten um Millisekunden statt um einen nächtlichen Batch hinterherhinkt.

Read Models

Materialized Views & Projektionen

Pflegen Sie denormalisierte Read Models und CQRS-Projektionen, indem Sie den Änderungsstrom fortlaufend falten — und bauen Sie sie vom Beginn des Feeds neu auf, sobald sich die Struktur ändert.

Compliance

Audit-Logs & Event Sourcing

Halten Sie eine geordnete, dauerhafte Spur jeder Mutation für Audit, Replay und Point-in-Time-Rekonstruktion fest — am Store erfasst, nicht an jeden Service angeflanscht.

Integration

Outbox & ETL zu nachgelagerten Systemen

Nutzen Sie den Feed als zuverlässige Outbox: Liefern Sie Änderungen an ein Data Warehouse, einen Message Bus oder ein Partnersystem — ohne Dual-Writes und ohne fragilen Polling-Job.

Echtzeit

Live-UI-Subscriptions

Verteilen Sie Änderungen an Dashboards und Clients, sodass sich Bildschirme im selben Moment aktualisieren, in dem sich die zugrunde liegenden Daten ändern — keine Polling-Schleife, keine Veralterung.

Machen Sie aus Ihrem Store einen Strom von Änderungen

Change Data Capture ist optional und additiv — öffnen Sie einen Feed dort, wo Sie ihn brauchen, und lassen Sie jeden anderen Store unberührt.