Usa Streaming Engine para trabajos de transmisión

Streaming Engine de Dataflow retira la ejecución de la canalización de las máquinas virtuales (VM) de trabajador y la traslada hacia el backend del servicio de Dataflow. Cuando no usas Streaming Engine para los trabajos de transmisión, el ejecutor de Dataflow ejecuta los pasos de la canalización de transmisión por completo en las VM de trabajador, lo que consume CPU, memoria y almacenamiento en disco persistente.

Streaming Engine está habilitado de forma predeterminada para las siguientes canalizaciones:

  • Canalizaciones de transmisión que usan la versión 2.21.0 o posterior del SDK de Apache Beam para Python y Python 3.
  • Canalizaciones de transmisión que usan la versión 2.33.0 o posterior del SDK de Apache Beam para Go.

Para obtener más información sobre la implementación de Streaming Engine, consulta Streaming Engine: Modelo de ejecución para el procesamiento de datos altamente escalable y de baja latencia.

Beneficios

El modelo de Streaming Engine tiene los siguientes beneficios:

  • Menor uso de recursos de CPU, memoria y almacenamiento en el disco persistente en las VMs de trabajador. Streaming Engine funciona mejor con tipos de máquina de trabajador más pequeñas (n1-standard-2 en lugar de n1-standard-4). No requiere un disco persistente además de un disco de arranque pequeño, lo que genera un menor consumo de recursos y cuotas.
  • Ajuste de escala automático horizontal más sensible en la respuesta a las variaciones en el volumen de datos entrantes. Streaming Engine ofrece un escalamiento más uniforme y detallado de los trabajadores.
  • Compatibilidad mejorada, ya que no es necesario volver a implementar las canalizaciones para aplicar las actualizaciones del servicio.

La mayor parte de la reducción en los recursos de los trabajadores proviene de transferir el trabajo al servicio de Dataflow. Por esa razón, hay un costo asociado con el uso de Streaming Engine.

Asistencia y limitaciones

  • Para el SDK de Java, Streaming Engine requiere la versión 2.10.0 o posterior del SDK de Apache Beam.
  • Para el SDK de Python, Streaming Engine requiere la versión 2.16.0 o posterior del SDK de Apache Beam.
  • Para el SDK de Go, Streaming Engine requiere la versión 2.33.0 o una posterior del SDK de Apache Beam.
  • No puedes actualizar canalizaciones que ya se estén ejecutando para usar Streaming Engine. Si la canalización se ejecuta en producción sin Streaming Engine y deseas usar Streaming Engine, detén la canalización mediante la opción Desviar de Dataflow. Luego, especifica el parámetro de Streaming Engine y vuelve a ejecutar la canalización.
  • En los trabajos que usan Streaming Engine, los datos de entrada agregados para las ventanas abiertas tienen un límite de 60 GB por clave. Los datos de entrada agregados incluyen los elementos almacenados en búfer y el estado personalizado. Cuando una canalización excede este límite, la canalización se atasca con un gran retraso del sistema, y un mensaje en el registro del trabajo indica que se superó el límite. Como práctica recomendada, evita los diseños de canalización que generen claves grandes. Para obtener más información, consulta Escribe canalizaciones de Dataflow teniendo en cuenta la escalabilidad.
  • Admite claves de encriptación administradas por el cliente (CMEK)

Usa Streaming Engine

Esta característica está disponible en todas las regiones en las que Dataflow sea compatible. Para ver las ubicaciones disponibles, consulta la página Ubicaciones de Dataflow.

Java

Streaming Engine requiere la versión 2.10.0 o posterior del SDK de Apache Beam para Java.

Para usar Streaming Engine en tus canalizaciones de transmisión, especifica el siguiente parámetro:

  • --enableStreamingEngine si usas la versión 2.11.0 o una posterior del SDK de Apache Beam para Java.
  • --experiments=enable_streaming_engine si la versión 2.10.0 del SDK de Apache Beam para Java

Si usas Dataflow Streaming Engine para la canalización, no especifiques el parámetro --zone. En su lugar, especifica el parámetro --region y establece el valor en una región compatible. Dataflow selecciona de forma automática la zona en la región especificada. Si especificas el parámetro --zone y lo configuras en una zona fuera de las regiones disponibles, Dataflow informará un error.

Streaming Engine funciona mejor con tipos de máquina con núcleo de trabajador más pequeñas. Usa el tipo de trabajo para determinar si usa un tipo de máquina de trabajador de memoria alta. Entre los tipos de máquina de ejemplo que recomendamos, se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes establecer --diskSizeGb=30 porque Streaming Engine solo necesita espacio para la imagen de arranque del trabajador y los registros locales. Estos valores son los predeterminados.

Python

Streaming Engine requiere la versión 2.16.0 o posterior del SDK de Apache Beam para Python.

Streaming Engine se habilita de forma predeterminada para las nuevas canalizaciones de transmisión de Dataflow cuando se cumplen las siguientes condiciones:

