Utiliser des instantanés Dataflow

Les instantanés Dataflow enregistrent l'état d'un pipeline de traitement par flux, ce qui vous permet de démarrer une nouvelle version de votre tâche Dataflow sans perdre l'état. Les instantanés s'avèrent utiles pour la sauvegarde et la récupération, le test et le rollback des mises à jour de pipelines de traitement par flux, ainsi que d'autres scénarios similaires.

Vous pouvez créer un instantané Dataflow d'un job de traitement par flux en cours d'exécution. Notez que tout job créé à partir d'un instantané utilise Streaming Engine. Vous pouvez également utiliser un instantané Dataflow pour migrer votre pipeline existant vers Streaming Engine, qui est plus efficace et évolutif, avec un temps d'arrêt minimal.

Ce guide explique comment créer et gérer des instantanés, et comment créer des tâches à partir d'instantanés.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  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

Créer un instantané

Console

  1. Dans Google Cloud Console, accédez à la page Tâches de Dataflow.

    Accéder aux tâches

    Une liste des tâches Dataflow ainsi que leur état respectif apparaissent. Si aucune tâche de traitement par flux ne s'affiche, vous devez en exécuter une nouvelle. Pour obtenir un exemple de tâche de traitement par flux, consultez le guide de démarrage rapide sur l'utilisation des modèles.

  2. Sélectionnez une tâche.
  3. Dans la barre de menu de la page Informations sur la tâche, cliquez sur Créer un instantané.
  4. Dans la boîte de dialogue Créer un instantané, sélectionnez l'une des options suivantes :
    • Sans sources de données : sélectionnez cette option pour créer un instantané de l'état de votre tâche Dataflow uniquement.
    • Avec les sources de données : sélectionnez cette option pour créer un instantané de l'état de votre tâche Dataflow ainsi qu'un instantané de votre source Pub/Sub.
  5. Cliquez sur Créer.

gcloud

Créez un instantané :

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

Remplacez l'élément suivant :

  • JOB_ID : ID de votre tâche de traitement par flux.
  • DURATION : délai (en jours) avant l'expiration de l'instantané, après quoi aucune autre tâche ne peut être créée à partir de l'instantané. L'option snapshot-ttl est facultative. Par conséquent, si elle n'est pas spécifiée, l'instantané expire au bout de sept jours. Spécifiez la valeur au format suivant : 5d. La durée maximale que vous pouvez spécifier est de 30 jours (30d).
  • REGION : région dans laquelle votre tâche est exécutée.

L'option snapshot-sources spécifie si un instantané des sources Pub/Sub doit être créé avec l'instantané Dataflow. Si la valeur est true, un instantané des sources Pub/Sub est automatiquement créé, et l'ID des instantanés Pub/Sub s'affiche dans la réponse de sortie. Après avoir exécuté la commande create, vérifiez l'état de l'instantané en exécutant la commande list ou describe.

Les règles suivantes s'appliquent lors de la création d'instantanés Dataflow :

  • Les instantanés Dataflow entraînent des frais d'utilisation du disque.
  • Les instantanés sont créés dans la même région que la tâche.
  • Si la zone du nœud de calcul de la tâche est différente de la région de la tâche, la création d'instantané échoue. Consultez le guide des régions Dataflow.
  • Vous ne pouvez réaliser des instantanés de tâches n'utilisant pas Streaming Engine que si celles-ci ont été démarrées ou mises à jour après le 1er février 2021.
  • Les instantanés Pub/Sub créés avec des instantanés Dataflow sont gérés par le service Pub/Sub et entraînent des frais.
  • Un instantané Pub/Sub expire au plus tard sept jours après sa création. Sa durée de vie exacte est déterminée lors de la création suivant le retard en cours dans l'abonnement source. Plus précisément, la durée de vie de l'instantané Pub/Sub est 7 days - (age of oldest unacked message in the subscription) (sept jours moins l'âge du message le plus ancien non confirmé dans l'abonnement). Prenons l'exemple d'un abonnement dont le plus ancien message non confirmé en attente date de trois jours. Si un instantané Pub/Sub est créé à partir de cet abonnement, l'instantané, qui enregistre toujours ces éléments en attente datant de trois jours tant que l'instantané existe, expire dans quatre jours. Consultez la documentation de référence sur les instantanés Pub/Sub.
  • Pendant l'opération de création d'instantané, votre tâche Dataflow se met en pause et reprend une fois que l'instantané est prêt. Le temps nécessaire dépend de la taille de l'état du pipeline. Par exemple, le temps nécessaire pour réaliser des instantanés sur des tâches Streaming Engine est généralement plus court que pour les tâches n'utilisant pas Streaming Engine.
  • Vous pouvez annuler la tâche alors qu'un instantané est en cours de création, ce qui annule ensuite cet instantané.
  • Vous ne pouvez pas mettre à jour ni drainer la tâche lorsqu'un instantané est en cours de création. Pour pouvoir mettre à jour ou drainer la tâche, vous devez attendre que son processus de création d'instantané ait repris.

