Dataflow-Snapshots verwenden

Dataflow-Snapshots speichern den Status einer Streamingpipeline, sodass Sie eine neue Version Ihres Dataflow-Jobs starten können, ohne den Status zu verlieren. Dies ist hilfreich für Sicherung und Wiederherstellung, für Tests, Rollbacks von Updates für Streamingpipelines und ähnliche Szenarien.

Sie können einen Dataflow-Snapshot für einen beliebigen laufenden Streamingjob erstellen. Für jeden neuen Job, den Sie aus einem Snapshot erstellen, wird jedoch Streaming Engine verwendet. Mit einem Dataflow-Snapshot können Sie außerdem Ihre vorhandene Pipeline mit minimalen Ausfallzeiten zu einer effizienteren und skalierbaren Streaming Engine migrieren.

In dieser Anleitung wird erläutert, wie Sie Snapshots erstellen, Snapshots verwalten und Jobs aus Snapshots erstellen.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud Dataflow, Compute Engine, Stackdriver Logging, Cloud Storage, Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore und Cloud Resource Manager APIs aktivieren.

    Aktivieren Sie die APIs

Snapshot erstellen

Console

  1. Öffnen Sie die Dataflow-Monitoring-UI.
    Zur Dataflow-Web-UI

    Eine Liste der Dataflow-Jobs mit ihrem Status wird angezeigt. Wenn keine Streamingjobs angezeigt werden, müssen Sie einen neuen Streamingjob ausführen. Ein Beispiel für einen Streamingjob finden Sie in der Kurzanleitung: Vorlagen verwenden.

  2. Wählen Sie einen Job aus.
  3. Klicken Sie in der Menüleiste auf der Seite Jobdetails auf Snapshot erstellen.
  4. Wählen Sie im Dialogfeld Snapshot erstellen entweder Ohne Datenquellen aus, um nur einen Snapshot des Dataflow-Jobstatus zu erstellen, oder wählen Sie Mit Datenquellen aus, um Folgendes zu erstellen: einen Snapshot Ihres Dataflow-Jobstatus zusammen mit einem Snapshot Ihrer Pub/Sub-Quelle.

CLI

Zum Erstellen eines Snapshots verwenden Sie den Befehl create:

gcloud beta dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

Dabei gilt:

  • JOB_ID ist die ID Ihres Streamingjobs.
  • DURATION ist der Zeitraum (in Tagen) bis zum Ablauf des Snapshots, nach dem keine weiteren Jobs aus dem Snapshot erstellt werden können. Das Flag snapshot-ttl ist optional. Wenn nicht anders angegeben, läuft der Snapshot nach sieben Tagen ab. Geben Sie den Wert im folgenden Format an: 5d. Sie können maximal 30 Tage (30d) festlegen.
  • REGION ist die Region, in der Ihr Job ausgeführt wird.

Das Flag snapshot-sources gibt an, ob ein Snapshot der Pub/Sub-Quellen zusammen mit dem Dataflow-Snapshot erstellt werden soll. Mit true werden für Pub/Sub-Quellen automatisch Snapshots erstellt. Die Pub/Sub-Snapshot-IDs werden dann in der Ausgabeantwort angezeigt. Prüfen Sie nach der Ausführung des Befehls create den Snapshot-Status mit dem Befehl list oder describe.

Folgendes gilt, wenn Sie Dataflow-Snapshots erstellen:

  • Bei Dataflow-Snapshots fallen Gebühren für die Laufwerknutzung an.
  • Snapshots werden in derselben Region wie der Job erstellt und nur für Jobs, die in us-central1, europe-west1, europe-west4 oder asia-northeast1 ausgeführt werden. Nach allgemeiner Verfügbarkeit werden weitere Regionen verfügbar sein.
  • Sie können nur Snapshots von Streaming Engine-unabhängigen Jobs erstellen, wenn die Jobs nach dem 1. September 2020 gestartet oder aktualisiert wurden.
  • Pub/Sub-Snapshots, die mit Dataflow-Snapshots erstellt wurden, werden vom Pub/Sub-Dienst verwaltet. Dafür fallen Gebühren an.
  • Ein Pub/Sub-Snapshot läuft spätestens 7 Tage nach der Erstellung ab. Die genaue Lebensdauer hängt vom vorhandenen Rückstand im Quellabo bei der Erstellung ab. Speziell die Lebensdauer des Pub/Sub-Snapshots beträgt 7 days - (age of oldest unacked message in the subscription). Nehmen wir als Beispiel ein Abo, dessen älteste nicht bestätigte Nachricht 3 Tage alt ist. Wenn aus diesem Abo ein Pub/Sub-Snapshot erstellt wird, läuft der Snapshot, der diesen dreitägigen Rückstand immer übernimmt, solange der Snapshot vorhanden ist, nach 4 Tagen ab. Weitere Informationen finden Sie in der Pub/Sub-Snapshot-Referenz.
  • Während des Snapshot-Vorgangs wird Ihr Dataflow-Job angehalten und fortgesetzt, sobald der Snapshot bereit ist. Die erforderliche Zeit hängt von der Größe des Pipelinestatus ab. Beispielsweise dauert die Erstellung von Snapshots für Streaming Engine-Jobs im Allgemeinen kürzer als für Streaming Engine-unabhängige Jobs.
  • Sie können den Job während der Ausführung eines Snapshots abbrechen, woraufhin der Snapshot abgebrochen wird.
  • Sie können den Job nicht aktualisieren oder per Drain beenden, während ein Snapshot ausgeführt wird. Sie müssen warten, bis der Job aus dem Snapshot-Prozess fortgesetzt wurde, bevor Sie ihn aktualisieren oder per Drain beenden können.

