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 ni supprimés, ni dupliqués lorsque les données transitent par 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 réduire considérablement le coût et la latence de votre tâche.

Choisir le mode de streaming à utiliser

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

  • Pipelines avec des agrégations, telles que décompte, somme ou moyenne.
  • Des cas d'utilisation critiques qui reposent sur le traitement unique des enregistrements. 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 à partir de Dataflow. Par exemple, des 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 pour lesquels le récepteur de sortie ne peut pas garantir une distribution de type "exactement une fois", tels 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 lorsque vous utilisez le mode "au moins une fois".

Autres considérations

  • Le mode "au moins une fois" peut réduire considérablement 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 tentatives. Le taux de référence est généralement faible (< 1 %). Toutefois, des pics peuvent se produire si les nœuds de calcul échouent ou 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 par élément telles que Map ne sont pas toujours idempotentes. Par exemple, considérons une fonction qui reçoit un message et y ajoute l'horodatage actuel. Dans ce cas, un enregistrement en double peut produire plusieurs sorties distinctes. Le mode "au moins une fois" peut ne pas être approprié pour ce pipeline.

Définir le mode de streaming

Le traitement "exactement une fois" est le paramètre par défaut pour toutes les tâches Dataflow. Pour activer le mode de streaming "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 streaming 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 streaming, sélectionnez le mode de streaming. Si le modèle n'accepte qu'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 l'option 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 l'option 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 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 diffusion 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 le mode 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.

Tarification

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