Las ventanas de Atlas Stream Processing son etapas del pipeline de agregación que capturan subconjuntos acotados en el tiempo de un flujo de datos, lo que permite realizar operaciones que requieren entradas finitas sobre datos en transmisión.
Considere el procesador de flujo de ejemplo descrito aquí. La etapa $match puede operar directamente en el flujo de datos extraído por $source, comprobando cada documento contra los criterios de coincidencia a medida que el procesador de flujos lo ingiere.
Por el contrario, la etapa $group y los distintos cálculos estadísticos que contiene no pueden operar sobre datos ilimitados, ya que es imposible determinar valores mínimos, máximos, promedio o medianos sin primero delimitar el conjunto de valores que se van a considerar. Muchos operadores no matemáticos como $push y $top también requieren datos limitados.
Un procesador de flujo proporciona estos límites con una ventana. Se abre una ventana y todos los documentos que el procesador de flujo ingiere se acumulan en el estado de esa ventana hasta que transcurre un intervalo de tiempo predefinido y la ventana se cierra. La ventana agrupa todos los documentos que captura durante ese intervalo y pasa este conjunto por su pipeline interno. Desde dentro de este pipeline, los documentos agrupados son indistinguibles de los datos en reposo.
Atlas Stream Processing proporciona soporte para ventanas de salto,ventanasde caída yventanas de sesión.
Tumbling Windows
Las ventanas por lotes son ventanas definidas completamente por los intervalos de tiempo que capturan. Estos intervalos de tiempo no se superponen.
Ejemplo
Se define una ventana tumbling con un intervalo de 3 segundos. Cuando inicie su procesador de flujo:
Se abre una ventana durante 3 segundos.
La primera ventana captura todos los documentos que la transmisión genera dentro de esos 3 segundos.
Después de que transcurren 3 segundos, la ventana se cierra y se aplica tu lógica de agregación a todos los documentos en esa ventana.
Si configura
allowedLateness, Atlas Stream Processing guarda los mensajes que llegan tarde en la fila de letra muerta después de que se cierre la ventana.Se abre una nueva ventana tan pronto como se cierra la primera y captura documentos del flujo durante los siguientes 3 segundos.
Las ventanas de salto garantizan la captura integral de los flujos de datos sin el procesamiento repetido de documentos individuales.
Hopping Windows
Lasventanas de salto se definen por el intervalo de tiempo que capturan y el intervalo entre la apertura de cada ventana, llamado salto. El salto debe ser menor o igual que el intervalo. Cuando el salto es menor que el intervalo, las ventanas se superponen.
Ejemplo
Definir una ventana saltante con un intervalo de 20 segundos y un salto de 5 segundos. Cuando inicie su procesador de flujo:
Se abre una ventana durante 20 segundos.
La primera ventana captura todos los documentos que el flujo genera en esos 20 segundos.
5 segundos después, se abre otra ventana y captura todos los documentos de los siguientes 20 segundos. Dado que la primera ventana sigue abierta, todos los documentos que genera el flujo durante los siguientes 15 segundos son capturados por ambas ventanas.
20 segundos después de que se abra la primera ventana, esta se cierra y se aplica su lógica de agregación a todos los documentos en esa ventana.
5 segundos después, la segunda ventana se cierra y aplica tu lógica de agregación a todos los documentos en esa ventana, incluyendo aquellos que ya estaban sujetos a la lógica de agregación en la primera ventana.
Si configura allowedLateness, Atlas Stream Processing guarda los mensajes que llegan tarde en la fila de letra muerta después de que se cierre la ventana.
Session Windows
Las ventanas de sesión son ventanas que te permiten ejecutar un pipeline en cada "sesión" de actividad en un flujo de entrada. Dos documentos se encuentran en la misma sesión si tienen la misma partición y la diferencia entre sus marcas de tiempo es menor que la brecha de sesión.
Cuando se cierra una ventana, sus resultados se liberan a la siguiente etapa.
Ejemplo
Se define una partición de $userId, un intervalo de 5 minutos y un retraso permitido de 5 segundos. Al iniciar el procesador de streaming:
Se abre una ventana cuando el primer documento llega a
$sessionWindow.Cualquier documento que alcance la etapa que contenga el mismo valor de
userId(incluida la ausencia de este campo) dentro de los cinco minutos y cinco segundos posteriores a la llegada del documento coincidente más reciente al procesador se añadirá a la misma ventana de sesión.La ventana permanece abierta hasta que no se agregan documentos durante un lapso de cinco minutos más una tardanza permitida de cinco segundos.