Utiliser la page "Instantanés"

Après avoir créé un instantané, vous pouvez consulter la page Instantanés dans la console Google Cloud pour afficher et gérer les instantanés de votre projet.

En cliquant sur un instantané, vous ouvrez la page Détails de l'instantané, où vous pouvez obtenir des métadonnées supplémentaires sur celui-ci, ainsi qu'un lien vers la tâche source et les instantanés Pub/Sub.

Page de détails de l'instantané Dataflow, sur laquelle vous pouvez obtenir plus d'informations sur cet instantané.

Supprimer un instantané

La suppression d'un instantané vous permet d'arrêter le processus et de reprendre la tâche. De plus, la suppression d'instantanés Dataflow ne supprime pas automatiquement les instantanés Pub/Sub associés.

Console

  1. Dans la console Google Cloud, accédez à la page Instantanés de Dataflow.

    Accéder à la page Instantanés

  2. Sélectionnez l'instantané, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue Supprimer l'instantané, cliquez sur Supprimer pour confirmer l'opération.

gcloud

Supprimez un instantané à l'aide de la commande suivante :

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Remplacez l'élément suivant :

  • SNAPSHOT_ID : ID de votre instantané.
  • REGION : région où se trouve l'instantané.

Pour en savoir plus, consultez la documentation de référence sur la commande delete.

Créer un job à partir d'un instantané

Après avoir créé un instantané, vous pouvez restaurer l'état de la tâche en créant une nouvelle tâche à partir de cet instantané.

Java

Pour créer un job à partir d'un instantané, utilisez à la fois les options --createFromSnapshot et --enableStreamingEngine.

  • Dans votre interface système ou votre terminal, créez un job à partir d'un instantané. Exemple :
    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"

    Remplacez les éléments suivants :

    • MAIN_CLASS ou MODULE : pour les pipelines Java, emplacement de la classe principale contenant le code de votre pipeline. Pour les pipelines Python, emplacement du module contenant le code de votre pipeline. Par exemple, lorsque vous utilisez l'exemple Wordcount, la valeur est org.apache.beam.examples.WordCount.
    • PROJECT_ID : ID de votre projet Google Cloud
    • STORAGE_BUCKET : bucket Cloud Storage que vous utilisez pour les éléments de tâche temporaires et le résultat final.
    • SNAPSHOT_ID : ID de l'instantané à partir duquel vous souhaitez créer un job.
    • REGION : emplacement dans lequel vous souhaitez exécuter la nouvelle tâche Dataflow.

Python

Les instantanés Dataflow nécessitent le SDK Apache Beam pour Python version 2.29.0 ou ultérieure.

Pour créer un job à partir d'un instantané, utilisez à la fois les options --createFromSnapshot et --enableStreamingEngine.

  • Dans votre interface système ou votre terminal, créez un job à partir d'un instantané. Exemple :
    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

    Remplacez les éléments suivants :

    • MAIN_CLASS ou MODULE : pour les pipelines Java, emplacement de la classe principale contenant le code de votre pipeline. Pour les pipelines Python, emplacement du module contenant le code de votre pipeline. Par exemple, lorsque vous utilisez l'exemple Wordcount, la valeur est org.apache.beam.examples.WordCount.
    • PROJECT_ID : ID de votre projet Google Cloud
    • STORAGE_BUCKET : bucket Cloud Storage que vous utilisez pour les éléments de tâche temporaires et le résultat final.
    • SNAPSHOT_ID : ID de l'instantané à partir duquel vous souhaitez créer un job.
    • REGION : emplacement dans lequel vous souhaitez exécuter la nouvelle tâche Dataflow.

