Laufende Pipeline anhalten

Sie können einen Dataflow-Job nicht löschen. können Sie ihn nur beenden.

Zum Beenden eines Dataflow-Jobs können Sie entweder die Google Cloud Console, Cloud Shell, ein lokales Terminal, das mit dem Cloud SDK installiert wurde, oder die Dataflow REST API verwenden.

Sie haben zwei Möglichkeiten, einen Dataflow-Job zu beenden:

  • Job abbrechen. Diese Methode gilt sowohl für Streaming- als auch für Batchpipelines. Das Abbrechen eines Jobs hindert den Dataflow-Dienst an der Verarbeitung von Daten, einschließlich zwischengespeicherter Daten. Weitere Informationen erhalten Sie unter Job abbrechen.

  • Job per Drain beenden. Diese Methode gilt nur für Streamingpipelines. Durch das Beenden des Jobs per Drain kann der Dataflow-Dienst die Verarbeitung der zwischengespeicherten Daten abschließen und gleichzeitig die Aufnahme neuer Daten einstellen. Weitere Informationen finden Sie unter Job per Drain beenden.

Jobs abbrechen

Wenn Sie einen Job abbrechen, beendet der Dataflow-Dienst den Job sofort.

Die folgenden Aktionen werden ausgeführt, wenn Sie einen Job abbrechen:

  1. Der Dataflow-Dienst hält die gesamte Datenaufnahme und -verarbeitung an.

  2. Der Dataflow-Dienst beginnt mit der Bereinigung der Google Cloud-Ressourcen, die mit dem Job verknüpft sind.

    Dies kann auch beinhalten, dass Compute Engine-Worker-Instanzen heruntergefahren und aktive Verbindungen zu E/A-Quellen oder -Senken getrennt werden.

Wichtige Informationen zum Abbrechen eines Jobs

  • Das Abbrechen eines Jobs stoppt die Verarbeitung der Pipeline sofort.

  • Sie können In-Flight-Daten verlieren, wenn Sie einen Job abbrechen. In-Flight-Daten beziehen sich auf Daten, die bereits gelesen wurden, aber noch von der Pipeline verarbeitet werden.

  • Daten, die von der Pipeline in eine Ausgabesenke geschrieben werden, bevor Sie den Job abgebrochen haben, können dort gegebenenfalls noch zugänglich sein.

  • Wenn der Datenverlust kein Problem darstellt, wird durch das Abbrechen des Jobs sichergestellt, dass die mit Ihrem Job verknüpften Google Cloud-Ressourcen so schnell wie möglich heruntergefahren werden.

Job per Drain beenden

Wenn Sie einen Job per Drain beenden, beendet der Dataflow-Dienst den Job in seinem aktuellen Zustand. Wenn Sie Datenverluste beim Herunterfahren Ihrer Streamingpipelines vermeiden möchten, empfiehlt es sich, den Job per Drain zu beenden.

Die folgenden Aktionen werden ausgeführt, wenn Sie einen Job per Drain beenden:

  1. Ihr Job beendet die Aufnahme neuer Daten aus den Eingabequellen, kurz nachdem die Anfrage für einen Drain eingegangen ist. Dies geschieht in der Regel innerhalb weniger Minuten.

  2. Sämtliche vorhandenen Ressourcen, z. B. Worker-Instanzen, werden vom Dataflow-Dienst aufrechterhalten, damit die Verarbeitung und das Schreiben von zwischengespeicherten Daten in der Pipeline abgeschlossen werden können.

  3. Wenn alle ausstehenden Verarbeitungs- und Schreibvorgänge abgeschlossen sind, fährt der Dataflow-Dienst Google Cloud-Ressourcen herunter, die Ihrem Job zugeordnet sind.

Wichtige Informationen zum Beenden eines Jobs per Drain

  • Das Beenden eines Jobs per Drain wird für Batchpipelines nicht unterstützt.

  • Für Ihre Pipeline fallen weiterhin Kosten für die Aufrechterhaltung aller zugehörigen Google Cloud-Ressourcen an, bis alle Verarbeitungs- und Schreibvorgänge abgeschlossen sind.

  • Wenn Ihr Streaming-Pipelinecode einen Looping-Timer enthält, kann der Job nicht per Drain beendet werden.

  • Wenn Ihre Streaming-Pipeline eine Splittable DoFn enthält, müssen Sie das Ergebnis kürzen, bevor Sie die Drain-Option ausführen. Weitere Informationen zum Kürzen von Splittable DoFns finden Sie in der Apache Beam-Dokumentation.

  • Sie können eine Pipeline, die per Drain beendet wird, aktualisieren.

  • Das Beenden eines Jobs per Drain kann einige Zeit in Anspruch nehmen, etwa wenn in der Pipeline viele zwischengespeicherte Daten enthalten sind.

  • Sie können einen Job abbrechen, der gerade per Drain beendet wird.

  • In einigen Fällen kann ein Dataflow-Job den Drain-Vorgang möglicherweise nicht abschließen. In den Joblogs können Sie die Ursache ermitteln und entsprechende Maßnahmen ergreifen.

