Dataflow admite dos modos para los trabajos de transmisión:
- Modo exactamente una vez. Este modo es el predeterminado para todos los trabajos de transmisión de Dataflow. En este modo, Dataflow garantiza que los registros no se descarten ni se dupliquen a medida que los datos se mueven a través de la canalización.
- Modo al menos una vez. Este modo garantiza que los registros se procesen al menos una vez (es decir, no se pierden registros de entrada). Sin embargo, es posible que se dupliquen los registros con este modo. Para los casos de uso que pueden tolerar duplicados, el modo “al menos una vez” puede reducir significativamente el costo y la latencia de tu trabajo.
Elige el modo de transmisión que quieres usar
Elige el modo exactamente una vez si necesitas garantizar resultados exactos de la canalización y una semántica predecible. Por ejemplo:
- Canalizaciones con agregaciones, como recuento, suma o media
- Casos de uso críticos para el negocio que dependen de que los registros se procesen una sola vez. Entre los ejemplos, se incluyen la detección de fraudes, la detección de amenazas de red y los paneles de inventario de comercio electrónico.
Elige el modo de transmisión al menos una vez si tu carga de trabajo puede tolerar registros duplicados y podría beneficiarse de una reducción en el costo o la latencia. Por ejemplo:
- Cargas de trabajo en las que la deduplicación se realiza de forma posterior a Dataflow. Por ejemplo, las canalizaciones que escriben en BigQuery o en un almacén de datos SQL.
- Son canalizaciones solo de mapas sin agregaciones. Algunos ejemplos son el procesamiento de registros, la captura de datos modificados o las tareas de extracción, transformación y carga (ETL), en las que la canalización solo realiza transformaciones por elemento, como la traducción de esquemas.
- Canalizaciones en las que el receptor de salida no puede garantizar la entrega exactamente una vez, como Pub/Sub. En ese caso, la deduplicación dentro de la canalización podría ser innecesaria, y puedes beneficiarte del costo y la latencia reducidos del modo de transmisión de al menos una vez.
- Son canalizaciones que leen desde Pub/Sub. La lectura desde Pub/Sub se optimiza significativamente cuando se usa el modo al menos una vez.
Consideraciones adicionales
El modo de entrega al menos una vez puede reducir significativamente el costo y la latencia de una canalización. El impacto exacto depende de las especificaciones de la canalización. Realiza pruebas de transmisión al menos una vez con cargas realistas para evaluar el impacto.
Cuando se usa el modo de al menos una vez, la tasa de registros duplicados depende de la cantidad de reintentos. Por lo general, la tasa de referencia es baja (menos del 1%). Sin embargo, pueden ocurrir aumentos repentinos si fallan los nodos trabajadores o si otras condiciones causan llamadas RPC repetidas.
El modo de transmisión afecta la forma en la que Streaming Engine procesa los registros, pero no cambia la semántica de los conectores de E/S. Se recomienda alinear la semántica de E/S con el modo de transmisión. Por ejemplo, si usas el modo de transmisión al menos una vez con el conector de E/S de BigQuery, establece el modo de escritura en
STORAGE_API_AT_LEAST_ONCE
. Las plantillas de Dataflow proporcionadas por Google habilitan automáticamente esta opción cuando usas la transmisión al menos una vez.Las transformaciones elemento por elemento, como
Map
, no siempre son idempotentes. Por ejemplo, considera una función que recibe un mensaje y le agrega la marca de tiempo actual. En ese caso, un registro duplicado puede producir varias salidas distintas. Es posible que el modo al menos una vez no sea adecuado para esa canalización.
Cómo configurar el modo de transmisión
El procesamiento de tipo exactamente una vez es la configuración predeterminada para todos los trabajos de Dataflow. Para habilitar el modo de transmisión al menos una vez, establece la opción de servicio streaming_mode_at_least_once
.
Java
--dataflowServiceOptions=streaming_mode_at_least_once
Python
--dataflow_service_options=streaming_mode_at_least_once
Go
--dataflow_service_options=streaming_mode_at_least_once
Si no especificas la opción streaming_mode_at_least_once
, Dataflow usa el modo de transmisión exactamente una vez.
Si configuras la opción streaming_mode_at_least_once
, Dataflow habilita de forma automática Streaming Engine con la facturación basada en recursos.
Para actualizar el modo de transmisión en un trabajo en ejecución, inicia un trabajo de reemplazo.
Selecciona el modo de transmisión de una plantilla
Para seleccionar el modo de transmisión cuando ejecutas una plantilla de transmisión de Dataflow, sigue estos pasos:
Console
En la consola de Google Cloud , ve a la página Trabajos de Dataflow.
Haz clic en Crear trabajo a partir de una plantilla.
Selecciona la plantilla que deseas ejecutar en el menú desplegable Plantilla de Dataflow.
En Modo de transmisión, selecciona el modo de transmisión. Si la plantilla solo admite un modo, esta opción está inhabilitada.
gcloud
Para habilitar el modo al menos una vez, configura la opción streaming_mode_at_least_once
en la marca additional-experiments
:
--additional-experiments=streaming_mode_at_least_once
Para habilitar el modo “exactamente una vez”, configura la opción streaming_mode_exactly_once
en la marca additional-experiments
:
--additional-experiments=streaming_mode_exactly_once
Estas dos opciones son mutuamente excluyentes. Si no configuras una de estas opciones, la plantilla establece de manera predeterminada un modo de transmisión determinado por los metadatos de la plantilla. Para obtener más información, consulta Plantillas personalizadas.
REST
Usa el campo additionalExperiments
en el objeto FlexTemplateRuntimeEnvironment
(plantillas de Flex) o RuntimeEnvironment
(plantillas clásicas).
{
additionalExperiments : ["streaming_mode_at_least_once"]
...
}
Plantillas personalizadas
Si creas una plantilla personalizada que admite el procesamiento “al menos una vez”, agrega los siguientes campos de nivel superior al archivo de metadatos de la plantilla:
{
"streaming": true,
"supportsAtLeastOnce": true,
"supportsExactlyOnce": true,
"defaultStreamingMode": "AT_LEAST_ONCE"
}
Estos campos de metadatos permiten a los usuarios seleccionar el modo de transmisión cuando implementan la plantilla en la consola de Google Cloud . El campo defaultStreamingMode
es opcional y especifica el modo de transmisión predeterminado para la plantilla. Si no especificas defaultStreamingMode
y la plantilla admite ambos modos, entonces el modo “exactamente una vez” es el predeterminado.
Para obtener más información, consulta las siguientes secciones en la documentación de plantillas de Dataflow:
- Plantillas de Flex: Metadatos
- Plantillas clásicas: Usa metadatos en tu código de canalización
Cómo ver el modo de transmisión de un trabajo
Para ver el modo de transmisión de un trabajo, ve a la página Trabajos en la consola deGoogle Cloud .
El modo de transmisión también se indica en la página de detalles del trabajo, en el panel Información del trabajo.
Limitaciones
El modo de transmisión al menos una vez requiere Streaming Engine con la facturación basada en recursos.
Precios
El modo al menos una vez siempre usa la facturación basada en recursos, en la que se te factura por los recursos totales que consume tu trabajo.
El costo por unidad de las unidades de procesamiento de Streaming Engine es el mismo sin importar el modo de transmisión. Sin embargo, en la mayoría de los casos, una canalización consume muchos menos recursos totales cuando se usa el modo al menos una vez.
¿Qué sigue?
- Obtén más información sobre el procesamiento de tipo exactamente una vez.