Comment Carrefour passe au temps réel avec Kafka Streams
Ces deux dernières années, l’enseigne de grande distribution a très largement modernisé son infrastructure Data. Outre les solutions Google particulièrement répandues dans le SI de Carrefour, une brique open source joue un rôle clé dans la performance de cette architecture : Kafka Streams.
En 2018, Carrefour et Google annonçaient en grande pompe un vaste partenariat stratégique. Outre la migration de la bureautique du groupe vers G Suite (désormais nommée Google Workspace), une expérience d’achat revisitée avec l’assistant Google, ou l’enceinte connectée Google Home, un vaste pan de cet accord portait sur la migration de l’IT vers le Cloud GCP. En filigrane, il s’agissait de donner un coup de fouet à la stratégie Data de Carrefour. Un Hub Digital a été ouvert non loin de la Station-F à Paris et l’infrastructure de données a été profondément modernisée. Ce fut notamment le cas de Phenix, le Data Lake de Carrefour.
Un pilier de la stratégie numérique de Carrefour
En 2016, Carrefour basculait officiellement dans une approche « Data Centric » avec la mise en production de son Data Lake Phenix. À l’étude depuis 2014, celui-ci s’appuyait alors sur les briques « Big Data » les plus en vogue du moment. Carrefour avait déployé une distribution Cloudera d’Hadoop et différentes composantes dont Cassandra, Elastic Search, Spark et Kafka. Ce sont pas moins de 25 solutions différentes qui constituaient le socle technologique de cette stratégie Data. Cette plateforme a été très largement modernisée dans le cadre de l’accord avec Google. L’architecture Hadoop a fait place à une pile technologique moderne basée sur GKE, l’offre Kubernetes managée de Google Cloud. Le Data Lake s’appuie sur Google BigQuery et Google Cloud Storage.
« Une dizaine d’équipes de Data Engineers travaillent sur ce Data Lake », explique Jérémy Sebayhi, Data Engineer chez Carrefour. « Ces personnes manipulent des données très variées, dont les stocks, les commandes clients, les prix, les produits. ».
En matière de volumétries, la gestion des stocks représente à elle seule environ 70 Go de données échangées chaque jour auxquels il faut ajouter 15 Go par jour de données relatives aux commandes. Le groupe administre 1,5 milliard de prix différents. Cela occupe un espace de stockage de 1,7 To. Les informations des 1,5 million de produits enregistrés représentent un volume compris entre 7 Go et 15 To pour les ventes.
Phenix a connu une évolution majeure en 2020
Il faut bien évidemment organiser toute une gymnastique pour orchestrer ces échanges de données. Les traitements batch étaient principalement réalisés via des jobs Apache Spark sur Hadoop, tandis que les flux temps réel dépendaient de jobs Spark Streaming.
« Jusqu’alors, en matière de streaming, notre processus consistait à recevoir un message, à le normaliser, éventuellement à l’enrichir avec des données issues d’autres sources (différentes bases de données) et à le stocker en continu dans une base de données », relate Jérémy Sebayhi. « Nous exposions cette donnée via une API pour que les autres services de Carrefour puissent la requêter. »
Depuis deux ans, le Data Lake Carrefour bénéficie des technologies plus récentes et le volet échange de données a, lui aussi, été profondément rénové. Les jobs Spark sont déployés sur Dataproc, l’offre managée de Google Cloud. Pour le streaming de données en quasi-temps réel, les Data Engineers mettent désormais en œuvre Kafka Streams sur Kubernetes.
François Sarradin, CTO du cabinet de conseil Univalence et Tech Lead chez Carrefour sur le calcul de stock et les prévisions de stock résume le rôle joué par Kafka Streams dans cette architecture. « Kafka Streams est un framework destiné à créer des applications réactives avec une vision Clé/Valeur sur les données », précise-t-il. « Cette solution s’appuie sur deux technologies : Apache Kafka et RockDB ».
François SarradinCTO, Univalence et Tech Lead, Carrefour
Kafka Streams est utilisé pour faire transiter les données entre différents services. « Cela permet d’avoir un ensemble scalable, des données fiabilisées sur un cluster, de mettre en place des calculs distribués », indique le Lead Tech. « L’autre technologie de Kafka Streams est transparente. RocksDB, une base de données colocalisée dans le service, présente l’avantage de ne pas entraîner d’échanges réseau : tout est traité en local sur la machine. »
Sur Kafka Streams, les flux de données sont définis par le développeur en langage en DSL. Ce langage est déclaratif, une approche jugée très efficace par l’expert. Il souligne aussi la richesse de l’écosystème Kafka. D’abord, François Sarradin évoque la brique d’intégration de données Kafka Connect et le catalogue de connecteurs accessibles sur le site de Confluent.
Quant à l’outil Schema Registry, il permet de créer les schémas de données (Topology dans le jargon Kafka Streams). Comme son nom l’indique, il assure également un versioning de ces structures de données. Ensuite, Kafka Streams Test est un framework conçu pour mener les tests d’intégration. Sur le plan de l’observabilité, les équipes Carrefour ont fait le choix d’AKHQ tant du côté des développements que des Ops, mais aussi pour l’assurance qualité (QA). « Nous récupérons les métriques au travers de la solution de monitoring de microservices Prometheus et on les expose dans des tableaux de bord Grafana pour superviser le fonctionnement de Kafka Streams », précise François Sarradin.
Une adoption « collaborative » de la solution
Les Data Engineer ont découvert par eux-mêmes Kafka Streams. « Nous sommes littéralement partis de rien ! » se rappelle François Sarradin. « Mis à part la documentation disponible sur le site de l’éditeur Confluent et de Kafka, nous n’avions que peu d’expérience sur Kafka Streams. Néanmoins, c’est une solution à laquelle on s’accroche assez vite, car on retrouve les mêmes opérations que sur Apache Spark. »
La méthode d’adoption de la solution par les équipes a été pour le moins originale. Il a été décidé de démarrer avec Kafka Streams simultanément sur plusieurs nouveaux projets impliquant le Data Lake Phenix. « Quatre équipes ont appréhendé en parallèle le framework et ont développé leur propre socle technique », indique le Tech Lead. « Certains l’ont fait pour le rattacher à un site web, d’autres pour avoir des points d’exposition pour le monitoring, etc. », évoque-t-il.
François SarradinCTO, Univalence et Tech Lead, Carrefour
« Des retours d’expérience ont été organisés entre ces équipes et de bonnes pratiques ont ainsi pu émerger ». Après cet apprentissage sur le tas, les ingénieurs ont décidé d’organiser la connaissance à travers une ligue. Cette communauté a posé une base commune pour l’ensemble des nouveaux projets. « Il s’agit d’une approche à la fois pragmatique et vertueuse : nous sommes partis d’expériences locales pour aller vers un bien commun », ajoute François Sarradin.
Pour les équipes de Carrefour, ce choix de Kafka Streams sur le Data Lake est incontestablement un succès. Les ingénieurs saluent la simplicité d’adoption.
Il s’agit toutefois d’un mode d’intégration de données très spécifique auquel il faut se plier, estime François Sarradin.
« Lorsque nous avons découvert Kafka Streams, nous pensions pouvoir l’utiliser pour tous les besoins », affirme-t-il. « Bien que séduisante, cette approche s’est avérée peu adaptée dans certains cas : le mode de raisonnement est différent, et les cinématiques de déploiement ne sont pas adaptées à tous les usages. »
De même, si l’adoption de la solution fut assez simple chez Carrefour, la mise en production et la montée en puissance du framework jusqu’à ses limites imposent de se documenter sérieusement et de se faire accompagner, prévient l’ingénieur.
Témoignage recueilli lors de la conférence Devoxx France 2022.