Configuración de intervalos de desencadenador de Structured Streaming

En esta página 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.

Importante

Azure Databricks recomienda establecer un modo de desencadenador que equilibre la latencia y el costo del caso de uso. De lo contrario, es posible que vea costos de almacenamiento inesperados del proveedor de la nube. Consulte Control del costo del almacenamiento en la nube para obtener más información.

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.

:::note Computación sin servidor

En computación sin servidor, solo se admiten Trigger.AvailableNow() y Trigger.Once(). Databricks recomienda Trigger.AvailableNow().

Para el streaming continuo en computación sin servidor, utilice el modo de canalización desencadenado o continuo en la opción continua.

Consulte Limitaciones de streaming.

:::

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 muchos orígenes de Structured Streaming. 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

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.

Control del costo del almacenamiento en la nube

De forma predeterminada, si no se establece un modo de desencadenador, Structured Streaming lo establece en processingTime y el intervalo en 0, comprobando si hay nuevos datos cada pocos milisegundos. Esto puede generar un gran volumen de llamadas API de almacenamiento en la nube al día y dar lugar a cargos inesperados del proveedor de nube.

Databricks recomienda configurar un modo de desencadenador adecuado para los requisitos de latencia y costo. Consulte processingTime para obtener información sobre cómo configurar un intervalo de desencadenador basado en tiempo.

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.