Usar Streaming Engine en tareas de streaming

Streaming Engine de Dataflow traslada la ejecución de la canalización fuera de las máquinas virtuales de los trabajadores y la ubica en el backend del servicio Dataflow. Si no usas Streaming Engine en las tareas de streaming, el ejecutor de Dataflow ejecuta los pasos de tu flujo de procesamiento en streaming por completo en las VMs de los trabajadores, lo que consume la CPU, la memoria y el almacenamiento de disco persistente de los trabajadores.

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

  • Flujos de procesamiento que usen la versión 2.21.0 o posterior del SDK de Apache Beam para Python y Python 3.
  • Flujos de procesamiento de streaming que usen la versión 2.33.0 o una 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 de baja latencia y alta escalabilidad.

Ventajas

El modelo de Streaming Engine tiene las siguientes ventajas:

  • Se reduce el uso de recursos de CPU, memoria y almacenamiento de disco persistente en las VMs de los trabajadores. Streaming Engine funciona mejor con tipos de máquinas de trabajo más pequeños (n1-standard-2 en lugar de n1-standard-4). No requiere un disco persistente más allá de un pequeño disco de arranque de trabajador, lo que conlleva un menor consumo de recursos y cuota.
  • Escalado automático horizontal más rápido en respuesta a las variaciones en el volumen de datos entrantes. Streaming Engine ofrece un escalado de los trabajadores más fluido y granular.
  • Se ha mejorado la asistencia, ya que no es necesario volver a implementar las canalizaciones para aplicar las actualizaciones del servicio.

La mayor parte de la reducción de los recursos de los trabajadores se debe a la descarga del trabajo en el servicio Dataflow. Por este motivo, el uso de Streaming Engine conlleva un cargo.

Compatibilidad y limitaciones

  • En el caso del SDK de Java, Streaming Engine requiere la versión 2.10.0 (o una posterior) del SDK de Apache Beam.
  • En el caso del SDK de Python, Streaming Engine requiere la versión 2.16.0 (o una posterior) del SDK de Apache Beam.
  • En el caso del SDK de Go, Streaming Engine requiere la versión 2.33.0 o una posterior del SDK de Apache Beam.
  • No puedes actualizar flujos de procesamiento que ya estén en ejecución para usar Streaming Engine. Si tu flujo de procesamiento se está ejecutando en producción sin Streaming Engine y quieres usarlo, detén el flujo con la opción Drenar de Dataflow. A continuación, especifica el parámetro de Streaming Engine y vuelve a ejecutar la canalización.
  • En el caso de los trabajos que usan Streaming Engine, los datos de entrada agregados de las ventanas abiertas tienen un límite de 60 GB por clave. Los datos de entrada agregados incluyen tanto elementos almacenados en búfer como estados personalizados. Cuando una canalización supera este límite, se bloquea con una latencia alta del sistema y se muestra un mensaje en el registro de trabajos que indica que se ha superado el límite. Te recomendamos que evites los diseños de canalizaciones que generen claves grandes. Para obtener más información, consulta el artículo Escribir flujos de procesamiento de datos de Dataflow teniendo en cuenta la escalabilidad.
  • Admite claves de encriptado gestionadas por el cliente (CMEK)

Usar Streaming Engine

Esta función está disponible en todas las regiones en las que se admite Dataflow. Para ver las ubicaciones disponibles, consulta el artículo sobre ubicaciones de Dataflow.

Java

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

Para usar Streaming Engine en tus flujos de procesamiento de streaming, 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 usas la versión 2.10.0 del SDK de Apache Beam para Java.

Si usas Streaming Engine de Dataflow en tu flujo de procesamiento, no especifiques el parámetro --zone. En su lugar, especifique el parámetro --region y asigne el valor a una región admitida. Dataflow selecciona automáticamente la zona de la región que hayas especificado. Si especifica el parámetro --zone y lo define en una zona que no se encuentra en las regiones disponibles, Dataflow informa de un error.

Streaming Engine funciona mejor con tipos de máquinas de trabajador con menos núcleos. Usa el tipo de trabajo para determinar si se debe usar un tipo de máquina de trabajador con mucha memoria. Entre los tipos de máquinas que recomendamos se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes definir --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 una posterior del SDK de Apache Beam para Python.

