diff --git a/references/modern-data-stack.md b/references/modern-data-stack.md new file mode 100644 index 00000000..8843e217 --- /dev/null +++ b/references/modern-data-stack.md @@ -0,0 +1,191 @@ +# Modern Data Stack (MDS) - Smart City Digital Twin + +## Vue d'ensemble + +Stack moderne pour l'ingestion, le traitement, l'orchestration et la visualisation des données IoT du jumeau numérique Smart City (Martinique). + +## 1. Data Ingestion (Ingestion de données) + +### Objectif +Ingérer les données des capteurs IoT (AirQualityObserved, TrafficFlowObserved, WeatherObserved, etc.) depuis les brokers MQTT et les Context Brokers (Orion-LD, Stellio, FROST). + +### Outils identifiés + +| Outil | Rôle | Avantage Smart City | Skill disponible | +|-------|------|---------------------|------------------| +| **Apache NiFi** | Ingestion visuelle, routage, transformation | Drag-and-drop flows, gestion erreurs, replay | `apache-nifi` / `apache-nifi-workflow` | +| **Airbyte** | ELT open-source, 300+ connecteurs | Connecteurs FIWARE, MQTT, PostgreSQL, InfluxDB | `airbyte-data-ingestion` | +| **Kafka / Redpanda** | Event streaming, buffer de messages | Découplage producteurs/consommateurs IoT | `apache-kafka`, `redpanda` | +| **Flink** | Stream processing (real-time) | Windowing, agrégations temporelles capteurs | `apache-flink`, `apache-kafka-flink-streaming` | +| **dlt (data load tool)** | ETL Python simple | Léger, transformation inline, pas de lourdeur | `dlt` | + +### Architecture proposée (Ingestion) +``` +MQTT Brokers (EMQX, BunkerM) + ↓ +Apache NiFi (routage, nettoyage, validation) + ↓ +Kafka / Redpanda (buffer, replay) + ↓ +Context Brokers (Orion-LD, Stellio, FROST) + ↓ +Data Lake (MinIO) / Data Warehouse (ClickHouse) +``` + +## 2. Workflow Automation (Orchestration) + +### Objectif +Orchestrer les pipelines de données, les tâches de maintenance, et les synchronisations entre les différents composants. + +### Outils identifiés + +| Outil | Rôle | Avantage Smart City | Skill disponible | +|-------|------|---------------------|------------------| +| **Apache Airflow** | Orchestration DAGs, scheduling | Standard industrie, Python, monitoring | `apache-airflow` | +| **Kestra** | Event-driven orchestration | YAML-native, UI moderne, moins de code | `kestra` | +| **n8n** | Workflow automation no-code/low-code | Intégration rapide, Webhooks, API | `n8n` | +| **OpenFN** | DPG pour automation gouvernementale | Alignement DPI, services publics | `openfn` | +| **Dagster** | Modern orchestration, assets-focused | Lineage, testabilité, modern alt to Airflow | `dagster` | + +### Architecture proposée (Workflows) +``` +Triggers (Timer, Webhook, MQTT Event) + ↓ +Kestra / Airflow (DAG orchestration) + ├→ Data Ingestion (NiFi / Airbyte) + ├→ Context Broker Sync (Orion ↔ Stellio) + ├→ Data Quality Checks (Great Expectations) + ├→ Transformation (dbt) + └→ Notification (Telegram, Email) +``` + +## 3. Data Analytics & Transformation + +### Objectif +Transformer, nettoyer, et modéliser les données pour l'analyse (SQL, Python). + +### Outils identifiés + +| Outil | Rôle | Avantage Smart City | Skill disponible | +|-------|------|---------------------|------------------| +| **dbt (data build tool)** | SQL transformations, tests, documentation | Standard MDS, versioning, modularité | `dbt-core`, `dbt-transformation` | +| **Apache Spark** | Batch/Stream processing distribué | Gros volumes, ML préparation | `apache-spark` | +| **RisingWave** | Streaming database (PostgreSQL-compatible) | Requêtes SQL sur streams temps réel | `risingwave` | +| **Apache Druid** | Real-time OLAP analytics | Sub-second queries, séries temporelles | `apache-druid` | +| **ClickHouse** | Columnar OLAP database | Analytics rapide, compression, IoT | `clickhouse-analytics-db` | + +### Architecture proposée (Analytics) +``` +Raw Data (Kafka / Context Brokers) + ↓ +dbt (staging → intermediate → marts) + ↓ +Analytics DB (ClickHouse / Druid / RisingWave) + ↓ +Dashboards (Grafana / Superset) +``` + +## 4. Data Visualization & BI (Business Intelligence) + +### Objectif +Créer des tableaux de bord pour monitorer la qualité de l'air, le trafic, la météo, et l'état du jumeau numérique. + +### Outils identifiés + +| Outil | Rôle | Avantage Smart City | Skill disponible | +|-------|------|---------------------|------------------| +| **Grafana** | Metrics, monitoring, alerting | Déjà utilisé (digital-twin stack), séries temporelles | `grafana-superset-dashboards` | +| **Apache Superset** | BI moderne, SQL Lab, charts | Open-source, self-hosted, pas de licence | `superset`, `grafana-superset-dashboards` | +| **DataHub** | Data catalog, metadata management | Traçabilité données, lineage, découverte | `datahub`, `openmetadata` | +| **Great Expectations** | Data quality testing | Tests automatisés, profilage, alerting | `great-expectations-data-quality` | + +### Architecture proposée (BI) +``` +Analytics DB (ClickHouse / PostgreSQL + Timescale) + ↓ +Grafana (temps réel, alerting) + Superset (analyse ad-hoc) + ↓ +Data Catalog (DataHub) pour gouvernance +``` + +## 5. Data Storage (Stockage) + +### Outils identifiés + +| Outil | Type | Usage Smart City | +|-------|------|------------------| +| **MinIO** | S3-compatible object storage | Data Lake (raw, processed) | +| **PostgreSQL + PostGIS + TimescaleDB** | RDBMS + Spatial + Time-series | Stockage relationnel, géospatial, IoT | +| **CrateDB** | Distributed SQL (IoT/time-series) | Requêtes distribuées IoT | +| **Apache Iceberg / Delta Lake** | Open table formats | ACID transactions, time travel | +| **InfluxDB** | Time-series DB | Déjà utilisé dans le projet | + +## 6. Recommandation d'architecture MDS (Smart City Martinique) + +### Stack minimale (MVP) +``` +1. Ingestion → Apache NiFi (visual flows, MQTT → Context Brokers) +2. Orchestration → Kestra (YAML, event-driven, moins de code) +3. Transformation → dbt (SQL, versioning, tests) +4. Analytics DB → ClickHouse (rapide, colonnaire, IoT-friendly) +5. Visualization → Grafana (existant) + Apache Superset (BI) +6. Storage → MinIO (Data Lake) + PostgreSQL/TimescaleDB (relationnel) +7. Data Catalog → DataHub (métadonnées, lineage) +8. Quality → Great Expectations (tests qualité) +``` + +### Stack complète (Enterprise) +``` ++ Apache Kafka / Redpanda (Event streaming backbone) ++ Apache Flink (Real-time stream processing) ++ Apache Airflow (Complex DAG orchestration) ++ Apache Spark (Big data processing) ++ Apache Druid (Real-time OLAP) ++ OpenMetadata (Data governance) ++ MindsDB (ML in database) +``` + +## 7. Alignement avec l'existant (digitribe.fr) + +### Réutilisation +- **Traefik** : Reverse proxy pour tous les composants MDS (NiFi, Airflow, Superset, etc.) +- **Docker Compose** : Containerisation de la stack MDS +- **PostgreSQL** : Déjà utilisé (Orion-LD, Stellio, FROST, OpenRemote) → Ajouter TimescaleDB +- **InfluxDB** : Déjà utilisé → Compléter avec ClickHouse ou Druid +- **MQTT (EMQX)** : Source d'ingestion principale +- **Grafana** : Déjà utilisé → Étendre avec Superset + +### Intégration Context Brokers +``` +Context Brokers (Orion-LD, Stellio, FROST) + ↓ (HTTP API / NGSI-LD) +Airbyte (connector custom) ou NiFi (InvokeHTTP) + ↓ +Kafka (topic par type d'entité: airquality, traffic, weather) + ↓ +dbt (modélisation) + ↓ +ClickHouse (analytics) + ↓ +Grafana / Superset (dashboards) +``` + +## 8. Prochaines étapes + +1. **Choisir les composants MVP** : NiFi vs Airbyte, Kestra vs Airflow, ClickHouse vs Druid +2. **Déployer un POC** : Docker Compose avec 2-3 composants clés +3. **Créer les pipelines** : MQTT → Context Broker → Analytics DB → Dashboard +4. **Documentation** : Guides d'installation, configurations Traefik, tests + +## 9. Ressources + +- MDS Landscape : https://datatechnologylifecycle.com/modern-data-stack-landscape/ +- Airbyte Docs : https://docs.airbyte.com/ +- Apache NiFi Docs : https://nifi.apache.org/docs.html +- dbt Docs : https://docs.getdbt.com/ +- ClickHouse Docs : https://clickhouse.com/docs +- Grafana Stack : https://grafana.com/docs/ +- Apache Superset : https://superset.apache.org/docs/ + +--- +*Document créé le 2026-05-05 pour le projet Smart City Digital Twin (Martinique)*