En la versión 2.45.0 o posterior del SDK de Python, no puedes inhabilitar Streaming Engine para las canalizaciones de transmisión. En la versión 2.44.0 o anterior del SDK de Python, para inhabilitar Streaming Engine, especifica el siguiente parámetro:

--experiments=disable_streaming_engine

Si usas Python 2 para habilitar Streaming Engine, especifica el siguiente parámetro:

--enable_streaming_engine

Si usas Dataflow Streaming Engine en la canalización, no especifiques el parámetro --zone. En su lugar, especifica el parámetro --region y establece el valor en una región compatible. Dataflow selecciona de forma automática la zona en la región especificada. Si especificas el parámetro --zone y lo configuras en una zona fuera de las regiones disponibles, Dataflow informará un error.

Streaming Engine funciona mejor con tipos de máquina con núcleo de trabajador más pequeñas. Usa el tipo de trabajo para determinar si usa un tipo de máquina de trabajador de memoria alta. Entre los tipos de máquina de ejemplo que recomendamos, se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes establecer --disk_size_gb=30 porque Streaming Engine solo necesita espacio para la imagen de arranque del trabajador y los registros locales. Estos valores son los predeterminados.

Go

Streaming Engine requiere la versión 2.33.0 o una posterior del SDK de Apache Beam para Go.

Streaming Engine está habilitado de forma predeterminada para las nuevas canalizaciones de transmisión de Dataflow que usan el SDK de Apache Beam Go.

Si deseas inhabilitar Streaming Engine en la canalización de transmisión de Go, especifica el siguiente parámetro. Este parámetro debe especificarse cada vez que desees inhabilitar Streaming Engine.

--experiments=disable_streaming_engine

Si usas Dataflow Streaming Engine en la canalización, no especifiques el parámetro --zone. En su lugar, especifica el parámetro --region y establece el valor en una región compatible. Dataflow selecciona de forma automática la zona en la región especificada. Si especificas el parámetro --zone y lo configuras en una zona fuera de las regiones disponibles, Dataflow informará un error.

Streaming Engine funciona mejor con tipos de máquina con núcleo de trabajador más pequeñas. Usa el tipo de trabajo para determinar si usa un tipo de máquina de trabajador de memoria alta. Entre los tipos de máquina de ejemplo que recomendamos, se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes establecer --disk_size_gb=30 porque Streaming Engine solo necesita espacio para la imagen de arranque del trabajador y los registros locales. Estos valores son los predeterminados.

gcloud CLI

Cuando ejecutas la canalización mediante el comando gcloud dataflow jobs run o el comando gcloud dataflow flex-template run, para habilitar Streaming Engine usa la siguiente marca:

--enable-streaming-engine

Para inhabilitar Streaming Engine, usa la siguiente marca:

--additional-experiments=disable_streaming_engine

REST

Cuando ejecutes tu canalización con el método projects.locations.jobs.create en la API de REST, usa el recurso Job para habilitar o inhabilitar Streaming Engine. Para habilitar Streaming Engine, en environment, establece el campo experiments en enable_streaming_engine:

"environment": {
          "experiments": "enable_streaming_engine"
      }

Para inhabilitar Streaming Engine, en environment, configura el campo experiments como disable_streaming_engine:

"environment": {
          "experiments": "disable_streaming_engine"
      }

Precios

Dataflow Streaming Engine ofrece un modelo de facturación basada en recursos en el que se te factura por los recursos totales que consume el trabajo. Con la facturación basada en recursos, los recursos de Streaming Engine que consume tu trabajo se miden en unidades de procesamiento de Streaming Engine. Se te factura por la CPU de los trabajadores, la memoria de los trabajadores y las unidades de procesamiento de Streaming Engine.

Usa la facturación basada en recursos

Para usar la facturación basada en recursos, cuando inicies o actualices tu trabajo, incluye la siguiente opción de servicio de Dataflow.

Java

--dataflowServiceOptions=enable_streaming_engine_resource_based_billing

Python

--dataflow_service_options=enable_streaming_engine_resource_based_billing

Go

--dataflow_service_options=enable_streaming_engine_resource_based_billing

Facturación por datos procesados (heredada)

A menos que habilites la facturación basada en recursos, tus trabajos se facturan a través la facturación por datos procesados heredada.

Verifica el modelo de facturación

A menos que uses Dataflow Prime, cuando tienes trabajos que usan la facturación basada en recursos, la factura incluye el SKU Streaming Engine Compute Unit. Cuando tienes trabajos que usan la facturación por datos procesados, la factura incluye el SKU Streaming Engine data processed. Si tienes algunos trabajos que usan la facturación basada en recursos y otros que usan la facturación por datos procesados, la factura incluye ambos SKU.

Cuando usas Dataflow Prime con facturación basada en recursos, se usa el SKU de la unidad de procesamiento de datos (DCU).

Para ver qué modelo de precios usa tu trabajo, selecciona tu trabajo en la interfaz de supervisión de Dataflow. Si tu trabajo usa una facturación basada en recursos, el panel lateral Información del trabajo incluye un campo Unidades de procesamiento de Streaming Engine.

Si tienes preguntas sobre tu facturación, comunícate con Atención al cliente de Cloud.