Dataflow admite dos modos para las tareas de streaming:
- Modo de procesamiento una sola vez. Este modo es el predeterminado para todos los trabajos de streaming de Dataflow. En este modo, Dataflow se asegura de que los registros no se pierdan ni se dupliquen a medida que los datos se mueven por 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, en este modo se pueden crear registros duplicados. En los casos prácticos que pueden tolerar duplicados, el modo "al menos una vez" puede reducir significativamente el coste y la latencia de tu trabajo.
Elegir el modo de streaming que quieras usar
Elige el modo de entrega única si necesitas asegurarte de que la canalización proporciona resultados exactos y una semántica predecible. Por ejemplo:
- Tuberías con agregaciones, como recuento, suma o media.
- Casos prácticos de importancia crítica para la empresa que dependen de que los registros se procesen una sola vez. Por ejemplo, la detección de fraudes y amenazas de red, y los paneles de control 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 puede beneficiarse de una reducción de costes o de latencia. Por ejemplo:
- Cargas de trabajo en las que la desduplicación se realiza después de Dataflow. Por ejemplo, las que escriben en BigQuery o en un almacén de datos SQL.
- Tuberías de solo asignación sin agregaciones. Por ejemplo, el procesamiento de registros, la captura de datos de cambios o los trabajos de extracción, transformación y carga (ETL), en los que la canalización solo realiza transformaciones por elemento, como la traducción de esquemas.
- Las canalizaciones en las que el receptor de salida no puede garantizar la entrega exactamente una vez, como Pub/Sub. En ese caso, la desduplicación dentro de la canalización podría ser innecesaria y podrías beneficiarte de la reducción de costes y latencia del modo de streaming al menos una vez.
- Pipelines que leen datos de Pub/Sub. La lectura de 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 coste y la latencia de una canalización. El impacto exacto depende de las características específicas de la canalización. Prueba el streaming de 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 del número de reintentos. La tasa de referencia suele ser baja (<1%). Sin embargo, pueden producirse picos si los nodos de trabajo fallan o si otras condiciones provocan llamadas RPC repetidas.
El modo de transmisión afecta a la forma en que Streaming Engine procesa los registros, pero no cambia la semántica de los conectores de E/S. Te recomendamos que alinees la semántica de entrada/salida con el modo de streaming. Por ejemplo, si usas el modo de streaming al menos una vez con el conector de E/S de BigQuery, asigna el valor
STORAGE_API_AT_LEAST_ONCE
al modo de escritura. Las plantillas de Dataflow proporcionadas por Google habilitan automáticamente esta opción cuando usas el streaming al menos una vez.Las transformaciones de elementos, como
Map
, no siempre son idempotentes. Por ejemplo, considera una función que recibe un mensaje y le añade la marca de tiempo actual. En ese caso, un registro duplicado puede generar varias salidas distintas. Puede que el modo "Al menos una vez" no sea adecuado para esa canalización.
Definir el modo de streaming
El procesamiento exactamente una vez es el ajuste predeterminado de todos los trabajos de Dataflow. Para habilitar el modo de streaming al menos una vez, define 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 usará el modo de transmisión exactamente una vez.
Si seleccionas la opción streaming_mode_at_least_once
, Dataflow habilitará automáticamente Streaming Engine con facturación basada en recursos.
Para actualizar el modo de streaming de una tarea en ejecución, inicia una tarea de sustitución.
Seleccionar el modo de streaming de una plantilla
Para seleccionar el modo de streaming al ejecutar una plantilla de streaming de Dataflow, sigue estos pasos:
Consola
En la Google Cloud consola, ve a la página Trabajos de Dataflow.
Haz clic en Crear tarea a partir de plantilla.
En el menú desplegable Plantilla de flujo de datos, selecciona la plantilla que quieras ejecutar.
En Modo de streaming, selecciona el modo de streaming. Si la plantilla solo admite un modo, esta opción estará inhabilitada.
gcloud
Para habilitar el modo "al menos una vez", define la opción streaming_mode_at_least_once
en la marca additional-experiments
:
--additional-experiments=streaming_mode_at_least_once
Para habilitar el modo de entrega exactamente una vez, define la opción streaming_mode_exactly_once
en la marca additional-experiments
:
--additional-experiments=streaming_mode_exactly_once
Estas dos opciones se excluyen mutuamente. Si no seleccionas una de estas opciones, la plantilla usará de forma predeterminada un modo de streaming 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 Flex) o RuntimeEnvironment
(plantillas clásicas).
{
additionalExperiments : ["streaming_mode_at_least_once"]
...
}
Plantillas personalizadas
Si crea una plantilla personalizada que admita el procesamiento al menos una vez, añada 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 streaming al implementar la plantilla en la consola de Google Cloud . El campo defaultStreamingMode
es opcional y especifica el modo de streaming predeterminado de la plantilla. Si no especifica defaultStreamingMode
y la plantilla admite ambos modos, el modo de entrega única será el predeterminado.
Para obtener más información, consulta las siguientes secciones de la documentación de plantillas de Dataflow:
- Plantillas Flex: metadatos
- Plantillas clásicas: usar metadatos en el código de la canalización
Ver el modo de streaming de un trabajo
Para ver el modo de streaming de un trabajo, ve a la página Trabajos de laGoogle Cloud consola.
El modo de streaming también se indica en la página de detalles del trabajo, en el panel Información del trabajo.
Limitaciones
El modo de streaming "al menos una vez" requiere Streaming Engine con facturación basada en recursos.
Precios
El modo "Al menos una vez" siempre usa la facturación basada en recursos, por la que se te cobra por el total de recursos que consume tu tarea.
El coste por unidad de las unidades de computación de Streaming Engine es el mismo independientemente del modo de streaming. 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".
Siguientes pasos
- Consulta más información sobre el procesamiento exactamente una vez.