Projet

Real Time Index Analyzer

Streaming
Analyse
Database

Explorer le projet sur GitHub

Pearls of silky soft white cotton, bubble up under vibrant lighting

Introduction

L’information en temps réel est la clé pour ne jamais être dépassé

Pour ses équipes opérant sur les marchés financiers, une société d’investissement a besoin de proposer une base de données qui stocke des informations financières sur les indices boursiers des sociétés cotées au NASDAQ. En particulier, elle souhaite pouvoir proposer à ces équipes des calculs agrégés sur les indices du NASDAQ, et en utilisant des fenêtres temporelles. En tant que Data Engineer, elle vous demande de construire un job d’agrégation de données à partir des valeurs stockées en temps réel sur un cluster Kafka. Le job doit pouvoir être exécuté en continu sur un serveur et doit être en mesure d’alimenter une base PostgreSQL où les valeurs seront mises à jour en temps réel.

Le cluster Kafka est déjà en place, et celui-ci contient un topic stock-data où, à chaque seconde, l’information de clôture d’un symbole (ou tracker) est envoyé dessus par un programme tiers. Les données stockées sur ce topic sont disponibles au format JSON

  • Close correspond à la valeur de fermeture brute (celle qui sera utilisée par défaut).
  • Adj Close correspond à la valeur de fermeture en ayant pris en compte ajusté selon les arbitrages opérés sur cet indice (dividendes et stock-options).
  • Datetime correspond à la fin de la fenêtre temporelle à partir de laquelle est calculée la valeur de fermeture.
  • Symbol correspond au symbole du tracker.
  • Volume correspond au volume d’échange réalisé sur ce tracker.

Contraintes

L’entreprise n’oblige aucun framework à utiliser pour effectuer les calculs. Néanmoins, il est conseillé d’utiliser Kafka Streams, Spark Structure Streaming ou Apache Flink pour faciliter les calculs d’agrégations et les intégrations avec PostgreSQL.

Tables SQL

La compagnie demande à ce que le format en sortie du job respecte le schéma utilisé dans la table PostgreSQL. Pour cela, elle fournit le code SQL de création de la table tickers dans la base de données stocks.

La table stocke des informations agrégées sur des fenêtres de 1 minute et de 5 minutes. Les informations agrégées demandées sont les suivantes :

  • low : la valeur minimale atteinte sur la fenêtre temporelle.
  • high : la valeur maximale atteinte sur la fenêtre temporelle.
  • avg : la valeur moyenne atteinte sur la fenêtre temporelle.
  • diff : l’écart maximal entre la plus petite et la plus grande valeur de clôture sur la fenêtre temporelle.
  • rate : le rendement maximal théorique possible sur la fenêtre temporelle.