

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Implementación del escalado de aplicaciones en Managed Service para Apache Flink
<a name="how-scaling"></a>

Puede configurar la ejecución paralela de las tareas y la asignación de recursos para que Amazon Managed Service para Apache Flink implemente la reducción horizontal. Para obtener más información sobre cómo Apache Flink programa instancias paralelas de las tareas, consulte [Parallel Execution](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/) en la documentación de Apache Flink.

**Topics**
+ [Configurar el paralelismo de aplicaciones y la KPU ParallelismPer](#how-parallelism)
+ [Asignación de unidades de procesamiento de Kinesis](#how-scaling-kpus)
+ [Actualización del paralelismo de la aplicación](#how-scaling-howto)
+ [Uso del escalado automático en Managed Service para Apache Flink](how-scaling-auto.md)
+ [Consideraciones sobre maxParallelism](#how-scaling-auto-max-parallelism)

## Configurar el paralelismo de aplicaciones y la KPU ParallelismPer
<a name="how-parallelism"></a>

Para configurar la ejecución paralela de las tareas de la aplicación de Managed Service para Apache Flink (como leer de una fuente o ejecutar un operador), se utilizan las siguientes propiedades [https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html): 
+ `Parallelism`: utilice esta propiedad para establecer el paralelismo predeterminado de la aplicación de Apache Flink. Todos los operadores, las fuentes y los receptores se ejecutan con este paralelismo, a menos que estén anulados en el código de la aplicación. El valor predeterminado es `1`, y el valor máximo es `256`.
+ `ParallelismPerKPU`: utilice esta propiedad para configurar el número de tareas paralelas que se pueden programar por unidad de procesamiento de Kinesis (KPU) de la aplicación. El valor predeterminado es `1` y el máximo es `8`. En el caso de las aplicaciones que tienen operaciones de bloqueo (por ejemplo, E/S), un valor más alto de `ParallelismPerKPU` implica la plena utilización de los recursos de KPU.

**nota**  
El límite de `Parallelism` es igual a `ParallelismPerKPU` multiplicado por el límite de KPUs (que tiene un valor predeterminado de 64). El KPUs límite se puede aumentar solicitando un aumento del límite. Para obtener instrucciones sobre cómo solicitar un aumento de este límite, consulte “Para solicitar un aumento del límite” en [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).

Para obtener información sobre cómo configurar el paralelismo de tareas para un operador específico, consulte [Setting the Parallelism: Operator](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#operator-level) en la documentación de Apache Flink.

## Asignación de unidades de procesamiento de Kinesis
<a name="how-scaling-kpus"></a>

El servicio gestionado para Apache Flink aprovisiona capacidad como KPUs. Una sola KPU le proporciona 1 vCPU y 4 GB de memoria. Por cada KPU asignada, también se proporcionan 50 GB de almacenamiento para aplicaciones en ejecución. 

Managed Service for Apache Flink calcula las KPUs propiedades necesarias para ejecutar la aplicación mediante las `ParallelismPerKPU` propiedades `Parallelism` y, de la siguiente manera:

```
Allocated KPUs for the application = Parallelism/ParallelismPerKPU
```

Managed Service para Apache Flink proporciona rápidamente recursos a las aplicaciones en respuesta a los picos de rendimiento o de la actividad de procesamiento. Elimina los recursos de la aplicación de forma gradual una vez que ha pasado el pico de actividad. Para deshabilitar la asignación automática de recursos, defina el valor `AutoScalingEnabled` en `false`, como se describe más adelante en [Actualización del paralelismo de la aplicación](#how-scaling-howto). 

El límite predeterminado KPUs para su aplicación es 64. Para obtener instrucciones sobre cómo solicitar un aumento de este límite, consulte “Para solicitar un aumento del límite” en [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).

**nota**  
Se cobra una KPU adicional por motivos de orquestación. Para obtener más información, consulte [Precios de Managed Service para Apache Flink](https://aws.amazon.com/kinesis/data-analytics/pricing/).

## Actualización del paralelismo de la aplicación
<a name="how-scaling-howto"></a>

Esta sección contiene ejemplos de solicitudes de acciones de la API que establecen el paralelismo de una aplicación. Para ver más ejemplos e instrucciones sobre cómo usar los bloques de solicitudes con las acciones de la API, consulte [Ejemplo de código de API de Managed Service para Apache Flink](api-examples.md).

El siguiente ejemplo de solicitud de la acción [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) establece el paralelismo al crear una aplicación:

```
{
   "ApplicationName": "string",
   "RuntimeEnvironment":"FLINK-1_18",
   "ServiceExecutionRole":"arn:aws:iam::123456789123:role/myrole",
   "ApplicationConfiguration": { 
      "ApplicationCodeConfiguration":{
      "CodeContent":{
         "S3ContentLocation":{
            "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket",
            "FileKey":"myflink.jar",
            "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345"
            }
         },
      "CodeContentType":"ZIPFILE"
   },   
      "FlinkApplicationConfiguration": { 
         "ParallelismConfiguration": { 
            "AutoScalingEnabled": "true",
            "ConfigurationType": "CUSTOM",
            "Parallelism": 4,
            "ParallelismPerKPU": 4
         }
      }
   }
}
```

El siguiente ejemplo de solicitud de la acción [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) establece el paralelismo para una aplicación existente:

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "ParallelismConfigurationUpdate": { 
            "AutoScalingEnabledUpdate": "true",
            "ConfigurationTypeUpdate": "CUSTOM",
            "ParallelismPerKPUUpdate": 4,
            "ParallelismUpdate": 4
         }
      }
   }
}
```

El siguiente ejemplo de solicitud de la acción [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) deshabilita el paralelismo para una aplicación existente:

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "ParallelismConfigurationUpdate": { 
            "AutoScalingEnabledUpdate": "false"
         }
      }
   }
}
```

# Uso del escalado automático en Managed Service para Apache Flink
<a name="how-scaling-auto"></a>

Managed Service para Apache Flink escala elásticamente el paralelismo de la aplicación para adaptarse al rendimiento de datos de su fuente y a la complejidad del operador en la mayoría de los escenarios. El escalado automático está habilitado de forma predeterminada. Managed Service para Apache Flink supervisa el uso de recursos (CPU) de la aplicación y amplía o reduce el paralelismo de la aplicación elásticamente en consecuencia:
+ La aplicación se amplía (aumenta el paralelismo) si el máximo CloudWatch métrico `containerCPUUtilization` es superior al 75 por ciento o superior durante 15 minutos. Esto significa que la acción de `ScaleUp` se activa cuando hay 15 puntos de datos consecutivos con un período de 1 minuto iguales o superiores al 75 por ciento. Una acción de `ScaleUp` duplica el `CurrentParallelism` de su aplicación. `ParallelismPerKPU` no se modifica. Como consecuencia, el número de asignadas KPUs también se duplica. 
+ La aplicación se reduce verticalmente (reduce el paralelismo) cuando el uso de la CPU permanece por debajo del 10 por ciento durante seis horas. Esto significa que la acción de `ScaleDown` se activa cuando hay 360 puntos de datos consecutivos con un período de 1 minuto inferiores al 10 por ciento. Una `ScaleDown` acción reduce a la mitad (redondeado hacia arriba) el paralelismo de la aplicación. `ParallelismPerKPU`no se modifica y el número de asignadas KPUs también se reduce a la mitad (redondeado al alza). 

**nota**  
Se puede hacer referencia a un período máximo de `containerCPUUtilization` de más de 1 minuto para encontrar la correlación con un punto de datos utilizado para la acción de escalado, pero no es necesario reflejar el momento exacto en que se inicia la acción.

Managed Service para Apache Flink no reducirá el valor `CurrentParallelism` de la aplicación a un valor inferior al de la configuración `Parallelism` de la aplicación.

Cuando el servicio de Managed Service para Apache Flink escale su aplicación, aparecerá en estado `AUTOSCALING`. Puede comprobar el estado actual de su solicitud mediante las [ ListApplications](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)acciones [ DescribeApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_DescribeApplication.html)o. Mientras el servicio escala tu aplicación, la única acción válida de la API que puedes usar es [ StopApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)establecer el `Force` parámetro en`true`.

Puede usar la propiedad `AutoScalingEnabled` (parte de [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html)) para habilitar o deshabilitar el comportamiento de escalado automático. Se le cobrará a su AWS cuenta las prestaciones del servicio gestionado por Apache Flink, que depende de la `parallelismPerKPU` configuración `parallelism` y de la aplicación. KPUs Si se produce un pico de actividad, ello aumentará los costos de Managed Service para Apache Flink.

Para obtener más información sobre precios, consulte [Precios de Amazon Managed Service para Apache Flink](https://aws.amazon.com/kinesis/data-analytics/pricing/). 

Tenga en cuenta lo siguiente en relación con el escalado de la aplicación:
+ El escalado automático está habilitado de forma predeterminada.
+ El escalado no se aplica a los cuadernos de Studio. Sin embargo, si implementa un cuaderno de Studio como una aplicación de estado perdurable, el escalado se aplicará a la aplicación implementada.
+ Su aplicación tiene un límite predeterminado de 64 KPUs. Para obtener más información, consulte [Cuota de cuadernos de Managed Service para Apache Flink y cuadernos de Studio](limits.md).
+ Cuando el escalado automático actualiza el paralelismo de la aplicación, la aplicación sufre un tiempo de inactividad. Para evitar este tiempo de inactividad, haga lo siguiente:
  + Deshabilite el escalado automático.
  + Configura el `parallelism` y `parallelismPerKPU` con la [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)acción de tu aplicación. Para obtener más información sobre cómo realizar la configuración de paralelismo de la aplicación, consulte [Actualización del paralelismo de la aplicación](how-scaling.md#how-scaling-howto).
  + Supervise periódicamente el uso de los recursos de la aplicación para comprobar que la aplicación tenga una configuración de paralelismo correcta adecuada para su carga de trabajo. Para obtener información sobre supervisión del uso de recursos de asignación, consulte [Métricas y dimensiones en Managed Service para Apache Flink](metrics-dimensions.md).

## Implementación del escalado automático personalizado
<a name="how-scaling-custom-autoscaling"></a>

Si quiere tener un control más preciso del escalado automático o utilizar otras métricas de activación que no sean `containerCPUUtilization`, se puede utilizar este ejemplo: 
+ [AutoScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/AutoScaling)

  Este ejemplo ilustra cómo escalar la aplicación Managed Service for Apache Flink utilizando una CloudWatch métrica diferente de la aplicación Apache Flink, incluidas las métricas de Amazon MSK y Amazon Kinesis Data Streams, utilizadas como fuentes o receptáculos.

Para obtener información adicional, consulte [Enhanced monitoring and automatic scaling for Apache Flink](https://aws.amazon.com/blogs/big-data/enhanced-monitoring-and-automatic-scaling-for-apache-flink/)

## Implementación del escalado automático programado
<a name="how-scaling-scheduled-autoscaling"></a>

Si su carga de trabajo sigue un perfil predecible a lo largo del tiempo, tal vez prefiera escalar la aplicación Apache Flink de forma preventiva. Esto escala la aplicación a una hora programada, en lugar de escalarla de forma reactiva en función de una métrica. Para configurar el escalado ascendente y descendente a horas fijas del día, puede usar este ejemplo:
+ [ScheduledScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/ScheduledScaling)

## Consideraciones sobre maxParallelism
<a name="how-scaling-auto-max-parallelism"></a>

El paralelismo máximo que puede escalar una tarea de Flink está limitado por el `maxParallelism` *mínimo* en todos los operadores de la tarea. Por ejemplo, en caso de un trabajo simple con solo un origen y un receptor, y el origen tiene un `maxParallelism` de 16 y el receptor tiene 8, la aplicación no podrá escalar más allá del paralelismo de 8.

Para saber cómo se calcula el valor predeterminado `maxParallelism` de un operador y cómo anularlo, consulte [Setting the Maximum Parallelism](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#setting-the-maximum-parallelism) en la documentación de Apache Flink.

Como regla básica, tenga en cuenta que si no define un `maxParallelism` para ningún operador e inicia la aplicación con un paralelismo menor o igual a 128, todos los operadores tendrán un `maxParallelism` de 128.

**nota**  
El paralelismo máximo del trabajo es el límite superior del paralelismo para escalar la aplicación y retener el estado.   
Si se modifica el `maxParallelism` de una aplicación existente, la aplicación no podrá reiniciarse a partir de una instantánea anterior tomada con el antiguo `maxParallelism`. Solo puede reiniciar la aplicación sin una instantánea.   
Si planea escalar la aplicación a un paralelismo superior a 128, debe configurar de forma explícita el `maxParallelism` en la aplicación.
+ La lógica del escalado automático evitará escalar una tarea de Flink a un paralelismo que supere el paralelismo máximo de la tarea.
+ Si se utiliza un escalado automático personalizado o un escalado programado, configúrelos para que no superen el paralelismo máximo del trabajo.
+ Si escala de manera manual la aplicación más allá del paralelismo máximo, la aplicación no se iniciará.