Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta página se describe cómo usar el modo en tiempo real con Structured Streaming, incluido lo que es y cómo funciona.
Para obtener instrucciones de configuración paso a paso, consulte Introducción al modo en tiempo real. Para obtener ejemplos de código, consulte Ejemplos de modo en tiempo real. Para conocer los orígenes, receptores, operadores y limitaciones admitidos, consulte Referencia del modo en tiempo real.
¿Qué es el modo en tiempo real?
El modo en tiempo real es un tipo de desencadenador para Structured Streaming que permite el procesamiento de datos de latencia ultra baja con latencia de un extremo a otro tan bajo como cinco milisegundos. Use el modo en tiempo real para cargas de trabajo operativas que requieren respuesta inmediata a los datos de streaming, como la detección de fraudes, la personalización en tiempo real y los sistemas de toma de decisiones instantáneos.
Cargas de trabajo operativas frente a analíticas
Las cargas de trabajo de streaming se pueden dividir ampliamente en cargas de trabajo operativas y cargas de trabajo analíticas:
- Las cargas de trabajo operativas consumen datos en tiempo real, aplican lógica de negocios y desencadenan acciones o decisiones descendentes.
- Las cargas de trabajo analíticas usan la ingesta y la transformación de datos, normalmente siguiendo la arquitectura Medallion (por ejemplo, ingesta de datos en las tablas de bronce, plata y oro).
Algunos ejemplos de cargas de trabajo operativas son:
- Bloquear o marcar una transacción de tarjeta de crédito en tiempo real si una puntuación de fraude supera un umbral, en función de factores como ubicación inusual, tamaño de transacción grande o patrones de gasto rápidos.
- Entregar un mensaje promocional cuando los datos de la secuencia de clics muestran que un usuario ha estado explorando jeans durante cinco minutos, ofreciendo un descuento de 25% si compra en los próximos 15 minutos.
En general, las cargas de trabajo operativas se caracterizan por la necesidad de latencia de menos de un segundo de un extremo a otro. Esto se puede lograr con el modo en tiempo real en Apache Spark Structured Streaming.
Cómo el modo en tiempo real logra una latencia baja
El modo en tiempo real mejora la arquitectura de ejecución mediante:
- Ejecutar lotes de larga duración (el valor predeterminado es de cinco minutos), en el que el sistema procesa los datos a medida que está disponible en el origen.
- Programar todas las fases de la consulta simultáneamente. Esto requiere que el número de espacios de tarea disponibles sea igual o mayor al número de tareas de todas las etapas en un lote.
- Pasar datos entre fases tan pronto como se produzca mediante un orden aleatorio de streaming.
Al final del procesamiento de un lote y antes de que se inicie el siguiente lote, los puntos de control de Structured Streaming progresan y publican métricas. La duración del lote afecta a la frecuencia de creación de puntos de control.
- Lotes más largos: puntos de comprobación menos frecuentes, lo que se traduce en repeticiones más largas en caso de fallos y una disponibilidad de métricas retrasada.
- Lotes más cortos: puntos de comprobación más frecuentes, lo que puede afectar a la latencia.
Databricks recomienda comparar el modo en tiempo real con la carga de trabajo de destino para encontrar el intervalo de desencadenador adecuado.
Cuándo usar el modo en tiempo real
Elija el modo en tiempo real cuando el caso de uso requiera:
- Latencia de sub-segundo: aplicaciones que necesitan responder a datos en milisegundos, como sistemas de detección de fraudes que deben bloquear transacciones en tiempo real.
- Toma de decisiones operativas: sistemas que desencadenan acciones inmediatas basadas en datos entrantes, como ofertas, alertas o notificaciones en tiempo real.
- Procesamiento continuo: cargas de trabajo en las que los datos deben procesarse en cuanto llegan, en lugar de en lotes periódicos.
Use el modo micro-batch (el desencadenador de Structured Streaming predeterminado) cuando:
- Procesamiento analítico: canalizaciones ETL, transformaciones de datos e implementaciones de arquitectura medallion donde los requisitos de latencia se miden en segundos o minutos.
- Optimización de costos: las cargas de trabajo en las que no se requiere la latencia de sub-segundo, ya que el modo en tiempo real requiere recursos de proceso dedicados.
- La frecuencia del punto de comprobación es importante: aplicaciones que se benefician de puntos de control más frecuentes para una recuperación más rápida.
Requisitos y configuración
El modo en tiempo real tiene requisitos específicos para la configuración de proceso y la configuración de consultas. En esta sección se describen los requisitos previos y los pasos de configuración necesarios para usar el modo en tiempo real.
Prerrequisitos
Para usar el modo en tiempo real, debe configurar sus recursos informáticos para cumplir con los siguientes requisitos:
- Databricks Runtime 16.4 LTS o superior: el modo en tiempo real solo está disponible en DBR 16.4 LTS y versiones posteriores.
- Proceso dedicado: debe usar un proceso dedicado (anteriormente de un solo usuario). No se admiten los clústeres estándar (anteriormente compartidos), las canalizaciones declarativas de Spark de Lakeflow y los clústeres sin servidor.
- Desactivar el escalado automático: no se admite el escalado automático.
- Desactivar Photon: no se admite la aceleración de photon.
- Configuración de Spark: Debe configurar en
spark.databricks.streaming.realTimeMode.enabled.
Para obtener instrucciones paso a paso sobre cómo crear y configurar el proceso para el modo en tiempo real, consulte Introducción al modo en tiempo real.
Configuración de consultas
Para ejecutar una consulta en modo tiempo real, debe habilitar el desencadenador en tiempo real. Los desencadenadores en tiempo real solo se admiten en modo de actualización.
Python
query = (
spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", broker_address)
.option("subscribe", input_topic)
.load()
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", broker_address)
.option("topic", output_topic)
.option("checkpointLocation", checkpoint_location)
.outputMode("update")
# In PySpark, the realTime trigger requires specifying the interval.
.trigger(realTime="5 minutes")
.start()
)
Scala
import org.apache.spark.sql.execution.streaming.RealTimeTrigger
val readStream = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", brokerAddress)
.option("subscribe", inputTopic).load()
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", brokerAddress)
.option("topic", outputTopic)
.option("checkpointLocation", checkpointLocation)
.outputMode("update")
.trigger(RealTimeTrigger.apply())
// RealTimeTrigger can also accept an argument specifying the checkpoint interval.
// For example, this code indicates a checkpoint interval of 5 minutes:
// .trigger(RealTimeTrigger.apply("5 minutes"))
.start()
Ajuste de tamaño de proceso
Puede ejecutar un trabajo en tiempo real por recurso de proceso si el proceso tiene suficientes ranuras de tareas.
Para ejecutarse en modo de baja latencia, el número total de ranuras de tareas disponibles debe ser mayor o igual que el número de tareas en todas las fases de consulta.
Ejemplos de cálculo de ranuras
| Tipo de canalización | Configuración | Espacios requeridos |
|---|---|---|
| Sin estado monofásico (origen de Kafka + sumidero) |
maxPartitions = 8 |
8 ranuras |
| Con estado de dos etapas (origen de Kafka + reorganización de datos) |
maxPartitions = 8, particiones aleatorias = 20 |
28 ranuras (8 + 20) |
| Tres fases (origen de Kafka + orden aleatorio + repartición) |
maxPartitions = 8, dos fases aleatorias de 20 cada una |
48 ranuras (8 + 20 + 20) |
Si no establece maxPartitions, use el número de particiones en el tema de Kafka.
Rendimiento
Para obtener instrucciones de optimización de proceso, técnicas de optimización de latencia y supervisión de consultas, consulte Optimización y supervisión del rendimiento de las consultas en modo en tiempo real.
Compatibilidad y limitaciones de funciones
Para obtener una lista completa de entornos, lenguajes, tipos de proceso, orígenes, receptores, operadores y limitaciones conocidas, consulte Referencia del modo en tiempo real.
Pasos siguientes
Ahora que comprende qué es el modo en tiempo real y cómo configurarlo, explore estos recursos para empezar a implementar aplicaciones de streaming en tiempo real:
- Introducción al modo en tiempo real: siga las instrucciones paso a paso para configurar el proceso y ejecutar la primera consulta de streaming en tiempo real.
- Ejemplos de código en modo en tiempo real: Explore ejemplos prácticos, incluidos orígenes y destinos de Kafka, consultas con estado, agregaciones y destinos personalizados.
- Rendimiento; Ajuste el proceso, reduzca la latencia con técnicas de optimización asincrónicas y mida el rendimiento con métricas integradas.
- Referencia del modo en tiempo real: revisión de entornos compatibles, idiomas, fuentes, sumideros, operadores y limitaciones conocidas.
- Conceptos de Structured Streaming: conozca los conceptos fundamentales de Structured Streaming en Databricks.