Configura el modo de transmisión de la canalización

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 se asegura de 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 registros de entrada). Sin embargo, es posible que se generen registros duplicados en este modo. Para los casos de uso que pueden tolerar duplicados, el modo al menos una vez puede reducir mucho el costo y la latencia del 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 sola vez Algunos ejemplos incluyen detección de fraudes, detección de amenazas de red y 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 latencia o un costo reducido. Por ejemplo:

  • Cargas de trabajo en las que se realiza la anulación de duplicación en sentido descendente desde Dataflow Por ejemplo, las canalizaciones que escriben en BigQuery o un almacén de datos de SQL.
  • Canalizaciones de solo mapas sin agregaciones. Los ejemplos incluyen trabajos de procesamiento de registros, captura de datos modificados o extracción, transformación y carga (ETL), en los 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 no ser necesaria 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. La tasa de referencia suele ser baja (<1%). Sin embargo, los aumentos repentinos pueden ocurrir si los nodos trabajadores fallan 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, configura el modo de escritura en STORAGE_API_AT_LEAST_ONCE. Las plantillas de Dataflow que proporciona Google habilitan de forma automática esta opción cuando usas la transmisión al menos una vez.

  • Las transformaciones en términos 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. 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, 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 un trabajo 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

  1. En la consola de Google Cloud, ve a la página Trabajos de Dataflow.

    Ir a Trabajos

  2. Haz clic en Crear trabajo a partir de una plantilla.

  3. Selecciona la plantilla que deseas ejecutar en el menú desplegable Plantilla de Dataflow.

  4. 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 FlexTemplateRuntimeEnvironment (plantillas flexibles) o RuntimeEnvironment (clásico) Templates).

{
  additionalExperiments : ["streaming_mode_at_least_once"]
  ...
}

Plantillas personalizadas

Si creas una plantilla personalizada que admite un 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:

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.

Ir a Trabajos

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?