Aller au contenu principal

Limitations du mode temps réel

Cette page décrit les limitations connues pour le mode temps réel dans Structured Streaming.

Limitations de la source​

Pour Kinesis, Databricks recommande le mode Enhanced Fan-Out (EFO) pour une latence minimale. De plus, des repartitionnements fréquents peuvent avoir un impact négatif sur la latence.

Limitations d'Union​

L'opérateur Union présente certaines limitations :

  • L'auto-union n'est pas prise en charge :

    • Pour Kafka, vous ne pouvez pas utiliser le même objet DataFrame source et unir les DataFrames dérivés de celui-ci. Comme solution de contournement, utilisez différents DataFrames qui lisent à partir de la même source.
    • Pour Kinesis, vous ne pouvez pas unir les DataFrames dérivés de la même source Kinesis avec la même configuration. Comme solution de contournement, au lieu d'utiliser différents DataFrames, vous pouvez attribuer une option consumerName différente à chaque DataFrame.
  • Les opérateurs avec état (par exemple, aggregate, deduplicate, transformWithState) ne peuvent pas être définis avant l'Union.

  • L'union avec les sources batch n'est pas prise en charge.

mapPartitions limitation​

Le mode temps réel ne prend pas en charge mapPartitions dans Scala ou les APIs Python similaires (mapInPandas, mapInArrow). Ils utilisent un itérateur de la partition d'entrée entière et produisent un itérateur de la sortie entière, qui, s'il n'est pas produit avec empressement, peut bloquer la sortie et augmenter la latence. Leurs sémantiques ne prennent pas non plus très bien en charge la propagation des watermarks.

Utilisez des UDF scalaires combinées à Transformer des types de données complexes ou à filter pour obtenir des fonctionnalités similaires.

transformWithStateInPandas non pris en charge​

L'opérateur transformWithStateInPandas n'est pas pris en charge en mode temps réel. Si vous avez besoin d'un traitement avec état personnalisé en Python en mode temps réel, utilisez l'API transformWithState basée sur les lignes à la place. L'API basée sur les lignes offre les mêmes capacités de traitement avec état en utilisant des objets Row plutôt que des DataFrames pandas.

Consultez transformWithState en mode temps réel pour plus de détails sur le comportement de transformWithState en mode temps réel, et Exemples de mode temps réel pour un exemple Python fonctionnel utilisant l'API basée sur les lignes.