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, que no se pierdan los 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 de forma significativa 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 fundamentales para la empresa que dependen de que los registros se procesen una vez y solo una 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 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 un almacén de datos de SQL.
- Canalizaciones de solo 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 una entrega exacta una vez, como Pub/Sub. En ese caso, la anulación de duplicación dentro de la canalización puede ser innecesaria y puedes beneficiarte del costo y la latencia reducidos del modo de transmisión al menos una vez.
- Canalizaciones que leen desde Pub/Sub. La lectura de Pub/Sub se optimiza de forma significativa cuando se usa el modo al menos una vez.
Consideraciones adicionales
El modo al menos una vez puede reducir de forma significativa el costo y la latencia de una canalización. El impacto exacto depende de los detalles de la canalización. Prueba la transmisión al menos una vez en 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 del modelo 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 tu 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 a nivel de elementos 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 varios resultados distintos. El modo al menos una vez podría no ser 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, configura 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, detén el trabajo existente y ejecuta uno de reemplazo. Para obtener más información, consulta 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 admita 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 defaultStreamingModeg
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 consola de Google Cloud.
El modo de transmisión también se muestra 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.