Définir le mode de traitement par flux du pipeline

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

  • Mode "exactement une fois" Ce mode est utilisé par défaut pour toutes les tâches de traitement en flux continu 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 en flux continu à 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 le nombre, la somme ou la moyenne.
  • 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 en flux continu "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. Par exemple, les 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.
  • Pipelines où le point de sortie ne peut pas garantir la diffusion de type "exactement une fois", comme 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 en flux continu "au moins une fois".
  • Canaux qui lisent à partir de Pub/Sub La lecture à partir de Pub/Sub est considérablement optimisée lorsque vous utilisez le mode "au moins une fois".

Informations complémentaires

  • Le mode "au moins une fois" peut considérablement réduire les coûts et la latence d'un pipeline. L'impact exact dépend des spécificités du pipeline. Testez le traitement en flux continu "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 en flux continu 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 en flux continu. Par exemple, si vous utilisez le mode de traitement en flux continu "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" n'est peut-être pas adapté à ce pipeline.

Définir le mode de traitement en flux continu

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 en flux continu de type "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 en flux continu "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 en flux continu sur une tâche en cours d'exécution, lancez une tâche de remplacement.

Sélectionner le mode de streaming pour un modèle

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

Console

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

    Accéder 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 en flux continu, sélectionnez le mode de traitement en flux continu. 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 pas l'une de ces options, le modèle utilise par défaut un mode de streaming déterminé par les métadonnées du modèle. Pour en savoir plus, consultez la section 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 en flux continu par défaut du modèle. Si vous ne spécifiez pas defaultStreamingMode 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 en flux continu d'une tâche

Pour afficher le mode de traitement en flux continu d'une tâche, accédez à la page Jobs (Tâches) dans la consoleGoogle Cloud .

Accéder aux tâches

Le mode de traitement en flux continu 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 en flux continu "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 en flux continu. 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