Afina el ajuste de escala automático horizontal para canalizaciones de transmisión

En las canalizaciones de transmisión con datos de entrada fluctuantes o de gran volumen, a menudo necesitas equilibrar la latencia de procesamiento con los costos operativos. Si bien Dataflow proporciona una configuración predeterminada de ajuste de escala automático horizontal que se adapta a muchas cargas de trabajo, es posible que el comportamiento predeterminado no coincida con tus requisitos específicos. Por ejemplo, tal vez quieras reducir los costos aceptando una latencia promedio más alta, escalar verticalmente con mayor rapidez para controlar los aumentos repentinos de tráfico o aplicar límites estrictos a la asignación de trabajadores.

Ajustar el escalado automático horizontal te permite personalizar la forma en que Dataflow escala la capacidad de los trabajadores en respuesta a las demandas cambiantes de la carga de trabajo. Si ajustas los parámetros de ajuste de escala automático, puedes optimizar la capacidad de procesamiento de la canalización, controlar los costos de procesamiento y cumplir con tus objetivos de latencia específicos.

Optimiza el ajuste de escala automático horizontal

Para optimizar el ajuste de escala automático horizontal, puedes ajustar los siguientes parámetros:

Configura el rango de ajuste de escala automático

Cuando creas un trabajo de transmisión nuevo, puedes establecer la cantidad inicial y la máxima de trabajadores. Para hacerlo, especifica las siguientes opciones de canalización:

Java

  • --numWorkers: Es la cantidad inicial de trabajadores disponibles cuando la canalización comienza a ejecutarse.
  • --maxNumWorkers: Es la cantidad máxima de trabajadores disponibles para tu canalización.

Python

  • --num_workers: Es la cantidad inicial de trabajadores disponibles cuando la canalización comienza a ejecutarse.
  • --max_num_workers: Es la cantidad máxima de trabajadores disponibles para tu canalización.

Go

  • --num_workers: Es la cantidad inicial de trabajadores disponibles cuando la canalización comienza a ejecutarse.
  • --max_num_workers: Es la cantidad máxima de trabajadores disponibles para tu canalización.

La marca --maxNumWorkers es opcional para los trabajos de transmisión que usan Streaming Engine. El valor predeterminado es 100. Para los trabajos de transmisión que no usan Streaming Engine, se requiere --maxNumWorkers cuando el ajuste de escala automático horizontal está habilitado.

El valor inicial de --maxNumWorkers también determina cuántos discos persistentes se asignan para el trabajo. Las canalizaciones se implementan con un grupo fijo de discos persistentes, cuya cantidad es igual a --maxNumWorkers. Durante la transmisión, los discos persistentes se redistribuyen de modo que cada trabajador obtenga el mismo número de discos adjuntos.

Si configuras --maxNumWorkers, asegúrate de que el valor proporcione suficientes discos para la canalización. Ten en cuenta el crecimiento futuro cuando establezcas el valor inicial. Para obtener información sobre el rendimiento de Persistent Disk, consulta Configura tu Persistent Disk y las VMs. Dataflow factura el uso de Persistent Disk y tiene cuotas de Compute Engine, incluidas las cuotas de Persistent Disk.

De forma predeterminada, la cantidad mínima de trabajadores es 1 para los trabajos de transmisión que usan Streaming Engine y (maxNumWorkers/15), redondeada hacia arriba, para los trabajos que no usan Streaming Engine.

Actualiza el rango del ajuste de escala automático

Para los trabajos que usan Streaming Engine, puedes ajustar la cantidad de trabajadores mínima y máxima sin detener ni reemplazar el trabajo. Para ajustar estos valores, usa una actualización de trabajo en tránsito. Actualiza las siguientes opciones de trabajo:

  • --min-num-workers: es la cantidad mínima de trabajadores.
  • --max-num-workers: es la cantidad máxima de trabajadores.

gcloud

Usa el comando gcloud dataflow jobs update-options:

gcloud dataflow jobs update-options \
  --region=REGION \
  --min-num-workers=MINIMUM_WORKERS \
  --max-num-workers=MAXIMUM_WORKERS \
  JOB_ID

