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