Las clases PCollections no delimitadas o las colecciones no delimitadas representan datos en canalizaciones de transmisión. Una colección no delimitada contiene datos de una fuente de datos que se actualiza continuamente, como Pub/Sub.
No puedes usar una clave para agrupar elementos en una colección no delimitada. Es posible que haya una cantidad infinita de elementos para una clave determinada en los datos de transmisión porque la fuente de datos agrega elementos nuevos constantemente. Puedes usar ventanas, marcas de agua y activadores para agregar elementos en colecciones no delimitadas.
El concepto de ventanas también se aplica a las PCollections delimitadas que representan datos en canalizaciones por lotes. Si deseas obtener información sobre la renderización en ventanas en canalizaciones por lotes, consulta la documentación de Apache Beam para la renderización en ventanas con PCollections delimitadas.
Si una canalización de Dataflow tiene una fuente de datos delimitada (es decir, una fuente que no contiene datos que se actualizan de forma continua) y la canalización cambia al modo de transmisión mediante la marca --streaming
, cuando la fuente delimitada se consume por completo, la canalización deja de ejecutarse.
Usa el modo de transmisión
Para ejecutar una canalización en modo de transmisión, configura la marca --streaming
en la línea de comandos cuando ejecutes tu canalización. También puedes configurar el modo de transmisión de manera programática cuando construyes tu canalización.
Las fuentes de lote aún no son compatibles en el modo de transmisión.
Cuando actualizas tu canalización con un grupo de trabajadores más grande, es posible que tu trabajo de transmisión no sea exclusivo como se espera. Para los trabajos de transmisión que no usan Streaming Engine, no puedes escalar por encima de la cantidad original de trabajadores y los recursos de disco persistente asignados al comienzo de tu trabajo original. Cuando actualizas un trabajo de Dataflow y especificas una mayor cantidad de trabajadores en el trabajo nuevo, solo puedes especificar una cantidad de trabajadores equivalente a la cantidad máxima de trabajadores que especificaste para tu trabajo original.
Especifica la cantidad máxima de trabajadores con las siguientes marcas:
Java
--maxNumWorkers
Python
--max_num_workers
Go
--max_num_workers
Ventanas y funciones analíticas
Las funciones analíticas dividen las colecciones no delimitadas en componentes lógicos o ventanas. Las funciones analíticas agrupan colecciones no delimitadas por las marcas de tiempo de los elementos individuales. Cada ventana contiene un número finito de elementos.
Configura las siguientes ventanas con el SDK de Apache Beam:
- Ventanas de saltos de tamaño constante (llamadas ventanas fijas en Apache Beam)
- Ventanas de salto (llamadas ventanas deslizantes en Apache Beam)
- Ventanas de sesión
Ventanas de saltos de tamaño constante
Una ventana de saltos de tamaño constante representa un intervalo de tiempo coherente y disjunto en la transmisión de datos.
Por ejemplo, si estableces una ventana de saltos de tamaño constante de treinta segundos, los elementos con valores de marca de tiempo [0:00:00-0:00:30) se encuentran en la primera ventana. Los elementos con valores de marca de tiempo [0:00:30-0:01:00] estarán en la segunda ventana.
En la siguiente imagen, se ilustra cómo se dividen los elementos en ventana de saltos de tamaño constante de treinta segundos.
Ventanas de salto
Una ventana de salto representa un intervalo de tiempo coherente en la transmisión de datos. Las ventanas de salto pueden superponerse, mientras que las ventanas de saltos de tamaño constante son disjuntas.
Por ejemplo, una ventana de salto puede comenzar cada treinta segundos y capturar un minuto de datos. La frecuencia con la que comienzan las ventanas de salto se denomina período. Este ejemplo tiene una ventana de un minuto y un período de treinta segundos.
En la siguiente imagen, se ilustra cómo los elementos se dividen en ventanas de saltos de un minuto con un período de treinta segundos.
Para tomar promedios de ejecución de datos, usa ventanas de saltos. Puedes usar ventanas de salto de un minuto con un período de treinta segundos para procesar un promedio de un minuto de ejecución cada treinta segundos.
Ventanas de sesión
Una ventana de sesión contiene elementos dentro de una duración de intervalo de otro elemento. La duración del intervalo es un intervalo entre los datos nuevos de una transmisión de datos. Si los datos llegan después de la duración del intervalo, los datos se asignarán a una ventana nueva.
Por ejemplo, las ventanas de sesión pueden dividir una transmisión de datos que representa la actividad del mouse del usuario. Esta transmisión puede tener largos períodos de inactividad intercalados con muchos clics. Una ventana de sesión puede contener los datos que se generan por los clics.
El sistema de ventanas de sesión asigna diferentes ventanas a cada clave de datos. Las ventanas de salto y salto de tamaño constante contienen todos los elementos en el intervalo de tiempo especificado, independientemente de las claves de datos.
En la siguiente imagen, se muestra cómo se dividen los elementos en ventanas de sesión.
Marcas de agua
Una marca de agua es un límite que indica cuándo Dataflow espera que hayan llegado todos los datos de una ventana. Si la marca de agua avanzó más allá del final del período y llegan datos nuevos con una marca de tiempo, los datos se consideran datos tardíos. Para obtener más información, consulta Marcas de agua y datos retrasados en la documentación de Apache Beam.
Dataflow realiza un seguimiento de las marcas de agua debido a estas razones:
- No se garantiza que los datos lleguen en orden de tiempo o en intervalos predecibles.
- No se garantiza que los eventos de datos aparezcan en las canalizaciones en el mismo orden en que se generaron.
La fuente de datos determina la marca de agua. Puedes permitir datos tardíos con el SDK de Apache Beam.
Activadores
Los activadores determinan cuándo emitir resultados agregados a medida que llegan los datos. De forma predeterminada, los resultados se emiten cuando la marca de agua pasa el final de la ventana.
Puedes usar el SDK de Apache Beam a fin de crear o modificar activadores para cada colección en una canalización de transmisión.
El SDK de Apache Beam puede configurar activadores que funcionan con cualquier combinación de las que se detallan a continuación:
- Hora del evento, como lo indica la marca de tiempo en cada elemento de datos
- Tiempo de procesamiento, que es el tiempo que se procesa el elemento de datos en una etapa determinada de la canalización.
- La cantidad de elementos de datos en una colección