Les règles suivantes s'appliquent lors de la création de tâches à partir d'instantanés Dataflow :

  • Les tâches créées à partir d'instantanés doivent s'exécuter dans la même région que celle où l'instantané est stocké.
  • Si un instantané Dataflow inclut des instantanés de sources Pub/Sub, les tâches créées à partir d'un instantané Dataflow recherchent (seek) automatiquement ces instantanés en tant que sources. Vous devez spécifier les mêmes sujets Pub/Sub que ceux utilisés par la tâche source lors de la création de tâches à partir de cet instantané Dataflow.

  • Si un instantané Dataflow n'inclut pas d'instantanés des sources Pub/Sub et que la tâche source utilise une source Pub/Sub, vous devez spécifier un sujet Pub/Sub lors de la création de tâches à partir de cet instantané Dataflow.

  • Les nouvelles tâches créées à partir d'un instantané sont toujours soumises à une vérification de compatibilité des mises à jour.

Limites connues

Les limites suivantes s'appliquent aux instantanés Dataflow :

  • Vous ne pouvez pas créer de tâches à partir d'instantanés à l'aide de modèles ou de l'éditeur SQL Dataflow.
  • Le délai d'expiration des instantanés ne peut être défini que via la CLI Google Cloud.
  • Les instantanés Dataflow ne sont compatibles qu'avec les instantanés de sources Pub/Sub.
  • Les instantanés de récepteurs ne sont pas pris en charge. Par exemple, vous ne pouvez pas créer un instantané BigQuery lors de la création d'un instantané Dataflow.

Dépannage

Cette section explique comment résoudre les problèmes courants rencontrés lors de l'interaction avec les instantanés Dataflow.

Avant de contacter l'assistance, assurez-vous d'avoir éliminé les problèmes liés aux limitations connues et mentionnés dans les sections de dépannage suivantes.

La requête de création d'instantané a été rejetée

Une fois qu'une requête de création d'instantané est envoyée, via la console Google Cloud ou gcloud CLI, le service Dataflow vérifie les conditions préalables et renvoie les messages d'erreur applicables. La requête de création d'instantané peut être refusée pour diverses raisons spécifiées dans les messages d'erreur, par exemple si un type de tâche n'est pas compatible ou si une région est indisponible.

Si la requête est refusée parce que la tâche est trop ancienne, vous devez mettre à jour la tâche avant de demander un instantané.

Échec de la création de l'instantané

La création d'instantanés peut échouer pour plusieurs raisons. Par exemple, la tâche source a été annulée ou le projet ne dispose pas des autorisations nécessaires pour créer des instantanés Pub/Sub. Les journaux job-message de la tâche contiennent des messages d'erreur issus de la création de l'instantané. Si la création de l'instantané échoue, la tâche source reprend.

Échec de la création d'une tâche à partir d'un instantané

Lorsque vous créez une tâche à partir d'un instantané, assurez-vous que celui-ci existe et qu'il n'a pas expiré. La nouvelle tâche doit être exécutée sur Streaming Engine.

Pour les problèmes courants concernant la création de tâches, reportez-vous au guide de dépannage de Dataflow. En particulier, les tâches créées à partir d'instantanés sont soumises à une vérification de compatibilité des mises à jour suivant laquelle la nouvelle tâche doit être compatible avec la tâche source visée par la création d'instantané.

La tâche créée à partir de l'instantané progresse peu

Les journaux job-message de la tâche contiennent des messages d'erreur pour la création de la tâche. Par exemple, vous pourriez constater que la tâche ne trouve pas les instantanés Pub/Sub. Dans ce cas, vérifiez que les instantanés Pub/Sub existent et n'ont pas expiré. Les instantanés Pub/Sub expirent dès que le message le plus ancien d'un instantané date de plus de sept jours. Les instantanés Pub/Sub expirés peuvent être supprimés automatiquement par le service Pub/Sub.

Pour les tâches créées à partir d'instantanés Dataflow, qui incluent des instantanés sources Pub/Sub, la nouvelle tâche peut comporter un nombre important de messages Pub/Sub en attente. L'autoscaling de flux peut aider la nouvelle tâche à accélérer la suppression des tâches en attente.

La tâche source visée par la création d'instantané peut déjà être dans un état non opérationnel avant la prise de l'instantané. Comprendre pourquoi la tâche source n'est pas opérationnelle peut aider à résoudre les problèmes liés à la nouvelle tâche. Pour obtenir des conseils de débogage des tâches, consultez le guide de dépannage de Dataflow.