Compartir a través de


Configuración de intervalos de desencadenador de Structured Streaming

En este artículo se explica cómo configurar intervalos de desencadenador para Structured Streaming en Azure Databricks.

Apache Spark Structured Streaming procesa los datos de forma incremental. Los intervalos de desencadenador controlan la frecuencia con la que Structured Streaming comprueba los nuevos datos. Puede configurar intervalos de desencadenador para el procesamiento casi en tiempo real, para las actualizaciones programadas de la base de datos o procesar por lotes todos los datos nuevos durante un día o una semana.

Dado que ¿Qué es Auto Loader? usa Structured Streaming para cargar datos, comprender cómo funcionan los desencadenadores proporciona la mayor flexibilidad para controlar los costos al ingerir datos con la frecuencia deseada.

Visión general de los modos de activación

En la tabla siguiente se resumen los modos de desencadenador disponibles en Structured Streaming:

Modo de desencadenador Ejemplo de sintaxis (Python) Mejor para
Sin especificar (valor predeterminado) N/A Streaming de uso general con latencia de 3 a 5 segundos. Equivalente al desencadenador "processingTime" con intervalos de 0 ms. El procesamiento de flujos se ejecuta continuamente siempre que lleguen nuevos datos.
Tiempo de procesamiento .trigger(processingTime='10 seconds') Equilibrio del costo y el rendimiento. Reduce la sobrecarga evitando que el sistema compruebe los datos con demasiada frecuencia.
Disponible ahora .trigger(availableNow=True) Procesamiento por lotes incremental programado. Procesa tantos datos como estén disponibles en el momento en que se desencadena el trabajo de streaming.
Modo en tiempo real .trigger(realTime='5 minutes') Cargas operativas de latencia ultrabaja que requieren procesamiento de subsegundo, como la detección de fraude o la personalización en tiempo real. Versión preliminar pública. "5 minutos" indica la longitud de un microproceso. Use 5 minutos para minimizar la sobrecarga por lote, como la compilación de consultas.
Continuo .trigger(continuous='1 second') No está soportado. Se trata de una característica experimental incluida en spark OSS. En su lugar, use el modo en tiempo real.

processingTime: intervalos de desencadenador basados en tiempo

Structured Streaming hace referencia a intervalos de desencadenador basados en tiempo como "microprocesos de intervalo fijo". Mediante la palabra clave processingTime, especifique una duración de tiempo como una cadena, como .trigger(processingTime='10 seconds').

La configuración de este intervalo determina la frecuencia con la que el sistema realiza comprobaciones para ver si han llegado nuevos datos. Configure el tiempo de procesamiento para equilibrar los requisitos de latencia y la velocidad a la que llegan los datos en el origen.

AvailableNow: procesamiento por lotes incremental

Importante

En Databricks Runtime 11.3 LTS y versiones posteriores, Trigger.Once está en desuso. Se usa Trigger.AvailableNow para todas las cargas de trabajo de procesamiento por lotes incrementales.

La AvailableNow opción de desencadenador consume todos los registros disponibles como un lote incremental con la capacidad de configurar el tamaño del lote con opciones como maxBytesPerTrigger. Las opciones de ajuste de tamaño varían según el origen de datos.

Orígenes de datos compatibles

Azure Databricks admite el uso de Trigger.AvailableNow para el procesamiento por lotes incremental desde muchas fuentes de transmisión estructurada. En la tabla siguiente se incluye la versión mínima admitida de Databricks Runtime necesaria para cada origen de datos:

Origen Versión mínima de Databricks Runtime
Orígenes de archivos (JSON, Parquet, etc.) 9.1 LTS
Delta Lake 10.4 LTS
Cargador automático 10.4 LTS
Apache Kafka 10.4 LTS
Cinesis 13.1

realTime: cargas de trabajo operativas de latencia ultra baja

Importante

Esta característica está en versión preliminar pública.

El modo en tiempo real para Structured Streaming logra una latencia de un extremo a otro inferior a 1 segundo en la cola y, en casos comunes, alrededor de 300 ms. Para obtener más información sobre cómo configurar y usar el modo en tiempo real de forma eficaz, consulte Modo en tiempo real en Structured Streaming.

Apache Spark tiene un intervalo de desencadenador adicional conocido como procesamiento continuo. Este modo se ha clasificado como experimental desde Spark 2.3. Azure Databricks no admite ni recomienda este modo. Use el modo en tiempo real en su lugar para casos de uso de baja latencia.

Nota:

El modo de procesamiento continuo en esta página no está relacionado con el procesamiento continuo en las Lakeflow Spark canalizaciones declarativas.

Cambio de intervalos de desencadenador entre ejecuciones

Puede cambiar el intervalo del activador entre ejecuciones mientras utiliza el mismo punto de control.

Comportamiento al cambiar intervalos

Si un trabajo de Structured Streaming se detiene mientras se está procesando un microlote, entonces dicho microlote debe completarse antes de que se aplique el nuevo intervalo desencadenador. Como resultado, es posible que observe un microprocesamiento por lotes con la configuración especificada anteriormente después de cambiar el intervalo de activación. A continuación se describe el comportamiento esperado al realizar la transición:

  • Transición del intervalo basado en tiempo a AvailableNow: un micro-lote podría procesarse antes de que se procesen todos los registros disponibles como un lote incremental.

  • Transición de AvailableNow a un intervalo basado en tiempo: el procesamiento puede continuar para todos los registros que estaban disponibles cuando se activó el último AvailableNow trabajo. Este es el comportamiento esperado.

Recuperación de errores de consulta

Nota:

Si intenta recuperarse de un error de consulta asociado a un lote incremental, cambiar el intervalo del desencadenador no resuelve este problema porque el lote todavía debe completarse. Aumente la capacidad de cómputo utilizada para el procesamiento del lote para intentar resolver el problema. En raras ocasiones, es posible que tenga que reiniciar la secuencia con un nuevo punto de control.