DE2 Lab 1: Pipeline de streaming - Note d’ingénierie
Objectif
Implémente et optimise un pipeline Structured Streaming pour les événements esport OpenDota avec agrégation par fenêtre, gestion des watermarks, et livraison exactly-once basée sur checkpoints.
Piste de données: Piste A (Esport/OpenDota)
- Schéma: event_timestamp, team_id, hero_id, gold_earned, kills
- Source d’événements: événements de match OpenDota synthétiques (2000 événements, ~120 sec de durée)
- Durée de la fenêtre: 10 secondes
- Délai du watermark: 5 secondes (tolérance pour données tardives)
Architecture
De base (Sans optimisation)
- Lecture du flux avec partition unique
- Agrégation par fenêtre sans repartitionnement
- Sortie: stream_sink_baseline (Parquet)
- Checkpoint: checkpoint_baseline
Optimisée (Stratégie de repartitionnement)
- Lire le flux et repartitionner par team_id (4 partitions)
- Cette optimisation colocalise les données d’équipe localement, réduisant le coût de shuffle pendant le groupBy
- Agrégation par fenêtre sur données repartitionnées
- Sortie: stream_sink_optimized (Parquet)
- Checkpoint: checkpoint_optimized
Métriques clés capturées
- Plans d’exécution de requête (explain formatted)
- Nombre de lignes de sortie
- Statistiques d’agrégation (avg event_count, avg total_gold)
- Répertoires de checkpoint (vérifier livraison exactly-once)
Observations
- Le repartitionnement avant l’agrégation par fenêtre réduit la surcharge de shuffle
- Le watermark assure que les événements tardifs sont gérés dans la fenêtre de tolérance
- Les répertoires de checkpoint fournissent la tolérance aux pannes et les garanties de récupération
Reproductibilité
- Graine fixée (42) pour la génération de données synthétiques
- Limites de fenêtre déterministes liées au timestamp
- Configuration matérielle identique supposée
- Tous les artefacts dans le dossier /lab1 assignment
Fichiers générés
- outputs/lab1/stream_sink_baseline/ : Sortie Parquet (de base)
- outputs/lab1/stream_sink_optimized/ : Sortie Parquet (optimisée)
- outputs/lab1/checkpoint_baseline/ : Checkpoint (de base)
- outputs/lab1/checkpoint_optimized/ : Checkpoint (optimisée)
- proof/plan_baseline.txt : Plan de requête (de base)
- proof/plan_optimized.txt : Plan de requête (optimisée)
- lab1_metrics_log.csv : Comparaison des métriques