Partager via


Traitement par lots et streaming des données dans Azure Databricks

Cet article décrit les principales différences entre le traitement par lots et le streaming, deux sémantiques de traitement des données différentes utilisées pour les charges de travail d’ingénierie des données, notamment l’ingestion, la transformation et le traitement en temps réel.

La diffusion en continu est généralement associée à une faible latence et un traitement continu à partir de bus de messages, tels qu’Apache Kafka.

Toutefois, dans Azure Databricks, il a une définition plus étendue. Le moteur sous-jacent des pipelines déclaratifs Lakeflow Spark (Apache Spark et Structured Streaming) possède une architecture unifiée pour le traitement des lots et en flux continu :

  • Le moteur peut traiter des sources telles que le stockage d’objets cloud et Delta Lake comme des sources de streaming pour un traitement incrémentiel efficace.
  • Le traitement de streaming peut être exécuté de manière déclenchée et continue, ce qui vous donne la possibilité de contrôler les compromis entre coûts et performances pour vos charges de travail de diffusion en continu.

Vous trouverez ci-dessous les différences sémantiques fondamentales qui distinguent les lots et la diffusion en continu, y compris leurs avantages et inconvénients, et les considérations à prendre en compte pour les choisir pour vos charges de travail.

Sémantique du traitement par lot

Avec le traitement par lots, le moteur ne suit pas les données déjà traitées dans la source. Toutes les données actuellement disponibles dans la source sont traitées au moment du traitement. Dans la pratique, une source de données par lots est généralement partitionnée logiquement, par exemple, par jour ou région, pour limiter le retraitement des données.

Par exemple, le calcul du prix moyen des ventes d’articles, agrégé à une granularité horaire, pour un événement de vente exécuté par une société de commerce électronique peut être planifié comme traitement par lots pour calculer le prix moyen des ventes toutes les heures. Avec le traitement en lot, les données des heures précédentes sont traitées à nouveau une fois par heure, et les résultats calculés précédemment sont écrasés afin de refléter les derniers résultats.

Traitement par lots

Sémantique du streaming

Avec le traitement en streaming, le moteur effectue le suivi des données en cours de traitement et traite uniquement les nouvelles données dans les exécutions suivantes. Dans l’exemple ci-dessus, vous pouvez planifier le traitement de streaming au lieu du traitement par lots pour calculer le prix de vente moyen toutes les heures. Avec la diffusion en continu, seules les nouvelles données ajoutées à la source depuis la dernière exécution sont traitées. Les résultats nouvellement calculés doivent être ajoutés aux résultats calculés précédemment pour vérifier les résultats complets.

Traitement de streaming

Traitement par lots et streaming de données

Dans l’exemple ci-dessus, la diffusion en continu est préférable au traitement par lots, car elle ne traite pas les mêmes données traitées dans les exécutions précédentes. Toutefois, le traitement de streaming devient plus complexe avec des scénarios tels que les données hors séquence et de retard d'arrivée dans la source.

Voici un exemple de données d’arrivée tardive si certaines données de ventes de la première heure n’arrivent pas à la source jusqu’à la deuxième heure :

  • Dans le traitement par lots, les données d’arrivée tardives de la première heure seront traitées avec les données de la deuxième heure et les données existantes à partir de la première heure. Les résultats précédents de la première heure seront remplacés et corrigés avec les données d’arrivée tardive.
  • Dans le traitement en streaming, les données arrivant à la fin de la première heure seront traitées sans aucune autre donnée de première heure qui a été traitée. La logique de traitement doit stocker les informations de somme et de comptage des calculs moyens de la première heure pour mettre à jour correctement les résultats précédents.

Ces complexités de streaming sont généralement introduites lorsque le traitement est avec gestion d'état, comme les jointures, les agrégations et les déduplications.

Pour le traitement en flux continu sans état, tel que l’ajout de nouvelles données à partir de la source, la gestion des données hors ordre et des données arrivant en retard est moins complexe, car ces dernières peuvent être ajoutées aux résultats précédents au fur et à mesure que les données arrivent dans la source.

Le tableau ci-dessous présente les avantages et inconvénients du traitement par lots et de diffusion en continu et les différentes fonctionnalités de produit qui prennent en charge ces deux sémantiques de traitement dans Databricks Lakeflow.

Sémantique de traitement Avantages Inconvénients Produits d’ingénierie des données
Lot
  • La logique de traitement est simple.
  • Les résultats sont toujours précis et reflètent toutes les données disponibles dans la source.
  • Ce n’est pas aussi efficace ; les données seront traitées dans une partition de traitement par lots particulière.
  • Plus lent, peut gérer les exigences de latence d’heures à minutes, mais pas de secondes ou de millisecondes.
Diffusion en continu
  • Efficace, seules les nouvelles données sont traitées.
  • Plus rapide, peut gérer les exigences de latence des heures, des minutes, des secondes et des millisecondes.
  • La logique de traitement peut être complexe, en particulier pour le traitement avec état, comme les jointures, les agrégations, les déduplications, etc.
  • Les résultats ne peuvent pas toujours être précis, compte tenu des données hors commande et d’arrivée tardive.

Recommandations

Le tableau ci-dessous présente la sémantique de traitement recommandée en fonction des caractéristiques des charges de travail de traitement des données à chaque couche de l’architecture de médaillon.

Couche de médaillon Caractéristiques de la charge de travail Recommandation
Bronze
  • Charges de travail d’ingestion.
  • En règle générale, il implique peu ou pas de traitement, ou un traitement sans état pour l'ajout incrémentiel à partir de sources de données.
  • La taille des données est généralement plus grande.
  • Le traitement de streaming est généralement un meilleur choix, étant donné que les utilisateurs peuvent tirer parti des avantages de la diffusion en continu, mais ne sont pas exposés à la complexité du traitement de streaming avec état.
Argent
  • Charges de travail de transformation.
  • Implique généralement à la fois le traitement sans état, comme le filtrage et le traitement avec état, tels que les jointures, les agrégations et les déduplications.
  • Utilisez le traitement par lots (avec actualisation incrémentielle dans les vues matérialisées) pour éviter les complexités du traitement de flux avec état.
  • Utilisez le traitement de streaming comme option pour les cas d’utilisation où l’efficacité et la latence sont beaucoup plus importantes que la précision des résultats. Gardez à l’esprit les complexités introduites par le traitement de flux à état.
Or
  • Tâches d'agrégation du dernier kilomètre.
  • Généralement, cela implique un traitement d'état comme des jointures et des agrégations.
  • La taille des données est généralement plus petite.
  • Utilisez le traitement par lots (avec actualisation incrémentielle dans les vues matérialisées) pour éviter les complexités du traitement de flux avec état.