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. Cette fonctionnalité est utile pour la sauvegarde et la récupération, les tests et le rollback de mises à jour des pipelines de traitement par flux, ainsi que d'autres scénarios similaires.

Vous pouvez créer un instantané Dataflow d'une tâche de traitement par flux en cours d'exécution. Cependant, toute tâche créée à partir d'un instantané utilise Streaming Engine. Vous pouvez également utiliser un instantané Dataflow pour migrer votre pipeline existant vers le moteur de streaming 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.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder à la page de sélection du projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Cloud Dataflow, Compute Engine, Stackdriver Logging, Cloud Storage, Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore et Cloud Resource Manager.

    Activer les API

Créer un instantané

Console

  1. Ouvrez l'interface utilisateur de surveillance Dataflow.
    Accéder à l'interface utilisateur Web de Dataflow

    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 Sans source de données pour créer un instantané de l'état de votre tâche Dataflow ou Avec les sources de données pour créer un instantané de l'état de votre tâche Dataflow ainsi qu'un instantané de votre source Pub/Sub.

CLI

Pour créer un instantané, exécutez la commande create :

gcloud beta 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 pour l'utilisation du disque.
  • Les instantanés sont créés dans la même région que la tâche, et uniquement pour les tâches en cours d'exécution dans us-central1, europe-west1, europe-west4 ou asia-northeast1. D'autres régions seront disponibles sors de leur disponibilité générale.
  • 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 septembre 2020.
  • 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 sept jours à compter de sa date de création. Sa durée de vie exacte est déterminée lors de la création des tâches en attente 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). Prenons l'exemple d'un abonnement pour lequel le plus ancien message non confirmé date de trois jours. Si un instantané Pub/Sub est créé à partir de cet abonnement, l'instantané qui enregistre toujours ces tâches en attente de trois jours tant que l'instantané existe, expire dans quatre jours. Consultez la documentation de référence sur l'instantané 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 l'interface utilisateur des instantanés

Une fois que vous avez créé un instantané, vous pouvez utiliser la page Instantanés pour 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é

Console

  1. Sur la page Instantanés ou Détails de l'instantané, cliquez sur Supprimer.
  2. Dans la boîte de dialogue Supprimer l'instantané, cliquez sur Supprimer pour confirmer l'opération.

CLI

Pour supprimer un instantané, exécutez la commande delete :

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

Où :

  • SNAPSHOT_ID est l'ID de votre instantané.
  • REGION est la région de l'instantané.

Créer une tâche à 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é.

Console

Vous ne pouvez pas créer de tâche à partir d'un instantané dans Cloud Console.

Java

Pour créer une tâche à partir d'un instantané, utilisez les options --createFromSnapshot et
--enableStreamingEngine lors du démarrage d'une tâche. Exemple :

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

Où :

  • project-id est l'ID de projet.
  • storage-bucket est le bucket de stockage que vous utilisez pour les éléments de tâche temporaires et le résultat final.
  • snapshot-id est l'ID de l'instantané à partir duquel vous souhaitez créer une tâche.
  • region est l'emplacement de la tâche.

Python

Cette fonctionnalité n'est pas encore disponible dans le SDK Apache Beam pour Python.

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 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 de 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 l'outil gcloud.
  • Les instantanés Dataflow ne sont actuellement compatibles qu'avec les instantanés de sources Pub/Sub.
  • Les instantanés de récepteurs ne sont pas pris en charge pour le moment. Par exemple, vous ne pouvez pas créer un instantané BigQuery lors de la création d'un instantané Dataflow.
  • Chaque projet ne peut avoir que 10 instantanés prêts ou en cours d'exécution par région. Une erreur se produit lorsque vous essayez de créer des instantanés supplémentaires au-delà de cette limite. Cette limite sera assouplie lors de leur disponibilité générale.

Dépannage

Cette section fournit des instructions pour 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 résolu les problèmes liés aux limitations connues et aux sections de dépannage suivantes.

Demande de création d'instantané refusée

Une fois qu'une requête de création d'instantané est envoyée, via Cloud Console ou l'outil gcloud, le service Dataflow vérifie la condition préalable et renvoie tous les messages d'erreur. La demande de création peut être rejetée pour des raisons telles qu'un type de tâche non accepté ou une région indisponible, comme spécifié dans les messages d'erreur.

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

Si la demande est refusée parce que la tâche atteint le nombre maximal d'instantanés, supprimez les anciens instantanés ou contactez l'équipe d'assistance pour augmenter la limite.

Impossible de créer une tâche à partir d'un instantané

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

Pour les problèmes courants liés à la création de tâches, consultez le guide de dépannage de Dataflow. Plus précisément, les tâches créées à partir d'instantanés sont soumises à un contrôle de compatibilité de mise à jour, dans lequel la nouvelle tâche doit être compatible avec la tâche source instantanée.

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

La création de tâches à partir d'un instantané implique une étape de chargement des données de l'instantané dans la nouvelle tâche. Une tâche ne commence à traiter les données qu'une fois l'instantané entièrement chargé. Cette opération peut prendre un certain temps suivant la taille de l'instantané.

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 des tâches en attente Pub/Sub importantes. L'autoscaling de flux peut aider la nouvelle tâche à accélérer la suppression des tâches en attente.

La tâche source instantanée peut déjà être en mauvais état avant la prise de l'instantané. Comprendre pourquoi la tâche source n'est pas opérationnelle peut permettre de résoudre les problèmes liés à la nouvelle tâche. Pour obtenir des conseils sur le débogage des tâches courantes, consultez le guide de dépannage de Dataflow.

La tâche créée à partir d'un instantané n'extrait pas les sources Pub/Sub

Assurez-vous que les instantanés Pub/Sub enregistrés et les instantanés Dataflow existent et ne sont pas arrivés à expiration. Les instantanés Pub/Sub expirent dès que le message le plus ancien d'un instantané date de plus de sept jours.