Cómo acelerar las consultas de transmisión con puntos de control de estado asincrónicos

Cómo acelerar las consultas de transmisión con puntos de control de estado asincrónicos

  • Big Data
  • mayo 2, 2022
  • No Comment
  • 94
  • 13 minutes read


antecedentes / motivación

La transmisión con estado se está volviendo más común a medida que las partes interesadas hacen demandas más sofisticadas de mayores cantidades de datos. Sin embargo, la desventaja es que la complejidad computacional de las operaciones con estado aumenta la latencia de los datos, lo que las hace mucho menos procesables. Los puntos de control de estado asíncronos, que separan el proceso de estado persistente del punto de control de microlotes normal, proporcionan una manera de minimizar la latencia de procesamiento mientras se mantienen las dos características de la transmisión estructurada: alto rendimiento y confiabilidad.

Antes de entrar en detalles, es útil proporcionar algo de contexto y motivación de por qué construimos esta capacidad de procesamiento de secuencias. El consenso de la industria sobre el barómetro número uno del rendimiento de transmisión es la latencia absoluta que necesita una canalización para procesar un solo registro. Sin embargo, queremos brindar una visión más matizada de la evaluación del rendimiento general: en lugar de solo observar la latencia de extremo a extremo de un solo conjunto de datos, es importante observar una combinación de rendimiento y latencia durante un período de tiempo y en una manera confiable. Eso no quiere decir que ciertos casos de uso operativo no requieran el mínimo de latencia absoluta; estos son válidos e importantes. Sin embargo, para casos de uso de análisis y ETL, ¿es mejor procesar 200 000 registros/segundo o 20 millones de registros/minuto? Siempre depende del caso de uso, pero creemos que el volumen y la rentabilidad son tan importantes para las canalizaciones de transmisión como la velocidad. Existen compensaciones fundamentales entre la eficiencia y el soporte de muy baja latencia dentro de las implementaciones del motor de transmisión, por lo que alentamos a nuestros clientes a realizar el ejercicio y determinar si el costo adicional vale la pequeña reducción en la latencia de datos.

El modelo de ejecución de microlotes de Structured Streaming intenta equilibrar el alto rendimiento, la confiabilidad y la latencia de los datos.

alto rendimiento

Mirando la transmisión conceptualmente, todos los datos entrantes se consideran ilimitados, independientemente del volumen y la velocidad. Aplicando este concepto al streaming estructurado, podemos imaginar que cada consulta genera un marco de datos infinito. Debajo del capó, Apache Spark™ desglosa los datos que ingresan como un marco de datos ilimitado en microlotes más pequeños, que también son marcos de datos. Esto es importante por dos razones:

  • Permite que el motor aplique las mismas optimizaciones disponibles para consultas por lotes/ad hoc a cada uno de estos marcos de datos, lo que maximiza la eficiencia y el rendimiento.
  • Ofrece a los usuarios la misma interfaz simple y tolerancia a fallas que las consultas por lotes/ad hoc

fiabilidad

En términos de confiabilidad, Structured Streaming escribe un punto de control después de cada microlote, rastreando el progreso de lo que procesó la fuente de datos, el estado intermedio (para agregaciones y uniones) y lo que se escribió en el receptor de datos. En caso de falla o reinicio, el motor usa esta información para garantizar que la consulta solo procese los datos exactamente una vez. La transmisión estructurada almacena estos puntos de control en algún tipo de almacenamiento persistente (por ejemplo, almacenamiento de blobs en la nube) para garantizar que la consulta se recupere correctamente después de una falla. por cívico Para consultas, el punto de control incluye escribir el estado de todas las claves involucradas en operaciones con estado para garantizar que la consulta se reinicie con los valores correctos.

latencia de datos

