Inclusión
El procesamiento de flujo con estado se refiere al procesamiento de un flujo continuo de eventos en tiempo vivo mientras mantiene el estado en función de los eventos vistos hasta ahora. Esto permite al sistema rastrear cambios y patrones con el tiempo en la secuencia de eventos, y permite tomar decisiones o tomar medidas basadas en esta información.
El procesamiento de flujo con estado en la transmisión estructurada de Apache Spark se admite utilizando operadores incorporados (como agregación de ventanas, unión de flujo de flujo, duplicados de caída, etc.) para método predefinida y usar FlatMapGroupWithState o MapGroupWithState para método arbitraria. La método arbitraria permite a los usuarios escribir su código de manipulación de estado personalizado en sus tuberías. Sin confiscación, a medida que la admisión de la transmisión crece en la empresa, las aplicaciones de transmisión más complejas y sofisticadas exigen varias características adicionales para simplificar que los desarrolladores escriban tuberías de transmisión con estado.
Para respaldar estas nuevas y crecientes aplicaciones de transmisión con estado o casos de uso activo, la comunidad de Spark está presentando un nuevo cirujano de Spark llamado variar con estado. Este cirujano permitirá modelar datos flexibles, tipos compuestos, temporizadores, TTL, encadenamiento de operadores con estado a posteriori de variar con estado, desarrollo del esquema, reutilizando un estado de una consulta e integración diferentes con una gran cantidad de otras características de Databricks como Catálogo de la dispositivo, Mesas en vivo deltay Spark Connect. Usando este cirujano, los clientes pueden desarrollar y ejecutar sus casos de uso operativos con estado crítico y complicado de la labor de guisa confiable y valioso en la plataforma Databricks utilizando idiomas populares como Scala, Java o Python.
Aplicaciones/casos de uso utilizando el procesamiento de flujo de estado
Muchos Aplicaciones basadas en eventos Confíe en realizar cálculos con estado para activar acciones o emitir eventos de salida que generalmente se escriban en otro bus de registro/mensaje de eventos, como Apache Kafka/Apache Pulsar/Google Pub-sub, etc. Estas aplicaciones generalmente implementan una máquina de estado que valida las reglas, detecta anomalías , rastrea sesiones, etc., y genera los resultados derivados, que generalmente se usan para desencadenar acciones en sistemas aguas debajo:
- Eventos de entrada
- Estado
- Tiempo (capacidad de trabajar con tiempo de procesamiento y tiempo de evento)
- Eventos de salida
Los ejemplos de tales aplicaciones incluyen Seguimiento de la experiencia del sucesor, Detección de anomalías, Monitoreo de procesos comercialesy Árboles de valentía.
Inclusión de TransformwithState: una API de procesamiento con estado más potente
Apache Spark ahora presenta variar con estadoun cirujano de procesamiento con estado de próxima procreación diseñado para hacer que las aplicaciones de transmisión complejas y en tiempo vivo de la construcción sean más flexibles, eficientes y escalables. Esta nueva API desbloquea capacidades avanzadas para la encargo estatal, el procesamiento de eventos, la encargo del temporizador y la desarrollo del esquema, lo que permite a los usuarios implementar una método de transmisión sofisticada con facilidad.
Diseño de stop nivel
Estamos introduciendo un nuevo enfoque de API en capas, flexible y desplegable para topar las limitaciones ayer mencionadas. A continuación se muestra un diagrama de casa de stop nivel de la casa en capas y las características asociadas en varias capas.
Como se muestra en la figura, continuamos utilizando los backends estatales disponibles hoy. Actualmente, Apache Spark admite dos backends de las tiendas estatales:
- HdfsbackedstateSprovider
- Rocksdbstatestoreprovider
El nuevo cirujano TransformwithState inicialmente será compatible solo con el proveedor de la tienda State Rocksdb. Hacemos uso de varias funcionalidades de RockSDB aproximadamente de las familias de columnas virtuales, escaneos de rango, operadores de fusiones, etc. para avalar un rendimiento magnífico para las diversas características utilizadas en TransformwithState. Adicionalmente de esta capa, construimos otra capa de percepción que usa el estado de estado de estado para trabajar con tipos compuestos, temporizadores, metadatos de consulta, etc. A nivel de cirujano, permitimos el uso de un procesador de estado que puede damasquinar la método de la aplicación utilizada para entregar estos poderosos Aplicaciones de transmisión. Finalmente, puede usar el Procesador Stateful adentro de las consultas de Apache Spark basadas en las API de DataFrame.
Aquí hay un ejemplo de una consulta de transmisión de Apache Spark utilizando el cirujano TransformwithState:
Características esencia con transformwithState
Modelado de datos flexible con variables de estado
Con variar con estadolos usuarios ahora pueden especificar múltiples independientes Variables de estado Adentro de un procesador estatal basado en el maniquí de programación orientado a objetos. Estas variables funcionan como miembros de la clase privada, lo que permite la encargo del estado granular sin requerir una estructura de estado monolítico. Esto hace que sea factible ponerse al día la método de la aplicación con el tiempo agregando o modificando las variables de estado sin reiniciar consultas de un nuevo directorio de punto de control.
Temporizadores y devoluciones de convocatoria para el procesamiento impulsado por eventos
Los usuarios ahora pueden registrar temporizadores para activar la método de la aplicación basada en eventos. La API admite uno y otro tiempo de procesamiento (Basado en el cronómetro de tabique) y hora del evento Temporizadores (basados en columna). Cuando un temporizador se dispara, se emite una devolución de convocatoria, lo que permite un manejo de eventos valioso, actualizaciones de estado y procreación de salida. La capacidad de enumerar, registrar y eliminar temporizadores garantiza un control preciso sobre el procesamiento de eventos.
Soporte nativo para tipos de datos compuestos
La encargo del estado ahora es más intuitiva con soporte incorporado para estructuras de datos compuestos:
- Valueestate: Almacena un valía único por esencia de agrupación.
- ListState: Mantiene una nómina de títulos por esencia, lo que admite operaciones eficientes de transigencia.
- MapState: Habilita el almacenamiento de títulos de esencia adentro de cada esencia de agrupación con búsqueda de puntos eficientes
Spark codifica y persiste automáticamente estos tipos de estado, reduciendo la carencia de serialización manual y mejorando el rendimiento.
Estado espontáneo expiración con TTL
Para el cumplimiento y la eficiencia operativa, variar con estado presenta nativo Tiempo de vida (TTL) Soporte para variables de estado. Esto permite a los usuarios especificar las políticas de vencimiento, asegurando que los datos de estado antiguos se eliminen automáticamente sin requerir la inocencia manual.
Operadores de encadenamiento a posteriori de variar con estado
Con esta nueva API, los operadores con estado ahora pueden ser encadenados a posteriori variar con estadoincluso cuando se usa el tiempo del evento como modo de tiempo. Al hacer una narración explícita, las columnas de tiempo de evento en el esquema de salida, los operadores aguas debajo pueden realizar el filtrado de registros tardíos y el desalojo de estado sin problemas, lo que elimina la carencia de soluciones complejas que involucren múltiples tuberías y almacenamiento forastero.
Inicialización del estado simplificado
Los usuarios pueden inicializar el estado de las consultas existentes, lo que facilita el reinicio o los trabajos de transmisión de clones. La API permite una integración perfecta con el catedrático de origen de datos de estado, lo que permite que nuevas consultas aprovechen el estado previamente escrito sin procesos de migración complejos.
Proceso del esquema para consultas con estado
variar con estado admite la desarrollo del esquema, permitiendo cambios como:
- Añadir o eliminar campos
- Reordenamiento de campos
- Modernización de tipos de datos
Apache Spark detecta y aplica automáticamente actualizaciones de esquemas compatibles, asegurando que las consultas puedan continuar ejecutándose adentro del mismo directorio de punto de control. Esto elimina la carencia de reconstrucciones estatales completas y reprocesamiento, reduciendo significativamente el tiempo de inactividad y la complejidad operativa.
Integración nativa con el catedrático de fuente de datos estatal
Para simplificar la depuración y la observabilidad, variar con estado está integrado de forma nativa con el catedrático de fuente de datos de estado. Los usuarios pueden inspeccionar las variables de estado y consultar los datos de estado directamente, simplificando la resolución y el observación de problemas, incluidas las características avanzadas como ReadchangeFeed, etc.
Disponibilidad
La API TransformwithState está adecuado ahora con el propagación de Databricks Runtime 16.2 en clústeres dedicados por catálogo sin aislamiento y dispositivo. Pronto se agregará el soporte para los grupos tipificado de catálogo de Unity y el enumeración sin servidor. La API igualmente está programada para estar adecuado en código destapado con la traducción Apache Spark ™ 4.0.
Conclusión
Creemos que todas las mejoras de características empaquetadas adentro de la nueva API TransformwithState permitirán construir una nueva clase de cargas operativas confiables, escalables y misioneras que impulsan los casos de uso más importantes para nuestros clientes y usuarios, todo adentro de la comodidad y facilidad. de uso del Apache Spark DataFrame API. Es importante destacar que estos cambios igualmente establecen las bases para futuras mejoras a los operadores incorporados y nuevos en la transmisión estructurada de Apache Spark. Estamos entusiasmados con las mejoras de encargo estatal en la transmisión estructurada de Apache Spark ™ en los últimos primaveras y esperamos los desarrollos de hoja de ruta planificados en esta dominio en el futuro cercano.
Puedes estudiar más sobre Procesamiento de flujo con estado y transformación con estado en Databricks aquí.