Änderungsstreams – Übersicht
Bigtable bietet Change Data Capture (CDC) mit seinen Änderungsstreams. . Ein Änderungsstream erfasst Datenänderungen in einer Bigtable-Tabelle wenn die Änderungen eintreten, sodass Sie sie zur Verarbeitung streamen können. oder Analyse.
Dieses Dokument bietet einen Überblick über Bigtable-Änderungsstreams. Bevor Sie dieses Dokument lesen, sollten Sie mit den Bigtable-Übersicht
Änderungsstreams sind für CDC-Anwendungsfälle wie die folgenden nützlich:
- Nachgelagerte Anwendungslogik auslösen, wenn angegebene Änderungen auftreten
- In eine Datenanalysepipeline einbinden
- Anforderungen an Audits und Archivierung erfüllen
Was ist ein Veränderungsstream?
Ein Änderungsstream verfolgt Änderungen auf Tabellenebene, die von einem Nutzer oder -Anwendung, die in der Regel eine der Cloud Bigtable-Clientbibliotheken verwendet. Änderungen der automatischen Speicherbereinigung werden ebenfalls erfasst.
Alle Änderungen, die auf eine Tabelle mit aktiviertem Änderungsstream angewendet werden, werden als Datenänderung gespeichert Datensätze. Datenänderungseinträge enthalten Datenänderungen, die durch Folgendes angewendet wurden:
- Schreib-, Lösch- und Aktualisierungsvorgänge, die mit den Cloud Bigtable API-Methoden
MutateRow
,MutateRows
,CheckAndMutateRow
undReadModifyWriteRow
gesendet werden - Löschungen aufgrund der automatischen Speicherbereinigung
- Zeilen, die mit der Methode
DropRowRange
der Admin API gelöscht wurden
Weitere Informationen zu den Arten von Änderungen, die Sie an einen Bigtable-Tabelle, siehe Lesevorgänge, Schreibvorgänge, Löschungen, und Die Müllabfuhr – Übersicht.
Mit Änderungsstreams werden keine Schemaänderungen erfasst, z. B. das Hinzufügen oder Ändern eines Spaltenfamilie oder Replikationstopologie verwendet werden, wie das Hinzufügen oder Entfernen eines Clusters.
Datenänderungseinträge für jeden Zeilenschlüssel und jeden Cluster befinden sich im Commit-Zeitstempel Reihenfolge. Es gibt jedoch keine Bestellgarantie für Datenänderungsdatensätze für eine Zeilenschlüssel oder Cluster.
Sie aktivieren Änderungsstreams für eine Tabelle und geben eine Aufbewahrungsdauer von 1 bis 7 an Tage.
Inhalt eines Datenänderungsdatensatzes
Jeder Datenänderungseintrag enthält alle Änderungen für eine Zeile, die atomically im Rahmen eines einzelnen RPC-Aufrufs angewendet wurden.
Wenn ein Wert überschrieben wird, wird der neu geschriebene Wert im Datenänderungseintrag erfasst. Der Datenänderungseintrag enthält nicht den alten Wert.
Ein Datenänderungseintrag erhält seinen Zeitstempel, den sogenannten Commit-Zeitstempel, gleichzeitig mit der Anwendung der Änderung auf den ersten Cluster, der sie empfängt. Für Stellen Sie sich eine Instanz mit zwei Clustern vor. Wenn Sie eine Schreibanfrage an Tabelle 1 in Cluster A senden, wird der Commit-Zeitstempel für den Datenänderungseintrag zugewiesen, wenn der Schreibvorgang von Cluster A empfangen wird. Der Datenänderungseintrag in Cluster B für diesen Schreibvorgang hat denselben Commit-Zeitstempel.
Jeder Datensatz für eine Datenänderung enthält Folgendes:
- Einträge: Änderungen an der Zeile, einschließlich einer oder mehrerer der folgenden Optionen:
- Schreiben
- Spaltenfamilie
- Spaltenqualifizierer
- Zeitstempel
- Wert
- Löschen von Zellen
- Spaltenfamilie
- Spaltenqualifizierer
- Zeitstempelbereich
- Löschen einer Spaltenfamilie
- Spaltenfamilie
- Löschen aus einer Zeile: Das Löschen aus einer Zeile wird in eine Liste von Löschvorgängen aus Spaltenfamilien für jede Spaltenfamilie umgewandelt, in der die Zeile Daten enthält.
- Schreiben
- Zeilenschlüssel: die Kennung der geänderten Zeile
- Art der Änderung – entweder vom Nutzer initiiert oder durch automatische Speicherbereinigung
- ID des Clusters, der die Änderung erhalten hat
- Commit-Zeitstempel - serverseitige Zeit, zu der die Änderung per Commit an den übergeben wird. Tabelle
- Tiebreaker: Ein Wert, der es der Anwendung ermöglicht, den Stream zu lesen. die integrierte Konfliktlösung von Bigtable verwenden Richtlinie
- Token – wird von der verarbeitenden Anwendung verwendet, um den Stream fortzusetzen, falls unterbrochen
- Geschätztes niedriges Wasserzeichen: die geschätzte Zeit seit der Partition des Eintrags die Replikation in allen Clustern. Weitere Informationen finden Sie unter Partitionen und Wasserzeichen.
Weitere Informationen zu den Feldern in einem Datenänderungsdatensatz finden Sie in der API-Referenz für DataChange
.
Speicher für Änderungsstream ändern
Eine Tabelle und ihr Änderungsstream nutzen dieselben Ressourcen auf Clusterebene, einschließlich Knoten und Speicher. Daher ist der Speicherplatz für Änderungsstreamdaten Teil des Speicherplatzes einer Tabelle. In einer Instanz, in der die Replikation verwendet wird, wird eine Kopie der Daten eines Änderungsstreams in jedem Cluster der Instanz gespeichert, der die für Änderungsstreams aktivierte Tabelle enthält.
Der für Ihre Änderungsstreamdaten verwendete Speicherplatz wird nicht auf die Gesamtspeicherauslastung (max. %) angerechnet. Daher müssen Sie keine Knoten zur Verarbeitung den erhöhten Speicherbedarf für Änderungsstreamdaten (auch wenn Sie um Knoten für zusätzliche Rechenleistung hinzuzufügen. Ihnen wird jedoch der Speicherplatz in Rechnung gestellt, der von Ihren Änderungsstream-Daten belegt wird. Weitere Informationen finden Sie unter Kostengesichtspunkte:
Änderungsstream lesen
Zum Lesen (Streamen) eines Änderungsstreams müssen Sie ein Anwendungsprofil verwenden, das für Single-Cluster-Routing. Wenn Sie mit Dataflow streamen, müssen Sie Transaktionen für einzelne Zeilen aktivieren.
Weitere Informationen zu Routingrichtlinien finden Sie unter Routingoptionen.
Weitere Informationen zu Transaktionen mit einer Zeile finden Sie unter Transaktionen mit einer Zeile.
Änderungsstreammethoden werden von der Cloud Bigtable API (Data API) bereitgestellt. Wir empfehlen, eine der folgenden Optionen zu verwenden, anstatt die API ohne Verwendung einer Clientbibliothek oder eines Connectors aufzurufen:
- Dataflow-Vorlagen
- Bigtable Beam-Connector
- Java-Clientbibliothek
Mit allen Optionen können Sie vermeiden, dass Sie Partitionsänderungen aufgrund von Aufteilungen und Zusammenführungen verfolgen und verarbeiten müssen.
Weitere Informationen finden Sie unter ReadChangeStream
.
Dataflow-Vorlagen
Sie können eine der folgenden Dataflow-Vorlagen von Google verwenden:
Bigtable Beam-Connector
Mit dem Bigtable Beam-Connector können Sie eine Pipeline erstellen:
Wenn Sie keine eigene Pipeline erstellen möchten, können Sie die Codebeispiele aus das Bigtable-Tutorial oder die Bigtable-Kurzanleitung als Ausgangspunkt für Ihre Code:
Java-Clientbibliothek
Partitionen
Um einen hohen Lesedurchsatz aufrechtzuerhalten, der einer hohen Schreib- oder Änderungsrate entspricht, teilt Bigtable einen Änderungsstream in mehrere Partitionen auf, die zum parallelen Lesen des Änderungsstreams verwendet werden können. Jede Änderungsstreampartition mit einem Tablet verknüpft ist. Tabellenzeilen sind Teilbereiche einer Tabelle, die bei Bedarf neu verteilt werden, um die Anfragelast der Tabelle auszugleichen. Weitere Informationen finden Sie unter Load Balancing.
Mit der Java-Clientbibliothek können Sie jede Partition auf Änderungen prüfen und die erforderlichen Informationen zum Verwalten von Änderungen in Partitionen aufgrund von Spaltungen und Zusammenführungen abrufen.
Wasserzeichen
Ein Wasserzeichen ist ein Zeitstempel, der angibt, wann zuletzt eine Partition mit Replikation über alle Cluster hinweg. Das Wasserzeichen für die Partition wird während der Replikation kontinuierlich aktualisiert und geht dabei in Richtung Zukunft.
Jeder ChangeStreamMutation
-Datenänderungseintrag (ChangeStreamMutation
) enthält ein estimatedLowWatermark
-Feld, das das Wasserzeichen für die Partition ist, die mit dem Datenänderungseintrag verknüpft ist. Dieses Gerät (estimatedLowWatermark
) ist ein
Schätzung und garantiert nicht, dass es noch keine Daten gibt,
in den Stream aufnehmen.
Wasserzeichen für replizierte Tabellen
Das estimatedLowWatermark
(niedriges Wasserzeichen) einer Partition fährt nicht fort, wenn
die Replikation für die Partition nicht vollständig abgedeckt ist. Die streamweite Tiefsttemperatur
Wasserzeichen – der niedrigste Wert aller geschätzten niedrigen Wasserzeichen auf Partitionsebene
– stoppt das Vorantreiben, wenn sich ein Wasserzeichen einer Partition nicht weiter bewegt. A
Wasserzeichen, das nicht weiterläuft, wird als verzögert betrachtet. Wenn diese
Wenn Sie Ihren Änderungsstream in einer Pipeline streamen,
Verkaufsstände.
Es gibt viele Faktoren, die dazu führen können, dass ein oder mehrere Markierungen auf Partitionsebene für einige Zeit stecken bleiben. Dazu gehören:
- Überlastung eines Clusters durch Traffic, der dazu führt, dass die Replikation für eine oder mehrere Partitionen ins Hintertreffen gerät
- Netzwerkverzögerungen
- Cluster-Nichtverfügbarkeit
Der Bigtable Beam-Connector übernimmt dies, indem der für alle Daten den Ausgabezeitstempel auf null setzen. Weitere Informationen finden Sie unter Daten ohne Ereigniszeiten gruppieren.
Monitoring
Informationen dazu, wie sich das Aktivieren eines Änderungsstreams auf die CPU und den Speicher auswirkt für eine Instanz mit für Änderungsstreams aktivierten Tabellen, stellen zwei Messwerte für den Änderungsstream bereit. Sie können die Messwerte auf der Seite „Bigtable Monitoring“ oder mithilfe der Cloud Monitoring-Tools aufrufen.
- Von den Änderungsstream-Eintragsdaten verwendete Bytes (
change_stream_log_used_bytes
) - CPU-Auslastung nach Änderungsstreams (verwendet
cpu_load_by_app_profile_by_method_by_table
)
Weitere Informationen zu diesen Messwerten finden Sie unter Monitoring:
Kostengesichtspunkte
Wenn Sie einen Änderungsstream für eine Tabelle aktivieren, steigen die Kosten für Knoten und Speicherplatz. Insbesondere können höhere Speicherkosten anfallen.
Knoten
Normalerweise müssen Sie einem Cluster Knoten hinzufügen (oder die maximale Anzahl von Knoten erhöhen, wenn Sie Autoscaling verwenden), um den zusätzlichen Traffic durch das Aktivieren und Verarbeiten der Datenänderungssätze zu bewältigen.
Durch die Aktivierung eines Änderungsstreams kann die CPU-Nutzung um etwa 10 % bevor Sie mit der Verarbeitung beginnen. Die Verarbeitung eines Änderungsstreams, z. B. das Lesen mit einer Dataflow-Pipeline, kann die CPU-Auslastung um etwa 20 bis 30 % erhöhen, je nach Umfang der Änderungsaktivitäten und der Art und Weise, wie die Streamdaten gelesen werden.
Speicher
Ihnen wird die Standardgebühr in Rechnung gestellt Preise für Bigtable-Speicher zum Speichern der Datenänderungseinträge Ihrer Tabelle. Außerdem werden Ihnen die Kosten für die Speicherung der Tabelle in Rechnung gestellt, die zum Erfassen von Änderungsstream-Metadaten erstellt wird. Die Aufbewahrungsdauer, die die von Ihnen angegebenen Auswirkungen auf die Speicherkosten haben.
In der Regel werden die Änderungseinträge eines Tages, die nur die die an diesem Tag erfolgt sind – etwa 1,5-mal so viel Speicherplatz wie die an diesem Tag geschriebenen Daten auf die Festplatte verbraucht werden.
Netzwerk-Datenübertragung
Wenn Sie einen Änderungsstream regionsübergreifend lesen, können für diesen Traffic Kosten anfallen. Weitere Informationen finden Sie im Abschnitt „Netzwerk“ Bigtable-Preise finden Sie eine vollständige Liste der Netzwerk-Datenübertragungsraten.
Verarbeitungskosten
Je nachdem, wie Sie die Datenänderungssätze lesen, fallen zusätzliche Kosten für andere Dienste als Bigtable an. Wenn Sie beispielsweise Dataflow verwenden, zahlen Sie für die verarbeiteten Byte und die Worker-Maschinen, auf denen der Job verarbeitet wird. Weitere Informationen finden Sie unter Dataflow-Preise.
Zeilenbereiche löschen
Vermeiden Sie nach Möglichkeit das Löschen eines Zeilenbereichs aus einer Tabelle, für die ein Änderungsstream aktiviert ist. Falls Sie trotzdem einen Zeilenbereich löschen müssen, beachten Sie, dass es lange dauern kann, bis Bigtable den Vorgang abgeschlossen hat, und dass die CPU-Auslastung während des Vorgangs ansteigt.
Nächste Schritte
- In dieser Kurzanleitung erfahren Sie, wie Sie einen Änderungsstream aktivieren und Änderungen ansehen.
- Änderungsstreams konfigurieren
- Verwenden Sie den Bigtable Beam-Connector, um einen Änderungsstream mit Dataflow
- Cloud Bigtable-Clientbibliothek für Java verwenden, um Änderungsstreams zu lesen
- Anleitung zum Verarbeiten eines Änderungsstreams