Définir le mode de traitement par flux du pipeline

Dataflow accepte deux modes pour les tâches de traitement par flux :

  • Mode "exactement une fois" Ce mode est utilisé par défaut pour toutes les tâches de traitement par flux Dataflow. Dans ce mode, Dataflow garantit que les enregistrements ne sont pas supprimés ni dupliqués lorsque les données transitent dans le pipeline.
  • Mode "au moins une fois" Ce mode garantit que les enregistrements sont traités au moins une fois (c'est-à-dire qu'aucun enregistrement d'entrée n'est perdu). Toutefois, les enregistrements en double sont possibles dans ce mode. Pour les cas d'utilisation pouvant tolérer des doublons, le mode "au moins une fois" peut considérablement réduire les coûts et améliorer la latence de votre job.

Choisir le mode de traitement par flux à utiliser

Choisissez le mode "exactement une fois" si vous devez vous assurer d'obtenir des résultats exacts du pipeline et une sémantique prévisible. Exemple :

  • Pipelines avec des agrégations, telles que des décomptes, des sommes ou des moyennes.
  • Cas d'utilisation critiques pour l'entreprise qui reposent sur le traitement des enregistrements de type "une seule fois". Exemples : détection des fraudes, détection des menaces réseau et tableaux de bord d'inventaire d'e-commerce.

Choisissez le mode de traitement par flux "au moins une fois" si votre charge de travail peut tolérer les enregistrements dupliqués et qu'elle est susceptible de bénéficier d'un coût ou d'une latence réduits. Exemple :

  • Charges de travail pour lesquelles la déduplication est effectuée en aval de Dataflow. Il peut s'agir, par exemple, de pipelines qui écrivent dans BigQuery ou un datastore SQL.
  • Pipelines de carte uniquement sans agrégations. Il peut s'agir, par exemple, de tâches de traitement de journaux, de capture de données modifiées, ou de tâches d'extraction, de transformation et de chargement (ETL) dans lesquelles le pipeline n'effectue que des transformations par élément, telles que la traduction de schéma.
  • Les pipelines dans lesquels le récepteur de sortie ne peut pas garantir une distribution "exactement une fois", tel que Pub/Sub. Dans ce cas, la déduplication au sein du pipeline peut être inutile, et vous pouvez bénéficier du coût et de la latence réduits du mode de traitement par flux "au moins une fois".
  • Pipelines qui lisent des données à partir de Pub/Sub. La lecture à partir de Pub/Sub est considérablement optimisée lors de l'utilisation du mode "au moins une fois".

Informations complémentaires

  • Le mode "au moins une fois" peut considérablement réduire le coût et la latence d'un pipeline. L'impact exact dépend des spécificités du pipeline. Testez le traitement par flux "au moins une fois" sous des charges réalistes pour évaluer l'impact.

  • Lorsque vous utilisez le mode "au moins une fois", le taux d'enregistrements en double dépend du nombre de nouvelles tentatives. Le taux de référence est généralement faible (< 1 %). Toutefois, des pics peuvent se produire si des nœuds de travail échouent ou si d'autres conditions entraînent des appels RPC répétés.

  • Le mode de traitement par flux affecte la manière dont Streaming Engine traite les enregistrements, mais ne modifie pas la sémantique des connecteurs d'E/S. Il est recommandé d'aligner la sémantique d'E/S sur le mode de traitement par flux. Par exemple, si vous utilisez le mode de traitement par flux "au moins une fois" avec le connecteur d'E/S BigQuery, définissez le mode d'écriture sur STORAGE_API_AT_LEAST_ONCE. Les modèles Dataflow fournis par Google activent automatiquement cette option lorsque vous utilisez l'insertion en flux continu de type "au moins une fois".

  • Les transformations au niveau des éléments telles que Map ne sont pas toujours idempotentes. Par exemple, considérons une fonction qui reçoit un message et lui ajoute le code temporel actuel. Dans ce cas, un enregistrement en double peut produire plusieurs résultats distincts. Le mode "au moins une fois" peut ne pas être approprié pour ce pipeline.

Définir le mode de traitement par flux