Reemplaza lo siguiente:

  • REGION: es el ID de región del extremo regional del trabajo
  • MINIMUM_WORKERS: es la cantidad mínima de instancias de Compute Engine
  • MAXIMUM_WORKERS: es la cantidad máxima de instancias de Compute Engine
  • JOB_ID: es el ID del trabajo que se actualizará

También puedes actualizar --min-num-workers y --max-num-workers de forma individual.

REST

Usa el método projects.locations.jobs.update:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtime_updatable_params.max_num_workers,runtime_updatable_params.min_num_workers
{
  "runtime_updatable_params": {
    "min_num_workers": MINIMUM_WORKERS,
    "max_num_workers": MAXIMUM_WORKERS
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud del trabajo de Dataflow.
  • REGION: es el ID de región del extremo regional del trabajo
  • JOB_ID: es el ID del trabajo que se actualizará
  • MINIMUM_WORKERS: es la cantidad mínima de instancias de Compute Engine
  • MAXIMUM_WORKERS: es la cantidad máxima de instancias de Compute Engine

También puedes actualizar min_num_workers y max_num_workers de forma individual. Especifica qué parámetros actualizar en el parámetro de búsqueda updateMask e incluye los valores actualizados en el campo runtimeUpdatableParams del cuerpo de la solicitud. En el siguiente ejemplo, se actualiza min_num_workers:

PUT https://dataflow.googleapis.com/v1b3/projects/my_project/locations/us-central1/jobs/job1?updateMask=runtime_updatable_params.min_num_workers
{
  "runtime_updatable_params": {
    "min_num_workers": 5
  }
}

Para trabajos que no usan Streaming Engine, puedes reemplazar el trabajo existente por un valor actualizado de maxNumWorkers.

Si actualizas un trabajo de transmisión que no usa Streaming Engine, el trabajo actualizado tiene inhabilitado el ajuste de escala automático horizontal de forma predeterminada. Para mantener habilitado el ajuste de escala automático, especifica --autoscalingAlgorithm y --maxNumWorkers para el trabajo actualizado.

Establece la sugerencia de uso del trabajador

Dataflow usa el uso de CPU promedio como señal de cuándo aplicar el ajuste de escala automático horizontal. De forma predeterminada, Dataflow establece un uso objetivo de CPU de 0.8. Cuando el uso está fuera de este rango, Dataflow puede agregar o quitar trabajadores.

Para obtener más control sobre el comportamiento del ajuste de escala automático, puedes establecer el uso objetivo de CPU en un valor en el rango [0.1, 0.9].

  • Establece un valor de uso de CPU más bajo si quieres lograr latencias máximas más bajas. Un valor más bajo permite que Dataflow escale horizontalmente de forma más agresiva en respuesta al uso creciente de los trabajadores y reduce la escala de forma más conservadora para mejorar la estabilidad. Un valor más bajo también proporciona más espacio cuando la canalización se ejecuta en un estado estable, lo que suele generar una latencia final más baja. (La latencia final mide los tiempos de espera más largos antes de que se procese un registro nuevo).

  • Establece un valor más alto si deseas ahorrar recursos y mantener los costos más bajos cuando el tráfico tenga aumentos repentinos. Un valor más alto evita un escalamiento vertical excesivo, a expensas de una latencia más alta.

Para configurar la sugerencia de uso cuando ejecutas un trabajo que no sea de plantilla, configura la opción de servicio worker_utilization_hint. Para un trabajo de plantilla, actualiza la sugerencia de uso, ya que las opciones de servicio no son compatibles.

En el siguiente ejemplo, se muestra cómo usar worker_utilization_hint:

Java

--dataflowServiceOptions=worker_utilization_hint=TARGET_UTILIZATION

Reemplaza TARGET_UTILIZATION por un valor en el rango [0.1, 0.9].

Python

--dataflow_service_options=worker_utilization_hint=TARGET_UTILIZATION

Reemplaza TARGET_UTILIZATION por un valor en el rango [0.1, 0.9].

Go

--dataflow_service_options=worker_utilization_hint=TARGET_UTILIZATION

Reemplaza TARGET_UTILIZATION por un valor en el rango [0.1, 0.9].

Para las canalizaciones nuevas, te recomendamos que realices pruebas en cargas realistas mediante la configuración predeterminada. Luego, evalúa el comportamiento del ajuste de escala automático según se aplica a tu canalización y realiza ajustes según sea necesario.

La sugerencia de uso es solo un factor que Dataflow usa cuando decide si escalar los trabajadores. Otros factores, como las tareas pendientes y las claves disponibles, pueden anular el valor de la sugerencia. Además, la sugerencia no es un objetivo estricto. El escalador automático intenta mantener el uso de CPU dentro del rango del valor de la sugerencia, pero la métrica de uso agregado puede ser mayor o menor. Para obtener más información, consulta Heurísticas del ajuste de escala automático de transmisión.

Actualiza la sugerencia de uso

Para actualizar la sugerencia de uso mientras se ejecuta un trabajo, realiza una actualización en tránsito de la siguiente manera:

gcloud

Usa el comando de gcloud dataflow jobs update-options:

gcloud dataflow jobs update-options \
  --region=REGION \
  --worker-utilization-hint=TARGET_UTILIZATION \
  JOB_ID

Reemplaza lo siguiente:

  • REGION: es el ID de región del extremo regional del trabajo
  • JOB_ID: es el ID del trabajo que se actualizará
  • TARGET_UTILIZATION: un valor en el rango [0.1, 0.9]

Para restablecer la sugerencia de uso al valor predeterminado, usa el siguiente comando de gcloud:

gcloud dataflow jobs update-options \
  --unset-worker-utilization-hint \
  --region=REGION \
  --project=PROJECT_ID \
  JOB_ID

REST

Usa el método projects.locations.jobs.update:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtime_updatable_params.worker_utilization_hint
{
  "runtime_updatable_params": {
    "worker_utilization_hint": TARGET_UTILIZATION
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud del trabajo de Dataflow.
  • REGION: es el ID de región del extremo regional del trabajo.
  • JOB_ID: es el ID del trabajo que se actualizará.
  • TARGET_UTILIZATION: un valor en el rango [0.1, 0.9]

Establece la sugerencia de paralelismo de trabajadores

Para controlar el ajuste de escala automático con operaciones largas que dependen menos de las CPU, como las cargas de trabajo con uso intensivo de AA, puedes establecer la sugerencia de paralelismo de trabajadores con las sugerencias de recursos de Apache Beam. Estas sugerencias cambian el ajuste de escala automático a un modo diferente que está optimizado para cargas de trabajo que hacen un uso intensivo de GPU o transformaciones con un tiempo de procesamiento largo.

En el siguiente ejemplo, se muestra cómo adjuntar una sugerencia de paralelismo a una transformación:

Java

pcoll.apply(MyCompositeTransform.of(...)
  .setResourceHints(
      ResourceHints.create()
          .withMaxActiveBundlesPerWorker(TARGET_PARALLELISM_PER_WORKER)))

Reemplaza TARGET_PARALLELISM_PER_WORKER por un valor adecuado para tu caso de uso. Para obtener orientación general, consulta cómo elegir un buen valor inicial.

Python

pcoll | MyPTransform().with_resource_hints(
  max_active_bundles_per_worker="TARGET_PARALLELISM_PER_WORKER")

Reemplaza TARGET_PARALLELISM_PER_WORKER por un valor adecuado para tu caso de uso. Para obtener orientación general, consulta cómo elegir un buen valor inicial.

Elige el valor de la sugerencia de paralelismo de trabajadores

Para los casos de uso de AA, un buen valor inicial es equivalente a la cantidad de modelos que se ejecutan en paralelo dentro de cada trabajador. Este valor está limitado por la capacidad de los aceleradores en el trabajador y el tamaño del modelo.

Para otros casos de uso, la canalización está vinculada a la memoria o a la CPU. En el caso de las canalizaciones con límite de memoria, usa el límite de memoria para calcular el procesamiento paralelo máximo. Para las canalizaciones vinculadas a la CPU, se recomienda mantener la política de ajuste de escala automático predeterminada, en lugar de proporcionar una sugerencia de paralelismo.

Es posible ajustar el valor para adaptarlo a las necesidades de procesamiento de otras etapas, como escribir en un receptor. Aumentar el valor en 1 o 2 cuando el paralelismo de tu modelo es 2 ayuda a reconocer el tiempo de procesamiento más rápido de la escritura en el receptor, ya que le da más margen para tener en cuenta el procesamiento realizado en otras etapas. Si tu canalización no implica una redistribución y las transformaciones se fusionan en una sola etapa, no es necesario ajustar el valor para otras transformaciones.

Este valor también se puede ajustar para simular los efectos de los retrasos aceptables en la lista de tareas pendientes. Por ejemplo, si te sientes cómodo con un máximo de 10 min de retraso y el tiempo de procesamiento promedio de tu modelo es de 1 min, puedes aumentar el valor en 1, suponiendo que la cantidad máxima de trabajadores se establece en 10.

Heurística del ajuste de escala automático con uso intensivo de GPU

En el parámetro de uso intensivo de GPU que se indica a través de la sugerencia de paralelismo de configuración, Dataflow tiene en cuenta varios factores cuando se realiza el ajuste de escala automático. Entre estos, se incluyen los siguientes:

  • Claves disponibles. Las claves son la unidad fundamental de paralelismo en Dataflow.
  • Cantidad máxima de paquetes activos por trabajador. Esto sugiere la cantidad máxima ideal de paralelismo de procesamiento dentro del trabajador.

La idea general detrás de las decisiones de escalamiento es calcular los trabajadores necesarios para controlar la carga actual, como lo indican las claves disponibles. Por ejemplo, si hay 100 claves disponibles para procesar y el paralelismo máximo por trabajador es 10, debes intentar tener 10 trabajadores en total.

Si tu canalización es compleja y tiene una carga de trabajo intensa de GPU y numerosas transformaciones que requieren mucha CPU, te recomendamos que habilites el ajuste adecuado. Esto permite que el servicio distinga bien entre el trabajo que requiere un uso intensivo de la CPU y el que requiere un uso intensivo de la GPU, y, luego, escale cada grupo de trabajadores según corresponda.

Establece el nivel de latencia

El ajuste de escala automático horizontal de Dataflow usa la duración de las tareas pendientes para determinar cuándo escalar los trabajadores. De forma predeterminada, Dataflow busca una duración de trabajo pendiente de menos de 15 segundos, lo que es adecuado para las cargas de trabajo en tiempo real, pero puede generar costos de recursos más altos.

En el caso de los trabajos de transmisión que usan Streaming Engine, puedes configurar el umbral de tareas pendientes eligiendo un nivel de latencia. Un nivel de latencia se asigna a una duración de tareas pendientes objetivo, lo que te permite configurar la sensibilidad del escalador automático a la duración de las tareas pendientes. Una decisión de ajuste de escala automático solo se activa cuando la duración de las tareas pendientes supera el nivel seleccionado durante varios minutos.

En la siguiente tabla, se describen los niveles de latencia disponibles:

Nivel de latencia Tiempo estimado permitido para el trabajo pendiente Caso de uso previsto
low_latency Menos de 15 segundos Prioriza el escalamiento vertical rápido para mantener la lista de tareas pendientes al mínimo. Valor predeterminado que se selecciona si no se especifica ningún nivel
medium_latency Menos de 2 minutos Es un punto medio equilibrado entre la latencia y los costos de recursos.
high_latency Menos de 10 minutos Prioriza el ahorro de costos, ya que permite que se acumule la lista de tareas pendientes. Diseñadas para cargas de trabajo tolerantes a retrasos.

Para configurar el nivel de latencia cuando creas un trabajo, establece la opción de canalización enable_latency_tier_lightweight_update:

--experiments=enable_latency_tier_lightweight_update=TIER

Reemplaza TIER por uno de los niveles de latencia disponibles (por ejemplo, medium_latency).

Actualiza el nivel de latencia

Para actualizar el nivel de latencia mientras se ejecuta un trabajo, realiza una actualización en tránsito con el comando gcloud dataflow jobs update-options:

gcloud dataflow jobs update-options \
  --region=REGION \
  --latency-tier=TIER \
  JOB_ID

Reemplaza lo siguiente:

  • REGION: Es el ID de la región del extremo regional del trabajo.
  • JOB_ID: es el ID del trabajo que se actualizará
  • TIER: Es el nivel de latencia objetivo. Uno de los siguientes: low_latency, medium_latency o high_latency

Para restablecer el nivel de latencia y volver al comportamiento predeterminado de baja latencia, usa el siguiente comando:

gcloud dataflow jobs update-options \
  --unset-latency-tier \
  --region=REGION \
  JOB_ID

Programa cambios en el ajuste de escala automático

En el caso de los trabajos de transmisión que usan Streaming Engine, puedes configurar programas de ajuste de escala automático para aplicar anulaciones de parámetros de forma automática durante períodos recurrentes. Esto es útil para anticipar variaciones predecibles en la carga de trabajo, como escalar verticalmente durante el horario de atención o reducir la escala verticalmente durante los períodos de menor actividad, sin actualizar el trabajo de forma manual cada vez. Cada trabajo puede tener hasta 10 programas especificados.

Un programa de ajuste de escala automático especifica lo siguiente:

  • Inicio de la programación: Es una expresión crontab que determina cuándo se activa la programación.
  • Duración: Es el período, en segundos, durante el cual las anulaciones permanecen activas. Debe ser de al menos 5 minutos.
  • Zona horaria: Es una zona horaria opcional de la base de datos tz (por ejemplo, America/New_York). El valor predeterminado es UTC.
  • Prioridad: Es una prioridad opcional para el programa, en la que los valores más altos indican una prioridad más alta. Los programas con mayor prioridad se aplican primero. Si ya hay un programa activo cuando se aplica uno de mayor prioridad, este último anula el programa existente. Si dos programas tienen la misma prioridad, se aplica el programa modificado más recientemente.
  • Anulaciones de parámetros: Es la configuración de ajuste de escala automático que se usará durante la ventana activa, incluidos los trabajadores mínimos, los trabajadores máximos y la sugerencia de uso de trabajadores.

Cuando finaliza el período programado, Dataflow revierte automáticamente el comportamiento del ajuste de escala automático a la configuración predeterminada del trabajo. Puedes definir varios programas para un solo trabajo.

Establece un programa de ajuste de escala automático al inicio del trabajo

Para establecer un programa de ajuste de escala automático inicial cuando inicies un trabajo de transmisión nuevo, especifica la opción de canalización experimental autoscaling_schedule o incluye el campo runtimeUpdatableParams.schedules cuando crees un trabajo con la API de REST.

Especifica el experimento autoscaling_schedule como una cadena separada por punto y coma de pares key:value con los siguientes atributos:

Obligatorio:

  • name: Es un identificador único para la programación.
  • crontab: Es una expresión de crontab que especifica cuándo se activa la programación.
  • duration: Es la duración en segundos durante la que el programa permanece activo.

Opcional:

  • timezone: Es la zona horaria de la base de datos tz (por ejemplo, America/New_York). El valor predeterminado es UTC.
  • min_workers: Es la cantidad mínima de trabajadores que se asignarán durante la programación.
  • max_workers: Es la cantidad máxima de trabajadores que se asignarán durante la programación.
  • cpu_utilization_target: Es el uso de CPU objetivo de los trabajadores durante la programación, en el rango [0.1, 0.9].
  • latency_tier: Es el nivel de latencia objetivo (low_latency, medium_latency o high_latency).
  • priority: Es la prioridad de la programación, en la que los valores más altos indican una prioridad más alta.

Java

--experiments=autoscaling_schedule="name=SCHEDULE_NAME;crontab=CRONTAB_EXPRESSION;duration=DURATION_SECONDS;timezone=TIMEZONE;min_workers=MINIMUM_WORKERS;max_workers=MAXIMUM_WORKERS;cpu_utilization_target=TARGET_UTILIZATION;latency_tier=LATENCY_TIER;priority=PRIORITY"

Python

--experiments=autoscaling_schedule="name=SCHEDULE_NAME;crontab=CRONTAB_EXPRESSION;duration=DURATION_SECONDS;timezone=TIMEZONE;min_workers=MINIMUM_WORKERS;max_workers=MAXIMUM_WORKERS;cpu_utilization_target=TARGET_UTILIZATION;latency_tier=LATENCY_TIER;priority=PRIORITY"

Go

--experiments=autoscaling_schedule="name=SCHEDULE_NAME;crontab=CRONTAB_EXPRESSION;duration=DURATION_SECONDS;timezone=TIMEZONE;min_workers=MINIMUM_WORKERS;max_workers=MAXIMUM_WORKERS;cpu_utilization_target=TARGET_UTILIZATION;latency_tier=LATENCY_TIER;priority=PRIORITY"

REST

Usa el método projects.locations.jobs.create y, luego, incluye el objeto runtimeUpdatableParams.schedules en el cuerpo de la solicitud:

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs
{
"name": "JOB_NAME",
"environment": { ... },
"runtimeUpdatableParams": {
  "schedules": [
    {
      "name": "SCHEDULE_NAME",
      "crontab": "CRONTAB_EXPRESSION",
      "duration": "DURATION_SECONDSs",
      "timeZone": "TIMEZONE",
      "priority": PRIORITY,
      "parameters": {
        "minWorkerCount": MINIMUM_WORKERS,
        "maxWorkerCount": MAXIMUM_WORKERS,
        "cpuUtilizationTarget": TARGET_UTILIZATION,
        "latencyTarget": LATENCY_TIER
      }
    }
  ]
}
}

Crea o actualiza un programa de ajuste de escala automático para un trabajo en ejecución

Para crear o actualizar un programa de ajuste de escala automático para un trabajo en ejecución, realiza una actualización en tránsito:

gcloud

Usa el comando gcloud dataflow jobs update-options con la marca --set-schedule:

gcloud dataflow jobs update-options \
  --region=REGION \
  --set-schedule=SCHEDULE_NAME \
  --autoscaling-schedule="CRONTAB_EXPRESSION" \
  --autoscaling-schedule-duration-seconds=DURATION_SECONDS \
  --autoscaling-schedule-timezone=TIMEZONE \
  --autoscaling-min-workers=MINIMUM_WORKERS \
  --autoscaling-max-workers=MAXIMUM_WORKERS \
  --autoscaling-worker-utilization-hint=TARGET_UTILIZATION \
  --autoscaling-latency-tier=LATENCY_TIER \
  --autoscaling-schedule-priority=PRIORITY \
  JOB_ID

Reemplaza lo siguiente:

  • REGION: es el ID de región del extremo regional del trabajo
  • SCHEDULE_NAME: Es un identificador único para la programación.
  • CRONTAB_EXPRESSION: Es una expresión de crontab que especifica cuándo se activa la programación (por ejemplo, "0 0 * * FRI").
  • DURATION_SECONDS: Es la duración en segundos durante la que está activa la programación (por ejemplo, 3600).
  • TIMEZONE: Es la zona horaria de la programación de la base de datos tz (por ejemplo, America/New_York). Si se omite, el valor predeterminado es UTC.
  • MINIMUM_WORKERS: Es la cantidad mínima de trabajadores que se asignarán durante el programa.
  • MAXIMUM_WORKERS: Es la cantidad máxima de trabajadores que se asignarán durante la programación.
  • LATENCY_TIER: Es el nivel de latencia objetivo (low_latency, medium_latency o high_latency).
  • JOB_ID: es el ID del trabajo que se actualizará

Cuando creas un programa nuevo, se requieren --autoscaling-schedule y --autoscaling-schedule-duration-seconds. Para modificar un programa existente, especifica --set-schedule y solo los parámetros que deseas actualizar.

REST

Usa el método projects.locations.jobs.update:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtimeUpdatableParams.schedules
{
  "runtimeUpdatableParams": {
    "schedules": [
      {
        "name": "SCHEDULE_NAME",
        "crontab": "CRONTAB_EXPRESSION",
        "duration": "DURATION_SECONDSs",
        "timeZone": "TIMEZONE",
        "priority": PRIORITY,
        "parameters": {
          "minWorkerCount": MINIMUM_WORKERS,
          "maxWorkerCount": MAXIMUM_WORKERS,
          "cpuUtilizationTarget": TARGET_UTILIZATION,
          "latencyTarget": LATENCY_TIER
        }
      }
    ]
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud del trabajo de Dataflow.
  • REGION: es el ID de región del extremo regional del trabajo
  • JOB_ID: es el ID del trabajo que se actualizará
  • SCHEDULE_NAME: Es un identificador único para la programación.
  • CRONTAB_EXPRESSION: Es una expresión de crontab que especifica cuándo se activa la programación.
  • DURATION_SECONDS: Es la duración en segundos durante la que está activa la programación (por ejemplo, 3600).
  • TIMEZONE: la zona horaria de la programación de la base de datos tz (por ejemplo, America/New_York)
  • MINIMUM_WORKERS: Es la cantidad mínima de trabajadores que se asignarán durante el programa.
  • MAXIMUM_WORKERS: Es la cantidad máxima de trabajadores que se asignarán durante la programación.
  • TARGET_UTILIZATION: un valor en el rango [0.1, 0.9]

Quita un programa de ajuste de escala automático

Para quitar un programa de ajuste de escala automático específico o quitar todos los programas de un trabajo, realiza una actualización en curso:

gcloud

Para quitar un solo programa, especifica la marca --unset-schedule:

gcloud dataflow jobs update-options \
  --region=REGION \
  --unset-schedule=SCHEDULE_NAME \
  JOB_ID

Para quitar todos los programas de un trabajo, especifica la marca --unset-schedules:

gcloud dataflow jobs update-options \
  --region=REGION \
  --unset-schedules \
  JOB_ID

REST

Usa el método projects.locations.jobs.update con updateMask=runtimeUpdatableParams.schedules, omite la programación del array schedules o proporciona una lista schedules vacía para quitar todas las programaciones:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtimeUpdatableParams.schedules
{
  "runtimeUpdatableParams": {
    "schedules": []
  }
}

Para solucionar problemas con los programas de ajuste de escala automático, consulta Soluciona problemas de los programas de ajuste de escala automático.

Heurísticas de ajuste de escala automático de transmisión

Para las canalizaciones de transmisión, el objetivo del ajuste de escala automático horizontal es minimizar la acumulación mientras se maximiza el uso y la capacidad de procesamiento del trabajador, además de reaccionar con rapidez a los aumentos repentinos de carga.

Dataflow tiene en cuenta varios factores cuando se afina el ajuste de escala automático, incluidos los siguientes:

  • Tareas pendientes. El tiempo estimado de las tareas pendientes se calcula a partir de la capacidad de procesamiento y de los bytes de tareas pendientes que se deben procesar desde la fuente de entrada. Una canalización se considera pendiente cuando el tiempo estimado de las tareas pendientes supera el umbral configurado. De forma predeterminada, este umbral es de 15 segundos. Para obtener más información, consulta Configura el nivel de latencia.

  • Uso de CPU objetivo. El objetivo predeterminado para el uso de CPU promedio es 0.8. Puedes anular este valor.

  • Claves disponibles. Las claves son la unidad fundamental de paralelismo en Dataflow.

En algunos casos, Dataflow usa los siguientes factores para tomar decisiones sobre el ajuste de escala automático. Si estos influyen en tu trabajo, puedes ver esa información en la pestaña de métricas Ajuste de escala automático.

  • La limitación de claves usa la cantidad de claves de procesamiento que recibe el trabajo para calcular el límite de los trabajadores, ya que solo un trabajador puede procesar cada clave a la vez.

  • Estabilización de escala descendente. Si Dataflow detecta que se tomaron decisiones de ajuste de escala automático inestables, se ralentiza la velocidad de reducción de escala para mejorar la estabilidad.

  • La opción de lujo basado en CPU usa un alto uso de CPU como criterio de escalamiento vertical.

  • Para los trabajos de transmisión que no usan Streaming Engine, el escalamiento puede estar limitado por la cantidad de discos persistentes. Para obtener más información, consulta Configura el rango de ajuste de escala automático.

  • Ajuste de escala automático con uso intensivo de GPU, si se habilita estableciendo la sugerencia de paralelismo de trabajadores. Para obtener más información, consulta Heurísticas de ajuste de escala automático de uso intensivo de GPU.

Escalamiento vertical. Si una canalización de transmisión queda pendiente y con paralelismo suficiente en los trabajadores durante varios minutos, Dataflow escala verticalmente. Dataflow intenta borrar las tareas pendientes en un plazo aproximado de 150 segundos después del escalamiento vertical, según la capacidad de procesamiento actual por trabajador. Si hay trabajos pendientes, pero el trabajador no tiene suficiente paralelismo para trabajadores adicionales, la canalización no escala verticalmente. (Escalar la cantidad de trabajadores más allá de la cantidad de claves disponibles para el procesamiento paralelo no ayuda a procesar las tareas pendientes más rápido).

Reducción de escala: Cuando el escalador automático decide reducir la escala, las tareas pendientes son el factor de mayor prioridad. El escalador automático busca un trabajo pendiente según el nivel de latencia. Si el trabajo pendiente disminuye lo suficiente por debajo del objetivo durante varios minutos y el uso promedio de los trabajadores es inferior al objetivo de uso de CPU, Dataflow reduce la escala verticalmente. Siempre que el trabajo pendiente sea aceptable, el escalador automático intenta mantener el uso de CPU cerca del uso de CPU objetivo. Sin embargo, si el uso ya se encuentra lo suficientemente cerca del objetivo, el escalador automático puede mantener la cantidad de trabajadores sin modificar, ya que cada paso de reducción de escala tiene un costo.

Streaming Engine también usa una técnica de ajuste de escala automático predictivo basado en las tareas pendientes del temporizador. Los datos no delimitados en una canalización de transmisión se dividen en períodos agrupados por marcas de tiempo. Al final de un período, los temporizadores se activan por cada clave que se procesa en ese período. La activación de un temporizador indica que caducó el período para una clave determinada. Streaming Engine puede medir el trabajo pendiente del temporizador y predecir cuántos temporizadores se activarán al final de un período. Mediante el uso de las tareas pendientes del temporizador como un indicador, Dataflow puede estimar la cantidad de procesamiento que debe ocurrir cuando se activan los temporizadores futuros. Según la carga futura estimada, Dataflow escala de forma automática con anticipación para satisfacer la demanda esperada.

Métricas

Para encontrar los límites actuales del ajuste de escala automático de un trabajo, consulta las siguientes métricas:

  • job/max_worker_instances_limit: es la cantidad máxima de trabajadores.
  • job/min_worker_instances_limit: es la cantidad mínima de trabajadores.

Para obtener información sobre el uso de trabajadores, consulta las siguientes métricas:

  • job/aggregated_worker_utilization: el uso agregado de trabajadores.
  • job/worker_utilization_hint: la sugerencia actual de uso de trabajadores.

Para obtener estadísticas sobre el comportamiento del escalador automático, consulta la siguiente métrica:

  • job.worker_utilization_hint_is_actively_used: indica si el escalador automático usa de forma activa la sugerencia de uso del trabajador. Si otros factores anulan la sugerencia cuando se muestrea esta métrica, el valor será false.
  • job/horizontal_worker_scaling: Describe las decisiones que tomó el escalador automático. Esta métrica contiene las siguientes etiquetas:
    • direction: Especifica si el escalador automático aumentó la escala, la redujo o no realizó ninguna acción.
    • rationale: especifica la lógica de la decisión del escalador automático.

Para obtener más información, consulta los Precios de Cloud Monitoring. Estas métricas también se muestran en los gráficos de supervisión del ajuste de escala automático.

¿Qué sigue?