Snapshot-UI verwenden

Nachdem Sie einen Snapshot erstellt haben, können Sie die Seite Snapshots zur Verwaltung der Snapshots für Ihr Projekt verwenden.

Wenn Sie auf einen Snapshot klicken, wird die Seite Snapshot-Details geöffnet. Dort können Sie zusätzliche Metadaten zum Snapshot sowie einen Link zum Quelljob und zu allen Pub/Sub-Snapshots abrufen.

Abbildung: Detailseite für Dataflow-Snapshots, auf der Sie weitere Informationen zu einem Snapshot abrufen können.

Snapshot löschen

Console

  1. Klicken Sie auf der Seite Snapshots oder Snapshot-Details auf Löschen.
  2. Klicken Sie im Dialogfeld Snapshot löschen zur Bestätigung auf Löschen.

CLI

Verwenden Sie zum Löschen eines Snapshots den Befehl delete:

gcloud beta dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Wobei:

  • SNAPSHOT_ID ist Ihre Snapshot-ID.
  • REGION ist die Region für den Snapshot.

Job aus einem Snapshot erstellen

Nachdem Sie einen Snapshot erstellt haben, können Sie den Status des Jobs wiederherstellen, indem Sie einen neuen Job aus diesem Snapshot erstellen.

Console

Sie können keinen Job aus einem Snapshot in der Cloud Console erstellen.

Java

Wenn Sie einen neuen Job aus einem Snapshot erstellen möchten, verwenden Sie beim Starten eines Jobs das Flag --createFromSnapshot und
--enableStreamingEngine. Beispiel:

mvn -Pdataflow-runner compile exec:java \
    -Dexec.mainClass=org.apache.beam.examples.WordCount \
    -Dexec.args="--project=PROJECT_ID \
    --stagingLocation=gs://STORAGE_BUCKET/staging/ \
    --inputFile=gs://apache-beam-samples/shakespeare/* \
    --output=gs://STORAGE_BUCKET/output \
    --runner=DataflowRunner \
    --enableStreamingEngine \
    --createFromSnapshot=SNAPSHOT_ID \
    --region=REGION"

Wobei:

  • PROJECT_ID ist die Projekt-ID.
  • STORAGE_BUCKET ist der Storage-Bucket, den Sie für temporäre Job-Assets und die endgültige Ausgabe verwenden.
  • SNAPSHOT_ID ist die Snapshot-ID, aus der Sie einen neuen Job erstellen möchten.
  • REGION ist der Speicherort für den Job.

Python

Diese Funktion wird im Apache Beam SDK für Python noch nicht unterstützt.

Folgendes gilt, wenn Sie Jobs aus Dataflow-Snapshots erstellen:

  • Aus Snapshots erstellte Jobs müssen in derselben Region ausgeführt werden, in der der Snapshot gespeichert ist.
  • Wenn ein Dataflow-Snapshot Snapshots von Pub/Sub-Quellen enthält, wird für einen Job, der aus einem Dataflow-Snapshot erstellt wurde, automatisch ein seek-Vorgang für diese Pub/Sub-Snapshots als Quellen ausgeführt. Sie müssen dieselben Pub/Sub-Themen angeben, die vom Quelljob verwendet werden, wenn Sie Jobs aus diesem Dataflow-Snapshot erstellen.

  • Wenn ein Dataflow-Snapshot keine Snapshots von Pub/Sub-Quellen enthält und der Quelljob eine Pub/Sub-Quelle verwendet, müssen Sie beim Erstellen von Jobs aus diesem Dataflow-Snapshot ein Pub/Sub-Thema angeben.

  • Neue Jobs, die aus einem Snapshot erstellt werden, werden weiterhin einer Updatekompatibilitätsprüfung unterzogen.

