Répliquer continuellement les modifications d'une base de données OLTP (par exemple, Oracle, PostgreSQL, MySQL) vers BigQuery avec une faible latence.
→Utiliser Datastream pour effectuer la capture de données modifiées (CDC). Le configurer pour diffuser les modifications directement vers BigQuery, qui les applique à l'aide de sa capacité `MERGE`.
Pourquoi: Datastream est un service CDC géré et serverless qui simplifie la réplication de bases de données en temps réel sans nécessiter de pipelines personnalisés ni de charge significative sur la base de données source.
Référence↗
Un pipeline de streaming Dataflow doit produire des résultats précis fenêtrés par temps d'événement malgré l'arrivée tardive de certains événements (plusieurs heures).
→Configurer les fenêtres temporelles d'événements avec `allowedLateness` défini pour tenir compte du délai. Utiliser des déclencheurs avec des activations précoces pour les résultats préliminaires et des volets accumulés pour inclure les données tardives.
Pourquoi: Le modèle de Dataflow de filigranes, de déclencheurs et de latence autorisée fournit un cadre robuste pour équilibrer l'exhaustivité et la latence lors du traitement de données désordonnées.
Un pipeline Dataflow écrivant dans BigQuery subit des doublons après des redémarrages ou des échecs transitoires.
→Utiliser le récepteur BigQuery Storage Write API (`STORAGE_WRITE_API`) avec la méthode définie sur `at-least-once` (par défaut, anciennement `STREAMING_INSERTS`) ou `exactly-once` (mode `COMMITTED`).
Pourquoi: Le Storage Write API en mode `COMMITTED` fournit des sémantiques exactement une fois intégrées pour le streaming, éliminant le besoin d'une logique de déduplication personnalisée.
Ingérer des données depuis une API REST paginée et limitée en débit à l'aide de Dataflow.
→Utiliser un `SplittableDoFn` pour traiter la source paginée en parallèle. Implémenter une logique de limitation de débit (par exemple, en utilisant un Guava RateLimiter) et un backoff exponentiel pour les réessais au sein du DoFn.
Pourquoi: Un `SplittableDoFn` permet un rééquilibrage dynamique du travail. Le combiner avec une limitation de débit et une logique de réessai crée un modèle résilient et efficace pour la gestion des API externes.
Un flux de données unique doit être écrit vers plusieurs destinations (par exemple, BigQuery, Bigtable, Cloud Storage).
→Dans un pipeline Dataflow unique, après le traitement initial, appliquer plusieurs écritures `PTransform` à la même `PCollection` finale.
Pourquoi: Le modèle de fan-out est très efficace car les données ne sont traitées qu'une seule fois. Il évite le coût et la complexité de l'exécution de plusieurs pipelines distincts lisant la même source.
Un flux à haut volume doit être enrichi en le joignant à une table de dimension à évolution lente (par exemple, profils utilisateur) qui se met à jour périodiquement.
→Utiliser le modèle d'entrée latérale (side input) dans Dataflow. Charger la table de dimension comme une `PCollectionView`. Configurer un déclencheur périodique pour rafraîchir l'entrée latérale selon un horaire, évitant les redémarrages de pipeline.
Pourquoi: Les entrées latérales diffusent les données de dimension à tous les workers pour des recherches rapides en mémoire, évitant les appels API/DB par élément. Le rafraîchissement périodique gère les mises à jour efficacement.
Les charges de travail des clusters Dataproc varient considérablement, entraînant soit un surprovisionnement, soit une sous-performance.
→Créer un cluster Dataproc avec une politique d'auto-scaling. Définir le nombre min/max de workers primaires et secondaires. La politique dimensionnera le cluster en fonction des métriques YARN.
Pourquoi: L'auto-scaling optimise les coûts en adaptant les ressources du cluster à la demande des tâches, en augmentant pour les charges lourdes et en réduisant pendant les périodes d'inactivité.
Un pipeline Dataflow nécessite des binaires personnalisés, des bibliothèques propriétaires ou des versions spécifiques non incluses dans les images de worker standard, et doit s'exécuter dans un VPC sans accès internet.
→Construire une image de conteneur personnalisée avec toutes les dépendances préinstallées. Pousser l'image vers Artifact Registry. Déployer le pipeline à l'aide d'un modèle Flex qui référence le conteneur personnalisé.
Pourquoi: Les modèles Flex avec conteneurs personnalisés offrent un contrôle complet sur l'environnement d'exécution et les dépendances, essentiel pour les environnements hors ligne ou spécialisés.
Une tâche Dataflow ou Spark effectuant un `GroupByKey` est lente car certaines clés ont un nombre disproportionné de valeurs (une "clé chaude").
→Mettre en œuvre une agrégation en deux étapes (salage de clé). D'abord, ajouter un suffixe aléatoire à la clé pour répartir la clé chaude sur plusieurs workers. Agréger partiellement. Ensuite, supprimer le suffixe et agréger les résultats partiels.
Pourquoi: Cette technique de fan-out divise manuellement le travail pour la clé chaude, lui permettant d'être traitée en parallèle et de surmonter le goulot d'étranglement.
Un pipeline de streaming ne doit pas échouer en raison d'enregistrements mal formés. Les enregistrements invalides doivent être isolés pour analyse sans arrêter le traitement.
→Dans un `DoFn`, utiliser un bloc try-catch pour le parsing. Utiliser un DoFn à sorties multiples avec `TupleTag` pour acheminer les enregistrements valides vers la sortie principale et les enregistrements invalides (avec contexte d'erreur) vers une sortie d'erreur séparée. Envoyer la PCollection d'erreur vers une destination de file d'attente de lettres mortes comme un sujet Pub/Sub ou une table BigQuery.
Pourquoi: Ce modèle offre une résilience en isolant les mauvaises données, en évitant les échecs de pipeline et en garantissant que les enregistrements échoués sont capturés pour le débogage et le retraitement.