Flux Open‑Meteo vers Kafka, traitement avec Spark Structured Streaming, chargement dans BigQuery et visualisation via Looker Studio. Orchestration par Airflow.
Vous pouvez changer la ville selon la latitude et la longitude dans l’API. Le ville actuel est Paris.
- Horaire:
weather_paris - Quotidien:
daily_paris
Produits par dags/kafka_stream.py (appel API Open‑Meteo, normalisation et envoi vers Kafka).
- Entrée:
spark_stream.py - Bootstrap Kafka:
- Dans les conteneurs:
broker:29092 - Depuis l’hôte:
localhost:9092
- Dans les conteneurs:
- Project ID:
VOTRE_PROJECT_ID(modifiable dansspark_stream.py) - Dataset:
VOTRE_NOM_DATASET(modifiable dansspark_stream.py) - Tables:
- Horaire:
meteo_hourly - Quotidien:
meteo_daily
- Horaire:
Schémas selon spark_stream.py:
- meteo_hourly:
id(STRING, REQUIRED),time_text(STRING),time_ts(TIMESTAMP),latitude(FLOAT64),longitude(FLOAT64),timezone(STRING),timezone_abbreviation(STRING),temperature_2m(FLOAT64),relative_humidity_2m(FLOAT64),apparent_temperature(FLOAT64),precipitation(FLOAT64),surface_pressure(FLOAT64),cloud_cover(FLOAT64),wind_speed_10m(FLOAT64) - meteo_daily:
id(STRING, REQUIRED),date_text(STRING),date_ts(DATE),latitude(FLOAT64),longitude(FLOAT64),timezone(STRING),timezone_abbreviation(STRING),sunrise_time(STRING),sunset_time(STRING),sunshine_duration(FLOAT64),sunshine_duration_time(STRING)
- Préparer les credentials BigQuery (placer
config/config.json). - Lancer les services:
docker compose up -d- Ouvrir Airflow UI: http://localhost:8080
- Déclencher le DAG producteur:
weather_daily(planification@daily)
- Déclencher le DAG producteur:
- Kafka Control Center: http://localhost:9021
- Spark Master UI: http://localhost:9090
- Airflow Web UI: http://localhost:8080
- BigQuery: https://console.cloud.google.com/bigquery
- DAGs:
dags/ - Job Spark Streaming:
spark_stream.py - Entrypoint Airflow:
script/entrypoint.sh - Dépendances Python:
requirements.txt
Le rapport se met automatiquement à jour chaque jour.
J’ai filtré les données à la date d’aujourd’hui.
C’est un pipeline ETL de type streaming, mais j’ai choisi de le mettre en batch en raison des caractéristiques des données. En effet, l’API Open-Meteo envoie des données une fois par jour. Ainsi, il n’est pas nécessaire d’utiliser Kafka, mais je souhaite l’employer dans un but d’apprentissage et bien comprendre le fonctionnement.