Auswirkungen des Drain-Befehls auf einen Job

Wenn Sie eine Streaming-Pipeline per Drain beenden, schließt Dataflow sofort alle Fenster, die sich in der Verarbeitung befinden, und löst alle Trigger aus.

Das System wartet nicht, bis ausstehende zeitbasierte Fenster in einem Drain-Vorgang beendet werden.

Wenn Ihre Pipeline z. B. zehn Minuten in einem zweistündigen Fenster liegt, wenn Sie den Job per Drain beeinden, wartet Dataflow nicht für den Rest des Fensters auf den Abschluss. Das Fenster wird sofort mit Teilergebnissen geschlossen. Dataflow veranlasst, dass offene Fenster geschlossen werden, indem es das Systemwasserzeichen ins Unendliche verschiebt. Diese Funktion kann auch auf benutzerdefinierte Datenquellen angewendet werden.

Wenn Sie eine Pipeline mit einer benutzerdefinierten Datenquellklasse per Drain beenden, stoppt Dataflow das Senden von Anfragen für neue Daten, verschiebt das Wasserzeichen des Systems ins Unendliche und ruft die Methode finalize() Ihrer Quelle am letzten Prüfpunkt auf.

In der Google Cloud Console können Sie sich Details zu den Transformationen Ihrer Pipeline ansehen. Das folgende Diagramm zeigt die Auswirkungen eines Prozess-Drain-Vorgangs. Beachten Sie, dass das Wasserzeichen auf den Höchstwert gesetzt wird.

Eine Schrittansicht eines Drain-Vorgangs

Abbildung 1. Eine Schrittansicht eines Drain-Vorgangs

Job beenden

Bevor Sie einen Job beenden, müssen Sie die Auswirkungen des Abbrechens oder Beendens per Drain eines Jobs verstehen.

Console

  1. Rufen Sie die Dataflow-Seite Jobs auf.

    ZU JOBS

  2. Klicken Sie auf den Job, den Sie beenden möchten.

    Zum Beeinden eines Jobs muss der Status des Jobs Wird ausgeführt sein.

  3. Klicken Sie auf der Seite mit den Jobdetails auf Beenden.

  4. Führen Sie einen der folgenden Schritte aus:

    • Klicken Sie für eine Batchpipeline auf Abbrechen.

    • Klicken Sie für eine Streamingpipeline entweder auf Abbrechen oder auf Per Drain beenden.

  5. Klicken Sie auf Job anhalten, um die Auswahl zu bestätigen.

gcloud

Um einen Dataflow-Job entweder per Drain zu beenden oder abzubrechen, können Sie den Befehl gcloud dataflow jobs in Cloud Shell oder ein lokales Terminal verwenden, das mit dem Cloud SDK installiert ist.

  1. Melden Sie sich in der Shell an.

  2. Listen Sie die Job-IDs der Dataflow-Jobs auf, die derzeit ausgeführt werden, und notieren Sie sich die Job-ID des Jobs, den Sie beenden möchten:

    gcloud dataflow jobs list
    

    Wenn das Flag --region nicht gesetzt ist, werden Dataflow-Jobs aus allen verfügbaren Regionen angezeigt.

  3. Führen Sie einen der folgenden Schritte aus:

    • So beenden Sie einen Streamingjob per Drain:

       gcloud dataflow jobs drain JOB_ID
      

      Ersetzen Sie JOB_ID durch die zuvor kopierte Job-ID.

    • So brechen Sie einen Batch- oder Streamingjob ab:

      gcloud dataflow jobs cancel JOB_ID
      

      Ersetzen Sie JOB_ID durch die zuvor kopierte Job-ID.

API

Zum Abbrechen eines Jobs oder Beenden eines Jobs per Drain mit der Dataflow REST API können Sie entweder projects.locations.jobs.update oder projects.jobs.update auswählen. Übergeben Sie im Anfragetext den erforderlichen Jobstatus im Feld requestedState der Jobinstanz der ausgewählten API.

  • Wenn Sie den Job abbrechen möchten, setzen Sie den Jobstatus auf JOB_STATE_CANCELLED.

  • Wenn Sie den Job per Drain beenden möchten, setzen Sie den Jobstatus auf JOB_STATE_DRAINED.

Nächste Schritte