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 promedio
- Casos de uso fundamentales para la empresa que dependen de que los registros se procesen una sola vez (algunos ejemplos son 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 la reducción de costos o latencia. Por ejemplo:
- Cargas de trabajo en las que la anulación de duplicación se realiza en sentido descendente desde Dataflow (por ejemplo, canalizaciones que escriben en BigQuery o en un almacén de datos SQL)
- Canalizaciones solo de asignación 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 anulación de duplicación dentro de la canalización podría ser innecesaria y puedes beneficiarte de la reducción de costos y latencia del modo de transmisión al menos una vez.
- 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 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. Prueba la transmisión al menos una vez con cargas realistas para evaluar el impacto.
Cuando se usa el modo al menos una vez, la tasa de registros duplicados depende de la cantidad de reintentos. Por lo general, la tasa de referencia es baja (<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 que proporciona Google habilitan automáticamente esta opción cuando usas la transmisión al menos una vez.Las transformaciones 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.
Configura 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
streaming_mode_at_least_once
opción de servicio.
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 Google Cloud consola de, 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 Google Cloud consola. 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
Visualiza 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 Google Cloud consola.
El modo de transmisión también aparece 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.