Bekannte Einschränkungen

Für Dataflow-Snapshots gelten die folgenden Einschränkungen:

  • Mit den Vorlagen oder dem Dataflow SQL-Editor können Sie keine Jobs aus Snapshots erstellen.
  • Der Snapshot-Ablaufzeitraum kann nur über das gcloud-Tool festgelegt werden.
  • Dataflow-Snapshots unterstützen derzeit nur Pub/Sub-Quell-Snapshots.
  • Snapshots von Senken werden derzeit nicht unterstützt. Sie können beispielsweise beim Erstellen eines Dataflow-Snapshots keinen BigQuery-Snapshot erstellen.
  • Für jedes Projekt sind pro Region nur 10 bereitstehende oder ausgeführte Snapshots zulässig. Wenn Sie versuchen, zusätzliche Snapshots über diesem Limit zu erstellen, tritt ein Fehler auf. Dieses Limit wird mit der allgemeinen Verfügbarkeit erhöht.

Fehlerbehebung

Dieser Abschnitt enthält Anleitungen zur Behebung häufiger Probleme bei der Interaktion mit Dataflow-Snapshots.

Bevor Sie sich an den Support wenden, prüfen Sie, ob die Probleme in Zusammenhang mit den bekannten Beschränkungen bestehen und/oder in den folgenden Abschnitten zur Fehlerbehebung behandelt werden.

Anfrage zur Snapshot-Erstellung wurde abgelehnt

Sobald über die Cloud Console oder mit dem gcloud-Tool eine Anfrage zur Snapshot-Erstellung gesendet wurde, führt der Dataflow-Dienst eine Vorprüfung aus und gibt eventuelle Fehlermeldungen zurück. Die Anfrage zur Erstellung kann aus bestimmten, in den Fehlermeldungen angegebenen Gründen wie nicht unterstützter Jobtyp oder nicht verfügbaren Regionen abgelehnt werden.

Wenn die Anfrage abgelehnt wird, weil der Job zu alt ist, müssen Sie Ihren Job aktualisieren, bevor Sie einen Snapshot anfordern.

Wenn die Anfrage abgelehnt wird, weil Ihr Job die maximale Anzahl an Snapshots erreicht hat, entfernen Sie alte Snapshots oder wenden Sie sich an den Support, um das Limit zu erhöhen.

Es kann kein Job aus einem Snapshot erstellt werden

Prüfen Sie beim Erstellen eines Jobs aus einem Snapshot, ob der Snapshot vorhanden und nicht abgelaufen ist. Der neue Job muss auf Streaming Engine ausgeführt werden.

Weitere Informationen zu häufigen Problemen bei der Joberstellung finden Sie in der Anleitung zur Fehlerbehebung für Dataflow. Insbesondere unterliegen neue Jobs, die aus Snapshots erstellt wurden, einer Prüfung der Aktualisierungskompatibilität, wobei der neue Job mit dem Snapshot-Quelljob kompatibel sein muss.

Aus einem Snapshot erstellter Job wird nicht weiter ausgeführt

Bei der Erstellung eines Jobs aus einem Snapshot müssen die Daten aus dem Snapshot in den neuen Job geladen werden. Die Verarbeitung der Daten durch den Job beginnt erst, wenn der Snapshot vollständig geladen wurde. Je nach Größe des Snapshots kann dieser Schritt einige Zeit dauern.

Bei Jobs, die aus Dataflow-Snapshots erstellt wurden, die Pub/Sub-Quell-Snapshots enthalten, kann der neue Job große Pub/Sub-Rückstände haben, die verarbeitet werden müssen. Durch Streaming-Autoscaling kann der neue Job den Rückstand eventuell schneller beheben.

Der Snapshot-Quelljob war möglicherweise in einem fehlerhaften Zustand, bevor der Snapshot erstellt wurde. Wenn Sie wissen, warum der Quelljob fehlerhaft ist, lassen sich die Probleme des neuen Jobs eventuell leichter beheben. Allgemeine Tipps zur Fehlerbehebung bei Jobs finden Sie in der Anleitung zur Fehlerbehebung für Dataflow.

Aus einem Snapshot erstellter Job ruft keine Pub/Sub-Quellen ab

Sorgen Sie dafür, dass die zusammen mit Dataflow-Snapshots erfassten Pub/Sub-Snapshots vorhanden und nicht abgelaufen sind. Pub/Sub-Snapshots laufen ab, wenn die älteste Nachricht in einem Snapshot älter als 7 Tage ist.