Le traitement de type "exactement une fois" est le paramètre par défaut pour tous les jobs Dataflow. Pour activer le mode de traitement par flux "au moins une fois", définissez l'option de service streaming_mode_at_least_once.

Java

--dataflowServiceOptions=streaming_mode_at_least_once

Python

--dataflow_service_options=streaming_mode_at_least_once

Go

--dataflow_service_options=streaming_mode_at_least_once

Si vous ne spécifiez pas l'option streaming_mode_at_least_once, Dataflow utilise le mode de traitement par flux "exactement une fois".

Si vous définissez l'option streaming_mode_at_least_once, Dataflow active automatiquement Streaming Engine avec la facturation basée sur les ressources.

Pour mettre à jour le mode de traitement par flux sur une tâche en cours d'exécution, arrêtez la tâche existante et exécutez une tâche de remplacement. Pour en savoir plus, consultez la section Lancer un job de remplacement.

Sélectionner le mode de traitement par flux d'un modèle

Pour sélectionner le mode de traitement par flux lorsque vous exécutez un modèle de traitement par flux Dataflow, procédez comme suit :

Console

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

    Accédez aux tâches

  2. Cliquez sur Create job from template (Créer une tâche à partir d'un modèle).

  3. Sélectionnez le modèle que vous souhaitez exécuter dans le menu déroulant Dataflow template (Modèle Dataflow).

  4. Dans le champ Mode de traitement par flux, sélectionnez le mode de traitement par flux. Si le modèle n'est compatible qu'avec un seul mode, cette option est désactivée.

gcloud

Pour activer le mode "au moins une fois", définissez l'option streaming_mode_at_least_once dans le champ additional-experiments :

--additional-experiments=streaming_mode_at_least_once

Pour activer le mode "exactement une fois", définissez l'option streaming_mode_exactly_once dans le champ additional-experiments :

--additional-experiments=streaming_mode_exactly_once

Ces deux options s'excluent mutuellement. Si vous ne définissez aucune de ces options, le modèle utilise par défaut un mode de traitement par flux déterminé par les métadonnées du modèle. Pour en savoir plus, consultez la page Modèles personnalisés.

REST

Utilisez le champ additionalExperiments dans l'objet FlexTemplateRuntimeEnvironment (modèles Flex) ou RuntimeEnvironment (modèles classiques).

{
  additionalExperiments : ["streaming_mode_at_least_once"]
  ...
}

Modèles personnalisés

Si vous créez un modèle personnalisé compatible avec le traitement de type "au moins une fois", ajoutez les champs de premier niveau suivants au fichier de métadonnées du modèle :

{
  "streaming": true,
  "supportsAtLeastOnce": true,
  "supportsExactlyOnce": true,
  "defaultStreamingMode": "AT_LEAST_ONCE"
}

Ces champs de métadonnées permettent aux utilisateurs de sélectionner le mode de streaming lors du déploiement du modèle dans la console Google Cloud. Le champ defaultStreamingMode est facultatif et spécifie le mode de traitement par flux par défaut du modèle. Si vous ne spécifiez pas defaultStreamingModeg et que le modèle est compatible avec les deux modes, le mode "exactement une fois" est utilisé par défaut.

Pour en savoir plus, consultez les sections suivantes dans la documentation des modèles Dataflow :

Afficher le mode de traitement par flux d'une tâche

Pour afficher le mode de traitement par flux d'une tâche, accédez à la page Tâches de la console Google Cloud.

Accédez aux tâches

Le mode de traitement par flux est également indiqué sur la page des informations sur la tâche, dans le panneau Job info (Informations sur la tâche).

Limites

Le mode de traitement par flux "au moins une fois" nécessite Streaming Engine avec une facturation basée sur les ressources.

Tarifs

Le mode "au moins une fois" utilise toujours la facturation basée sur les ressources. Vous êtes facturé pour le nombre total des ressources utilisées par votre job.

Le coût unitaire des unités de calcul Streaming Engine est identique quel que soit le mode de traitement par flux. Toutefois, dans la plupart des cas, un pipeline consomme beaucoup moins de ressources totales lors de l'utilisation du mode "au moins une fois".

Étapes suivantes