Arrêter un pipeline en cours d'exécution

Vous ne pouvez pas supprimer une tâche Dataflow. vous pouvez seulement l'arrêter.

Pour arrêter une tâche Dataflow, vous pouvez utiliser Google Cloud Console, Cloud Shell, un terminal local installé avec SDK Cloud ou l'API REST Dataflow.

Vous pouvez arrêter une tâche Dataflow de deux manières:

  • Annuler une tâche Cette méthode s'applique à la fois aux pipelines de traitement par flux et par lot. L'annulation d'une tâche arrête le service Dataflow dans son traitement de toutes les données, y compris les données mises en mémoire tampon. Pour en savoir plus, consultez la page Annuler une tâche.

  • Drainer une tâche. Cette méthode ne s'applique qu'aux pipelines de traitement par flux. Le drainage d'une tâche permet au service Dataflow de terminer le traitement des données mises en mémoire tampon tout en interrompant simultanément l'ingestion de nouvelles données. Pour en savoir plus, consultez la section Drainer une tâche.

Annuler une tâche

Lorsque vous annulez une tâche, le service Dataflow l'arrête immédiatement.

Les actions suivantes se produisent lorsque vous annulez une tâche:

  1. Le service Dataflow interrompt toute ingestion et traitement de données.

  2. Le service Dataflow commence à nettoyer les ressources Google Cloud associées à votre tâche.

    Cela peut inclure la fermeture des instances de nœuds de calcul Compute Engine et la fermeture des connexions actives aux sources ou récepteurs d'E/S.

Informations importantes sur l'annulation d'une tâche

  • L'annulation d'une tâche interrompt immédiatement le traitement du pipeline.

  • Vous risquez de perdre des données en cours de transfert lorsque vous annulez une tâche. Les données en cours de transfert désignent les données déjà lues mais qui sont toujours en cours de traitement par le pipeline.

  • Les données écrites à partir du pipeline vers un récepteur de sortie avant l'annulation de la tâche peuvent toujours être accessibles sur le récepteur de sortie.

  • Si la perte de données n'est pas un problème, l'annulation de votre tâche garantit que les ressources Google Cloud associées à cette tâche sont arrêtées le plus rapidement possible.

Drainer une tâche

Lorsque vous drainez une tâche, le service Dataflow la termine dans son état actuel. Si vous souhaitez éviter les pertes de données lorsque vous désactivez les pipelines de streaming, la meilleure option consiste à drainer votre tâche.

Les actions suivantes se produisent lors du drainage d'une tâche:

  1. Votre tâche arrête d'ingérer de nouvelles données à partir de sources d'entrée peu de temps après avoir reçu la requête Drain (généralement sous quelques minutes).

  2. Le service Dataflow conserve toutes les ressources existantes, telles que les instances de nœuds de calcul, pour terminer le traitement et l'écriture des données mises en mémoire tampon dans le pipeline.

  3. Une fois toutes les opérations de traitement et d'écriture en attente terminées, le service Dataflow arrête les ressources Google Cloud associées à la tâche.

Informations importantes sur le drainage d'une tâche

  • Le drainage d'une tâche n'est pas compatible avec les pipelines de traitement par lot.

  • Votre pipeline continue à subir les coûts de maintenance des ressources Google Cloud associées jusqu'à la fin des opérations de traitement et d'écriture.

  • Si le code de votre pipeline de traitement par flux inclut un minuteur en boucle, la tâche ne peut pas être drainée.

  • Si votre pipeline de streaming inclut un objet Splittable DoFn, vous devez tronquer le résultat avant d'exécuter l'option de drainage. Pour en savoir plus sur la troncation des Splittable DoFns, consultez la documentation Apache Beam.

  • Vous pouvez mettre à jour un pipeline en cours de drainage.

  • Le drainage d'une tâche peut prendre beaucoup de temps, par exemple lorsque le pipeline contient une grande quantité de données en mémoire tampon.

  • Vous pouvez annuler une tâche en cours de drainage.

  • Dans certains cas, une tâche Dataflow peut ne pas être en mesure de terminer l'opération de drainage. Vous pouvez consulter les journaux de la tâche pour identifier la cause première et prendre les mesures appropriées.

