Présentation et démo d'une architecture de données streaming-first comparée aux architectures traditionnelles à base d'échanges de fichiers quotidiens.
Démontrer les avantages d'une architecture streaming-first pour :
- Réduire la latence des données (de J+1 à temps réel)
- Améliorer la qualité et la fraîcheur des données
- Éliminer les désynchronisations entre backends
- Optimiser l'expérience client et les opérations métier
CSV Files ──→ [CSV-to-Kafka Producer] ──┐
├──→ Kafka (Avro) ──→ ClickHouse ──→ Superset
Random Data → [Streaming Producer] ─────┘ ↓
Schema Registry
- Apache Kafka : Broker de messages distribué
- Schema Registry : Gestion des schémas Avro (format obligatoire)
- Producteurs Avro :
- CSV-to-Kafka Producer : Lecture de fichiers et envoi en Avro
- Streaming Producer : Génération temps réel et envoi en Avro
- Apache Flink : Stream processing (transformations, jointures, agrégations)
- ClickHouse : Data warehouse OLAP temps réel (lecture Avro native)
- Apache Superset : Business Intelligence et analytics
- Kafka UI : Interface de monitoring Kafka
Toutes les données dans Kafka sont obligatoirement en format Avro avec enregistrement des schémas dans Schema Registry. ClickHouse est configuré pour lire directement en AvroConfluent.
📖 Documentation complète : Voir AVRO_PRODUCERS.md
- Docker & Docker Compose
- 8GB RAM minimum
- Ports disponibles : 8080, 8081, 8083, 8088, 9092, 3000, 2181
# Démarrer tous les services
docker-compose up -d
# Vérifier que tous les services sont démarrés
docker-compose ps
# Suivre les logs
docker-compose logs -f# Exécuter le script de vérification
./verify-avro.shCe script vérifie :
- ✅ Que Schema Registry enregistre les schémas Avro
- ✅ Que les producteurs envoient en Avro
- ✅ Que ClickHouse lit en format AvroConfluent
- ✅ Que les données arrivent correctement
# Accéder au conteneur Superset
docker exec -it superset bash
# Exécuter le script d'initialisation
/app/docker/init-superset.sh
# Sortir du conteneur
exit- Présentation Slidev : http://localhost:3030
- Superset (BI) : http://localhost:8088 (admin/admin)
- Kafka UI : http://localhost:8080
- Flink Dashboard : http://localhost:8088
- ClickHouse : http://localhost:8123
- Se connecter à Superset (admin/admin)
- Settings → Database Connections → + Database
- Sélectionner "ClickHouse"
- Configuration :
Host: clickhouse Port: 8123 Database: streaming_demo Username: admin Password: admin
Datasets disponibles :
bets: Paris en temps réelcustomers: Données clientsevents: Événements sportifsbets_by_sport_mv: Agrégations par sport (vue matérialisée)top_customers_mv: Top clients (vue matérialisée)event_stats_mv: Statistiques par événement
-- Volume de paris par sport (dernière heure)
SELECT
sport,
count() as bet_count,
sum(amount) as total_amount,
avg(odds) as avg_odds
FROM bets
WHERE timestamp >= now() - INTERVAL 1 HOUR
GROUP BY sport
ORDER BY total_amount DESC;
-- Top 10 clients par montant parié
SELECT
customer_id,
count() as bet_count,
sum(amount) as total_wagered,
avg(amount) as avg_bet
FROM bets
GROUP BY customer_id
ORDER BY total_wagered DESC
LIMIT 10;
-- Évolution des paris par fenêtre de 5 minutes
SELECT
toStartOfFiveMinute(timestamp) as window,
count() as bets,
sum(amount) as volume
FROM bets
WHERE timestamp >= now() - INTERVAL 1 HOUR
GROUP BY window
ORDER BY window;Le générateur de fichiers simule :
- Fichiers CSV de paris : Toutes les 15 secondes
- Fichiers JSON de clients : Toutes les 25 secondes
- Fichiers JSON de cotes : Toutes les 35 secondes
- Ingestion : Kafka Connect surveille
/data/inputet ingère les fichiers - Streaming : Les données sont publiées dans Kafka
- Processing : Flink transforme et enrichit les données
- Storage : ClickHouse ingère en streaming via Kafka Engine
- Analytics : Superset permet l'exploration OLAP
# Installer les dépendances
npm install
# Démarrer Slidev
npm run dev
# Build pour production
npm run buildLa présentation contient une slide interactive qui interroge ClickHouse en temps réel !
Juste après la slide "Démo Time!", une slide affiche :
- 📊 KPIs temps réel : nombre de paris, montants, moyennes
- 🏆 Top 5 sports avec graphiques animés
- 📈 Statistiques live : taux d'acceptation, débit, derniers paris
- 🔄 Rafraîchissement auto : données mises à jour toutes les 3 secondes
- ✨ Animations : flash sur nouveaux paris, transitions fluides
Tester le composant :
# 1. Démarrer l'architecture
docker-compose up -d
# 2. Attendre 30-60 secondes que les données arrivent
# 3. Tester l'API ClickHouse
./test-clickhouse-api.sh
# 4. Lancer Slidev
npm run dev
# 5. Naviguer vers la slide après "Démo Time!"📖 Documentation complète : components/README.md
- Introduction : Contexte et objectifs
- Architectures batch : Description et problématiques
- Problématiques métier : Impacts concrets
- Streaming-First : Principes et architecture
- Comparaison : Tableau batch vs streaming
- Démo : Architecture type et mise en pratique
- ✨ Stats Temps Réel : Visualisation live depuis ClickHouse (nouveau !)
# Arrêter tous les services
docker-compose down
# Arrêter et supprimer les volumes (reset complet)
docker-compose down -v
# Redémarrer un service spécifique
docker-compose restart kafka
# Voir les logs d'un service
docker-compose logs -f file-generator# Lister les topics
docker exec kafka kafka-topics --bootstrap-server localhost:9092 --list
# Consommer un topic
docker exec kafka kafka-console-consumer \
--bootstrap-server localhost:9092 \
--topic bets \
--from-beginning
# Créer un topic manuellement
docker exec kafka kafka-topics \
--bootstrap-server localhost:9092 \
--create \
--topic test \
--partitions 3 \
--replication-factor 1# Se connecter au client ClickHouse
docker exec -it clickhouse clickhouse-client
# Exécuter une requête
docker exec clickhouse clickhouse-client --query "SELECT count() FROM streaming_demo.bets"- Batch traditionnel : 24h - 7 jours
- Streaming-First : < 1 seconde
- Kafka : 1M+ messages/sec
- Flink : 100K+ events/sec/core
- ClickHouse : 1M+ rows/sec ingestion
# Vérifier les logs
docker-compose logs
# Vérifier l'espace disque
df -h
# Vérifier la mémoire
docker stats# Vérifier les permissions
ls -la data/input/
# Vérifier le montage du volume
docker exec kafka-connect ls -la /data/input/# Vérifier la table Kafka
docker exec clickhouse clickhouse-client --query "SELECT * FROM streaming_demo.bets_kafka_queue LIMIT 10"
# Vérifier les erreurs
docker-compose logs clickhouse- Apache Kafka Documentation
- Apache Flink Documentation
- ClickHouse Documentation
- Apache Superset Documentation
- Slidev Documentation
Cette démo est conçue pour un techtalk. N'hésitez pas à l'adapter à vos besoins.
MIT