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 (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 garantir l'exactitude des résultats du pipeline et une sémantique prévisible. Exemple :
- Pipelines avec 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 dans lesquelles la déduplication est effectuée en aval de Dataflow. Par exemple, les pipelines qui écrivent dans BigQuery ou dans 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 dans lesquels le récepteur de sortie ne peut pas garantir une distribution 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".
- Pipelines 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 le coût 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 les nœuds de calcul é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
Mapne 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 approprié pour 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 "au moins une fois", définissez l'
streaming_mode_at_least_once
option de service.
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 traitement en flux continu 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
Dans la Google Cloud console, accédez à la page Jobs de Dataflow.
Cliquez sur Create job from template (Créer une tâche à partir d'un modèle).
Sélectionnez le modèle que vous souhaitez exécuter dans le menu déroulant Dataflow template (Modèle Dataflow).
Dans le champ Streaming mode (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 traitement en flux continu 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 traitement en flux continu lors du déploiement
du modèle dans la Google Cloud console. 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 :
- Modèles Flex : Métadonnées
- Modèles classiques : Utiliser des métadonnées dans le code de votre pipeline
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) de la Google Cloud console.
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
- Découvrez le traitement de type "exactement une fois".