Effets liés au drainage d'une tâche

Lorsque vous drainez un pipeline de traitement par flux, Dataflow ferme immédiatement toutes les fenêtres en cours et actionne tous les déclencheurs.

Le système n'attend pas que les fenêtres temporelles en cours se terminent dans une opération de drainage.

Par exemple, si votre pipeline a déjà passé 10 minutes d'une fenêtre de deux heures au moment où vous effectuez le drainage, Dataflow n'attend pas que le reste de la fenêtre se termine. Il ferme la fenêtre immédiatement, avec des résultats partiels. Dataflow provoque la fermeture des fenêtres ouvertes en faisant avancer le filigrane système à l'infini. Cette fonctionnalité peut également être utilisée avec des sources de données personnalisées.

Lors du drainage d'un pipeline utilisant une classe de source de données personnalisée, Dataflow cesse d'émettre des requêtes pour obtenir de nouvelles données, fait avancer le filigrane système à l'infini et appelle la méthode finalize() de votre source sur le dernier point de contrôle.

Dans Google Cloud Console, vous pouvez afficher les détails des transformations du pipeline. Le schéma suivant montre les effets d'une opération de drainage en cours de traitement. Notez que le filigrane est avancé à la valeur maximale.

Vue par étapes d'une opération de drainage.

Figure 1 : Vue par étapes d'une opération de drainage.

Arrêter une tâche

Avant d'arrêter une tâche, vous devez comprendre les effets de l'annulation ou du drainage d'une tâche.

Console

  1. Accédez à la page Tâches Dataflow.

    Accéder aux tâches

  2. Cliquez sur la tâche que vous souhaitez arrêter.

    Pour arrêter une tâche, son état doit être en cours d'exécution.

  3. Sur la page des détails de la tâche, cliquez sur Arrêter.

  4. Effectuez l'une des opérations suivantes :

    • Pour un pipeline par lot, cliquez sur Annuler.

    • Pour un pipeline de streaming, cliquez sur Annuler ou Drainer.

  5. Pour confirmer votre choix, cliquez sur Arrêter la tâche.

gcloud

Pour drainer ou annuler une tâche Dataflow, vous pouvez utiliser la commande gcloud dataflow jobs dans Cloud Shell ou dans un terminal local installé avec le SDK Cloud.

  1. Connectez-vous à votre interface système.

  2. Répertoriez les ID des tâches Dataflow en cours d'exécution, puis notez l'ID de la tâche que vous souhaitez arrêter:

    gcloud dataflow jobs list
    

    Si l'option --region n'est pas définie, les tâches Dataflow de toutes les régions disponibles s'affichent.

  3. Effectuez l'une des opérations suivantes :

    • Pour drainer une tâche de streaming, procédez comme suit:

       gcloud dataflow jobs drain JOB_ID
      

      Remplacez JOB_ID par l'ID de la tâche que vous avez copiée précédemment.

    • Pour annuler une tâche par lots ou par flux, procédez comme suit:

      gcloud dataflow jobs cancel JOB_ID
      

      Remplacez JOB_ID par l'ID de la tâche que vous avez copiée précédemment.

API

Pour annuler ou drainer une tâche à l'aide de l'API REST Dataflow, vous pouvez choisir entre projects.locations.jobs.update et projects.jobs.update Dans le corps de la requête, transmettez l'état de tâche requis dans le champ requestedState de l'instance de tâche de l'API choisie.

  • Pour annuler la tâche, définissez son état sur JOB_STATE_CANCELLED.

  • Pour drainer la tâche, définissez son état sur JOB_STATE_DRAINED.

Étape suivante