Streaming Engine está habilitado de forma predeterminada en los nuevos flujos de procesamiento de streaming 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 en las canalizaciones de streaming. En la versión 2.44.0 o anteriores 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 Streaming Engine de Dataflow en tu flujo de procesamiento, no especifiques el parámetro --zone. En su lugar, especifique el parámetro --region y asigne el valor a una región admitida. Dataflow selecciona automáticamente la zona de la región que hayas especificado. Si especifica el parámetro --zone y lo define en una zona que no se encuentra en las regiones disponibles, Dataflow informa de un error.

Streaming Engine funciona mejor con tipos de máquinas de trabajador con menos núcleos. Usa el tipo de trabajo para determinar si se debe usar un tipo de máquina de trabajador con mucha memoria. Entre los tipos de máquinas que recomendamos se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes definir --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 Go.

Streaming Engine está habilitado de forma predeterminada en los nuevos flujos de procesamiento de transmisión de Dataflow que usan el SDK de Apache Beam Go.

Si quieres inhabilitar Streaming Engine en tu flujo de procesamiento de streaming de Go, especifica el siguiente parámetro. Este parámetro debe especificarse cada vez que quieras inhabilitar Streaming Engine.

--experiments=disable_streaming_engine

Si usas Streaming Engine de Dataflow en tu flujo de procesamiento, no especifiques el parámetro --zone. En su lugar, especifique el parámetro --region y asigne el valor a una región admitida. Dataflow selecciona automáticamente la zona de la región que hayas especificado. Si especifica el parámetro --zone y lo define en una zona que no se encuentra en las regiones disponibles, Dataflow informa de un error.

Streaming Engine funciona mejor con tipos de máquinas de trabajador con menos núcleos. Usa el tipo de trabajo para determinar si se debe usar un tipo de máquina de trabajador con mucha memoria. Entre los tipos de máquinas que recomendamos se incluyen --workerMachineType=n1-standard-2 y --workerMachineType=n1-highmem-2. También puedes definir --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.

CLI de gcloud

Cuando ejecutes tu flujo de procesamiento con 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 el motor de streaming, usa la siguiente marca:

--additional-experiments=disable_streaming_engine

REST

Cuando ejecutes tu flujo de procesamiento mediante el método projects.locations.jobs.create de la API REST, usa el recurso Job para habilitar o inhabilitar Streaming Engine. Para habilitar Streaming Engine, en environment, asigna el valor enable_streaming_engine al campo experiments:

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

Para inhabilitar Streaming Engine, en environment, asigna el valor disable_streaming_engine al campo experiments:

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

Precios

Streaming Engine de Dataflow ofrece un modelo de facturación basado en recursos en el que se te cobra por el total de recursos que consume tu tarea. Con la facturación basada en recursos, los recursos de Streaming Engine que consume tu tarea se miden y se registran en unidades de computación de Streaming Engine. Se te cobra por la CPU y la memoria de los trabajadores, así como por las unidades de computación de Streaming Engine.

Usar 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 procesamiento de datos (versión antigua)

Si no habilitas la facturación basada en recursos, se te cobrarán las tareas mediante la facturación por datos procesados antigua.

Verificar el modelo de facturación

A menos que uses Dataflow Prime, cuando tengas tareas que utilicen la facturación basada en recursos, la factura incluirá el SKU Streaming Engine Compute Unit. Si tienes tareas que usan la facturación por datos procesados, la factura incluye el SKU Streaming Engine data processed. Si tienes algunas tareas que usan la facturación basada en recursos y otras que usan la facturación basada en datos procesados, la factura incluirá ambos SKUs.

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

Para ver qué modelo de precios usa tu tarea, en la interfaz de monitorización de Dataflow, selecciona tu tarea. Si tu tarea usa la facturación basada en recursos, el panel lateral Información de la tarea incluye el campo Unidades de computación de Streaming Engine.

Si tienes alguna pregunta sobre la facturación, ponte en contacto con Cloud Customer Care.