A medida que crecen los datos, también lo hace la cantidad de claves y el tamaño del estado que se administra, lo que hace que la administración del estado sea aún más importante y consuma más tiempo. Para reducir aún más la latencia de datos para consultas con estado, diseñamos puntos de control asincrónicos específicamente para el estado de las diversas claves involucradas en operaciones con estado. Al separar esto del proceso de punto de control normal en un subproceso en segundo plano, permitimos que la consulta progrese al siguiente microlote y sirva datos a los usuarios finales más rápido mientras mantenemos la confiabilidad.

Cómo funciona

Normalmente, la transmisión estructurada utiliza puntos de control de estado síncronos, lo que significa que el motor escribe el estado actual de todas las claves involucradas en operaciones con estado como parte del punto de control normal para cada microlote antes de pasar al siguiente. El beneficio de este enfoque es que si falla una consulta de transmisión, la aplicación puede recuperar rápidamente el progreso de una transmisión y solo tiene que volver a procesar el microlote fallido. La compensación por una recuperación rápida es una mayor duración para la ejecución normal de microlotes.

La transmisión estructurada utiliza puntos de control síncronos y escribe el estado actual de todas las claves involucradas en operaciones con estado antes de pasar a la siguiente

Los puntos de control de estado asíncronos separan los puntos de control de estado de la ejecución normal de microlotes. Con la función habilitada, la transmisión estructurada no tiene que esperar a que se complete el punto de control del microlote actual antes de pasar al siguiente; comienza inmediatamente después. Los ejecutores devuelven el estado de la confirmación asíncrona al controlador y, una vez que se han completado, el controlador marca el microlote como totalmente confirmado. Actualmente, la función permite que hasta un microlote espere a que se complete el punto de control. La compensación por una latencia de datos más baja es que, si hay un error, es posible que la consulta deba volver a procesar dos microlotes para brindar las mismas garantías de tolerancia a fallas: el microlote actual que se está calculando y el microlote anterior cuyo punto de control de estado estaba en progreso. .

Los puntos de control de estado asíncronos separan los puntos de control de estado de la ejecución normal de microlotes.

Una metáfora para explicar esto es dar forma a la masa en una panadería. Los panaderos suelen usar ambas manos para dar forma a una sola pieza de masa, que es más lenta, pero si cometen un error, todo lo que tienen que hacer es comenzar con esa sola pieza. Algunos panaderos pueden optar por formar dos piezas de masa a la vez, aumentando su rendimiento, pero los posibles errores podrían requerir recrear ambas piezas. En este ejemplo, el procesamiento síncrono usa dos manos para dar forma a una pieza de masa, y el procesamiento asíncrono usa dos manos para dar forma a piezas separadas.

Para las consultas que tienen cuellos de botella con las actualizaciones de estado, los puntos de verificación de estado asincrónicos proporcionan una forma rentable de reducir la latencia de los datos sin sacrificar la confiabilidad.

Identificación de solicitudes de candidatos

Queremos reiterar que los puntos de control de estado asincrónicos solo son útiles para ciertas cargas de trabajo: flujos con estado, cuya latencia de confirmación de punto de control de estado es un factor importante en la latencia general de ejecución de microlotes.

Así es como los usuarios pueden identificar buenos candidatos:

  • Operaciones con estado: la consulta contiene operaciones con estado, como ventanas, agregaciones, [flat]mapGroupsWithState o uniones de flujo a flujo.
  • Latencia de confirmación del punto de control estatal: los usuarios pueden revisar las métricas dentro de un evento StreamingQueryListener para comprender el impacto de la latencia de confirmación en el tiempo de ejecución general del microlote. Los registros log4j del controlador también contienen la misma información.

El siguiente es un ejemplo de análisis de un evento StreamingQueryListener para consultas de buenos candidatos:


Streaming query made progress: {
  "id" : "2e3495a2-de2c-4a6a-9a8e-f6d4c4796f19",
  "runId" : "e36e9d7e-d2b1-4a43-b0b3-e875e767e1fe",
  …
  "batchId" : 0,
  "durationMs" : {
    "addBatch" : 519387,
  …
    "triggerExecution" : 547730,
  …
  },
  "stateOperators" : [ {
  …
    "commitTimeMs" : 3186626,
  …
    "numShufflePartitions" : 64,
  …
    }]
  }

