J'ai eu l'occasion de mettre en œuvre :
- 4 solutions techniques différentes de data streaming (Apache Nifi, Apache Flink, Apache Spark Streaming et Apache Kafka Streams)
- 3 solutions de stockage de forte volumétrie (Apache Cassandra, TimescaleDB et Oracle DB)
- sur 3 projets différents de télécollecte IoT et de traitements de données Big Data.
Cela représente 8 ans de recul sur le traitement de données de forte volumétrie. Cette expérience s'est construite "grâce" à des dizaines de problèmes de performances, de cohérence des données, d'engorgement de nos systèmes distribués... J'ai donc de belles histoires techniques à vous raconter sur le pire et le meilleur de ces différentes solutions. Vous voulez savoir quelle est la meilleure et celle que je vous recommande ? Je suis sûr que vous connaissez la réponse courte "ça dépend". Pour la réponse longue, consultez nous...
Edgar Alan Poe est un romancier et un poète du 19ème siècle.
Inventeur du roman policier, c’est un style qui met en avant la réflexion, la recherche de pistes souvent fausses mais parfois bonne heureusement, c’est ce que nous vivons au quotidien sur nos projets et que nous voulons vous raconter maintenant
Il est connu pour la théorie de l’effet qui vise à susciter chez le lecteur une émotion particulière. Cela nécessite un texte ni trop court, ni trop long, chaque syllabe sera choisi consciemment pour susciter l’effet choisi. C’est ce que nous allons essayer de faire pour vous tenir en haleine à travers 2 histoires issues de notre expérience, qui vont parler de traitement de données en temps réel sur des données de forte volumétrie, ce que l’on peut résumer en 2 mots: data streaming.
Enfin, dans son recueil de nouvelles « Histoires extraordinaires », il cite la phrase suivante : « toutes choses sont bonnes ou mauvaises par comparaison » et c’est un gros spoil de notre conclusion. Mais j’ose espérer que si vous êtes venus là, c’est que vous vouliez connaître les péripéties et avoir un peu plus de détails sur les solutions expérimentées.
Mais commençons maintenant nos histoires. Nous allons repartir en arrière, et s’intéresser à la genèse de nos 2 projets, revenir au besoin qui a nécessité la mise en œuvre de data streaming.
Histoire commencée il y a 4 ans, grand acteur du transport d’énergie avec qui nous avons mis en place la telérelève de la consommation électrique des grands industriels
Ouverture du marché ferroviaire à la concurrence, auparavant 1 entreprise ferroviaire et 1 gestionnaire d’infrastructure qui injecte l’électricité
Nécessité de savoir quelle entreprise ferroviaire a consommé quoi auprès de quel fournisseur d’énergie
Photo by <a href="https://unsplash.com/es/@sm83?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Peter Scherbatykh</a> on <a href="https://unsplash.com/s/photos/electric-train?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
data meter half by Juicy Fish from <a href="https://thenounproject.com/browse/icons/term/data-meter-half/" target="_blank" title="data meter half Icons">Noun Project</a>
Misirlou from Noun Project
https://www.le-tout-lyon.fr/le-reseau-de-chauffage-urbain-de-lyon-duchere-etendu-a-ecully-et-champagne-au-mont-d-or-13921.html
smart building by LINECTOR from <a href="https://thenounproject.com/browse/icons/term/smart-building/" target="_blank" title="smart building Icons">Noun Project</a>
Paserelle IoT Objenious Bouygues Telecom
3 solutions de data streaming ont été mise en œuvre sur les 2 projets :
Apache Nifi
Apache Flink
Kafka Stream
Projet de premier niveau de la fondation apache en développement actif
Exactly Once 0.11 dans Kafka (https://www.confluent.io/fr-fr/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/)
Numéro de séquence affecté à chaque lot de message pour déduplication
Transaction atomique
Définition: en mathématique ou en informatique, l’idempotence signifie qu’une opération a le même effet qu’on l’applique une ou plusieurs fois.
Attention à la mémoire occupée par traitements fenêtrés
Juste milieu entre retard accepté et inconsistance
S’autoriser à refuser une donnée en retard
Attention au partitionnement (concurrence et ordre)
Rejeu avec recalcul = long et coûteux
Minimiser les périodes de temps recalculables
Challenger le besoin fonctionnel
Opération asynchrone moins prioritaire
(poison pill, relance, rejeu…)
https://www.confluent.io/fr-fr/kafka-summit-san-francisco-2019/streaming-apps-and-poison-pills-handle-the-unexpected-with-kafka-streams/
https://www.youtube.com/watch?v=DTEext4DUN0 - Streaming Apps Poison Pill: Comment Kafka-Streams compte faire passer la pilule (Loïc DIVAD)
4 stratégies:
Log, crash and restart
Flink : restart strategy
Nifi : indépendance des composants, erreurs à brancher obligatoirement
Skip corrupted
KafkaStreamDeserializationHandler
Sentinel value pattern
Définition d’un élément <null> qui porte l’erreur
Kafka Stream: extension d’un deserializer
Dead letter queue pattern
Topic qui contient les messages corrompus
A aborder : Schema Registry (Nifi, Kafka)
Nifi
Paradigme Zero master clustering
Stockage distribué du contenu traité et des métadonnées
Election de coordinateur et nœud primaire via consensus avec Zk
Flink
Election du job manager leader via consensus avec Zookeeper
Stockage des résultats de jobs et des données de tolérance à la panne sur filesystem partagé
Kafka Streams
Kafka Stream est une librairie
Stream processors indépendants
Distribution de charge et résilience via fonctionnalités client Kafka
Stockages sur cluster Kafka
Flink (https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/ha/overview/) : The JobManager coordinates every Flink deployment. It is responsible for both scheduling and resource management.
Nifi (https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.0.2/bk_administration/content/clustering.html)
Pour conclure:
Décompte ferroviaire : priorité au time to market (facilité d’apprenstissage, testabilité, CI / CD), à l’implémentation de plusieurs normes de communication et donc différents formats d’échange
CRT : priorité à la gestion de volumétrie (scalabilité)
Autres critères : devops,
Nifi 16
Flink 15
Kafka 15