Analytique Temps Réel : Moteurs, Architectures & Compromis
#analytics#real-time#streaming#architecture#data-engineering
L'analytique temps réel signifie différentes choses selon les équipes. Pour certains, ce sont des dashboards sub-seconde ; pour d'autres, de la détection d'anomalies sur un pipeline streaming. L'essentiel est de faire correspondre vos exigences de latence au bon moteur et au bon pattern d'architecture, sans sur-ingénierie.
Taxonomie des Niveaux de Latence
| Niveau | Latence | Cas d'Usage | Moteur Typique | Fraîcheur |
|---|---|---|---|---|
| Temps réel dur | < 100ms | Détection de fraude, enchères pub | Custom (C++/Rust), Flink | Événement |
| Temps réel souple | 100ms - 2s | Dashboards live, monitoring | ClickHouse, Druid, Pinot | Secondes |
| Quasi temps réel | 2s - 60s | Reporting opérationnel | Vues matérialisées, Rockset | Secondes à minutes |
| Micro-batch | 1 - 15 min | Dashboards KPI, alerting | Spark Structured Streaming | Minutes |
| Batch | 15 min - 24h | Rapports quotidiens, entraînement ML | Spark, dbt, BigQuery | Heures |
La plupart des équipes surévaluent leurs besoins en latence. Si votre dashboard se rafraîchit toutes les 30 secondes, vous n'avez pas besoin d'un moteur sub-100ms.
Comparaison des Moteurs OLAP
| Caractéristique | ClickHouse | Apache Druid | Apache Pinot | DuckDB |
|---|---|---|---|---|
| Architecture | MPP shared-nothing | Pre-aggregation + segments | Segments + table temps réel | Embarqué mono-nœud |
| Latence requête (p99) | 50ms - 2s | 200ms - 5s | 100ms - 3s | 10ms - 30s (local) |
| Concurrence | Élevée (100s QPS) | Élevée (100s QPS) | Très élevée (1000s QPS) | Faible |
| Support SQL | SQL complet | Druid SQL | SQL (multi-stage) | SQL complet |
| Jointures | Fortes (versions récentes) | Limitées | Limitées | Fortes |
| Idéal pour | OLAP général, haut débit | Séries temporelles | Analytique user-facing à l'échelle | Analytique locale, prototypage |
Pattern Kappa (Streaming-First)
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Sources │────▶│ Broker │────▶│ Traitement │────▶│ Moteur │
│ Events │ │ (Kafka) │ │ Stream │ │ OLAP │
│ │ │ │ │ (Flink) │ │ (ClickHouse) │
└──────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘
│
┌──────▼───────┐
│ Dashboard │
│ / API │
└──────────────┘
Pré-Agrégation vs Calcul à la Volée
| Facteur | Pré-Agrégation | À la Volée | Hybride |
|---|---|---|---|
| Latence requête | Très faible (pré-calculé) | Moyenne à élevée | Faible |
| Fraîcheur des données | Dépend du cycle de rafraîchissement | Temps réel | Mixte |
| Coût stockage | Plus élevé (cubes matérialisés) | Plus faible | Moyen |
| Flexibilité requêtes | Limitée aux dimensions prédéfinies | Ad-hoc illimité | Ad-hoc + défauts rapides |
| Idéal pour | KPIs connus, dashboards direction | Exploration, drill-down | Production + analyse |
Choix d'Architecture
Quel est votre besoin de concurrence ?
├── < 10 utilisateurs simultanés
│ ├── Données tiennent sur une machine ? → DuckDB / MotherDuck
│ └── Distribution nécessaire ? → ClickHouse (déploiement simple)
│
├── 10 - 100 utilisateurs simultanés
│ ├── Principalement séries temporelles ? → Apache Druid
│ └── OLAP général ? → ClickHouse Cloud
│
└── 100+ simultanés (user-facing)
├── p99 sub-seconde requis ? → Apache Pinot
└── Requêtes semi-structurées ? → ClickHouse ou Rockset
Ressources
- Documentation ClickHouse
- Apache Pinot — OLAP Temps Reel
- Dunith Dhanushka — Architecture Kappa vs Lambda
- Comparaison Druid vs ClickHouse vs Pinot — StarTree
:::