El ejemplo anterior contiene mucha información valiosa, pero los usuarios deben centrarse en métricas específicas:

  • duración del lote (DuraciónMs.triggerExecution) es de aproximadamente 547 segundos
  • El tiempo de compromiso del almacén de estado agregado para todas las tareas (operadores estatales[0].commitTimeMs) es de aproximadamente 3186 segundos
  • Tareas relacionadas con la tienda de estado (operadores estatales[0].numShufflePartitions) es 64, lo que significa que cada tarea que contenía el operador de estado agregó un promedio de 50 segundos de tiempo de reloj de pared (3186 segundos/64 tareas) a cada lote. Suponiendo que las 64 tareas se ejecutaron simultáneamente, el paso de confirmación representó aproximadamente el 9 % (50 segundos/547 segundos) del tiempo de pila. Si el número máximo de tareas simultáneas es inferior a 64, el porcentaje puede aumentar. Por ejemplo, si hubiera 32 tareas concurrentes, esto en realidad representaría el 18 % del tiempo total de ejecución.

Habilitar puntos de control de estado asíncronos

Implemente un clúster con Databricks Runtime 10.4 o posterior y use las siguientes configuraciones de Spark:


spark.conf.set(
"spark.databricks.streaming.statefulOperator.asyncCheckpoint.enabled",
"true"
)

spark.conf.set(
"spark.sql.streaming.stateStore.providerClass", "com.databricks.sql.streaming.state.RocksDBStateStoreProvider"
)

Algunos puntos a tener en cuenta:

  • Los puntos de control de estado asíncronos solo admiten el almacén de estado basado en RocksDB
  • Cualquier error relacionado con guardar un punto de control de estado asíncrono hará que la consulta falle después de una cantidad predefinida de reintentos. Este comportamiento difiere del punto de control síncrono (que se ejecuta como parte de una tarea), que le da a Spark la oportunidad de volver a intentar las tareas fallidas varias veces antes de que falle una consulta.

Al probar una combinación de cargas de trabajo internas y de clientes en fuentes de bus de mensajes y archivos, descubrimos que la duración promedio de microlotes puede mejorar hasta en un 25 % para flujos con estados de gran tamaño y millones de entradas. Como anécdota, hemos visto mejoras aún mayores en la duración máxima del microlote (el tiempo más largo que tarda la transmisión en procesar un microlote).

Conclusión

Los puntos de control de estado asíncronos no son una característica que hayamos desarrollado de forma aislada: es la siguiente de una serie de características nuevas que hemos lanzado y que simplifican la operación y el mantenimiento de las consultas de transmisión con estado. Continuamos invirtiendo fuertemente en nuestras capacidades de transmisión y estamos enfocados en facilitar que nuestros clientes entreguen más datos a sus usuarios finales, más rápido. ¡Manténganse al tanto!



Related post

El programa interactivo de los científicos informáticos ayuda a planificar el movimiento para entornos con obstáculos – ScienceDaily

El programa interactivo de los científicos informáticos ayuda a…

Al igual que nosotros, los robots no pueden ver a través de las paredes. A veces necesitan un poco de ayuda…
Toma lecciones en realidad virtual con Immerse, una aplicación de voz para Quest 2

Toma lecciones en realidad virtual con Immerse, una aplicación…

En el metaverso, imagínese llegando tarde a la escuela. Bucear es una plataforma educativa de metaverso desarrollada en colaboración con los…
Las tejas de hormigón de base biológica reducen las emisiones de CO2 y los residuos

Las tejas de hormigón de base biológica reducen las…

Las baldosas de base biológica son un nuevo material de construcción sostenible que se utiliza para crear fachadas sostenibles para edificios.…

Leave a Reply

Tu dirección de correo electrónico no será publicada.