Dataflow-Snapshots verwenden

Dataflow-Snapshots speichern den Zustand einer Streamingpipeline, sodass Sie eine neue Version Ihres Dataflow-Jobs starten können, ohne den Zustand zu verlieren. Snapshots sind nützlich für die Sicherung und Wiederherstellung, für Tests und das Rollback von Updates für Streamingpipelines sowie andere ä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 zur effizienteren und skalierbaren Streaming Engine migrieren.

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

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

Snapshot erstellen

Console

  1. Rufen Sie in der Google Cloud Console die Dataflow-Seite Jobs auf.

    Zu Jobs

    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 eine der folgenden Optionen aus:
    • Ohne Datenquellen: Wählen Sie diese Option aus, um lediglich einen Snapshot Ihres Dataflow-Jobstatus zu erstellen.
    • Mit Datenquellen: Wählen Sie diese Option aus, um einen Snapshot Ihres Dataflow-Jobstatus zusammen mit einem Snapshot Ihrer Pub/Sub-Quelle zu erstellen.
  5. Klicken Sie auf Erstellen.

gcloud

Erstellen Sie einen Snapshot:

gcloud 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.
  • Wenn der Worker-Standort des Jobs von der Region des Jobs abweicht, schlägt die Snapshot-Erstellung fehl. Weitere Informationen finden Sie im Leitfaden zu Dataflow-Regionen.
  • Sie können nur Snapshots von Nicht-Streaming Engine-Jobs erstellen, wenn die Jobs nach dem 1. Februar 2021 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. Insbesondere ist die Lebensdauer des Pub/Sub-Snapshots 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 weniger lange als für Nicht-Streaming Engine-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.

Seite „Snapshots“ verwenden

Nachdem Sie einen Snapshot erstellt haben, können Sie die Seite Snapshots in der Google Cloud Console verwenden, um die Snapshots für Ihr Projekt aufzurufen und zu verwalten.

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

Durch das Löschen eines Snapshots können Sie den Snapshot-Prozess beenden und den Job fortsetzen. Außerdem werden durch das Löschen von Dataflow-Snapshots die zugehörigen Pub/Sub-Snapshots nicht automatisch gelöscht.

Console

  1. Rufen Sie in der Google Cloud Console die Dataflow-Seite Snapshots auf.

    Zu "Snapshots"

  2. Wählen Sie den Snapshot aus und klicken Sie auf Löschen.
  3. Klicken Sie im Dialogfeld Snapshot löschen zur Bestätigung auf Löschen.

gcloud

Löschen Sie einen Snapshot:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Dabei gilt:

  • SNAPSHOT_ID: die Snapshot-ID
  • REGION: die Region, in der sich der Snapshot befindet

Weitere Informationen finden Sie in der delete-Befehlsreferenz.

Job aus einem Snapshot erstellen

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

Java

Wenn Sie einen neuen Job aus einem Snapshot erstellen möchten, verwenden Sie sowohl das Flag --createFromSnapshot als auch das Flag --enableStreamingEngine.

  • Erstellen Sie in der Shell oder im Terminal einen neuen Job aus einem Snapshot. Beispiel:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -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"

    Dabei gilt:

    • MAIN_CLASS oder MODULE: Bei Java-Pipelines der Standort der Hauptklasse, die Ihren Pipelinecode enthält. Bei Python-Pipelines der Standort des Moduls, das Ihren Pipelinecode enthält. Wenn Sie das Wordcount-Beispiel verwenden, ist der Wert org.apache.beam.examples.WordCount.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID
    • STORAGE_BUCKET: der Cloud Storage-Bucket, den Sie für temporäre Job-Assets und die endgültige Ausgabe verwenden
    • SNAPSHOT_ID: die Snapshot-ID des Snapshots, aus dem Sie einen neuen Job erstellen möchten
    • REGION: der Standort, an dem Sie den neuen Dataflow-Job ausführen möchten

Python

Für Dataflow-Snapshots ist das Apache Beam SDK für Python ab Version 2.29.0 erforderlich.

Wenn Sie einen neuen Job aus einem Snapshot erstellen möchten, verwenden Sie sowohl das Flag --createFromSnapshot als auch das Flag --enableStreamingEngine.

  • Erstellen Sie in der Shell oder im Terminal einen neuen Job aus einem Snapshot. Beispiel:
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

    Dabei gilt:

    • MAIN_CLASS oder MODULE: Bei Java-Pipelines der Standort der Hauptklasse, die Ihren Pipelinecode enthält. Bei Python-Pipelines der Standort des Moduls, das Ihren Pipelinecode enthält. Wenn Sie das Wordcount-Beispiel verwenden, ist der Wert org.apache.beam.examples.WordCount.
    • PROJECT_ID: Ihre Google Cloud-Projekt-ID
    • STORAGE_BUCKET: der Cloud Storage-Bucket, den Sie für temporäre Job-Assets und die endgültige Ausgabe verwenden
    • SNAPSHOT_ID: die Snapshot-ID des Snapshots, aus dem Sie einen neuen Job erstellen möchten
    • REGION: der Standort, an dem Sie den neuen Dataflow-Job ausführen möchten

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 Google Cloud CLI festgelegt werden.
  • Dataflow-Snapshots unterstützen nur Pub/Sub-Quell-Snapshots.
  • Senken-Snapshots werden nicht unterstützt. Sie können beispielsweise beim Erstellen eines Dataflow-Snapshots keinen BigQuery-Snapshot erstellen.

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

Nachdem eine Anfrage zur Snapshot-Erstellung entweder über die Google Cloud Console oder die gcloud CLI gesendet wurde, führt der Dataflow-Dienst eine Vorbedingungsprüfung aus und gibt ggf. Fehlermeldungen zurück. Die Anfrage zum Erstellen eines Snapshots kann aus verschiedenen Gründen abgelehnt werden, die in den Fehlermeldungen angegeben sind, z. B. wenn ein Jobtyp nicht unterstützt wird oder eine Region nicht verfügbar ist.

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

Snapshot konnte nicht erstellt werden

Das Erstellen von Snapshots kann aus verschiedenen Gründen fehlschlagen. Der Quelljob wurde beispielsweise abgebrochen oder das Projekt hat nicht die erforderlichen Berechtigungen zum Erstellen von Pub/Sub-Snapshots. Die job-message-Logs des Jobs enthalten Fehlermeldungen aus der Snapshot-Erstellung. Wenn die Erstellung des Snapshots fehlschlägt, wird der Quelljob fortgesetzt.

Job konnte nicht aus Snapshot erstellt werden

Achten Sie beim Erstellen eines Jobs aus einem Snapshot darauf, dass der Snapshot vorhanden und nicht abgelaufen ist. Der neue Job muss in 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 Updatekompatibilitätsprüfung, wobei der neue Job mit dem Snapshot-Quelljob kompatibel sein muss.

Aus einem Snapshot erstellter Job wird nicht weiter ausgeführt

Die job-message-Logs des Jobs enthalten Fehlermeldungen zum Erstellen eines Jobs. Sie sehen beispielsweise, dass der Job die Pub/Sub-Snapshots nicht finden kann. Prüfen Sie in diesem Fall, ob die 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. Abgelaufene Pub/Sub-Snapshots werden möglicherweise automatisch vom Pub/Sub-Dienst entfernt.

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.