

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implemente a escalabilidade de aplicativos no Managed Service for Apache Flink
<a name="how-scaling"></a>

Você pode configurar a execução paralela de tarefas e a alocação de recursos para que o Amazon Managed Service for Apache Flink implemente a escalabilidade. Para obter mais informações sobre como o Apache Flink programa instâncias paralelas de tarefas, consulte [Execução paralela](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/) na Documentação do Apache Flink.

**Topics**
+ [Configurar o paralelismo de aplicativos e a KPU ParallelismPer](#how-parallelism)
+ [Aloque unidades de processamento do Kinesis](#how-scaling-kpus)
+ [Atualize o paralelismo do seu aplicativo](#how-scaling-howto)
+ [Use a escalabilidade automática no Managed Service for Apache Flink](how-scaling-auto.md)
+ [Considerações sobre o MaxParallelism](#how-scaling-auto-max-parallelism)

## Configurar o paralelismo de aplicativos e a KPU ParallelismPer
<a name="how-parallelism"></a>

Você configura a execução paralela das tarefas do aplicativo Managed Service for Apache Flink (como ler de uma fonte ou executar um operador) usando as seguintes [https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html) propriedades: 
+ `Parallelism`: use esta propriedade para definir o paralelismo padrão do aplicativo Apache Flink. Todos os operadores, fontes e coletores são executados com esse paralelismo, a menos que sejam substituídos no código do aplicativo. O valor padrão é `1` e o máximo padrão é `256`.
+ `ParallelismPerKPU`: use esta propriedade para definir o número de tarefas em paralelo que podem ser programadas por unidade de processamento do Kinesis (Kinesis Processing Unit, KPU) do seu aplicativo. O padrão é `1` e o máximo é `8`. Para aplicativos que têm operações de bloqueio (por exemplo, E/S), um valor maior que `ParallelismPerKPU` leva à utilização total dos recursos da KPU.

**nota**  
O limite para `Parallelism` é igual às `ParallelismPerKPU` vezes o limite para KPUs (que tem um padrão de 64). O KPUs limite pode ser aumentado solicitando um aumento de limite. Para obter instruções sobre como solicitar um aumento de limite, consulte “Para solicitar um aumento de limite” em [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).

Para obter informações sobre como definir o paralelismo de tarefas para um operador específico, consulte [ Configurar o paralelismo: operador](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#operator-level) na documentação do Apache Flink.

## Aloque unidades de processamento do Kinesis
<a name="how-scaling-kpus"></a>

O serviço gerenciado para Apache Flink provisiona a capacidade como. KPUs Uma única KPU oferece 1 vCPU e 4 GB de memória. Para cada KPU alocada, também são fornecidos 50 GB de armazenamento de aplicativos em execução. 

O Managed Service for Apache Flink calcula o KPUs que é necessário para executar seu aplicativo usando as `ParallelismPerKPU` propriedades `Parallelism` e, da seguinte forma:

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

O Managed Service for Apache Flink fornece rapidamente aos seus aplicativos recursos em resposta a picos no throughput ou na atividade de processamento. Ele remove recursos do seu aplicativo gradualmente após o pico de atividade ter passado. Para desativar a alocação automática de recursos, defina o valor `AutoScalingEnabled` como `false`, conforme descrito posteriormente em [Atualize o paralelismo do seu aplicativo](#how-scaling-howto). 

O limite padrão KPUs para seu aplicativo é 64. Para obter instruções sobre como solicitar um aumento desse limite, consulte “Para solicitar um aumento de limite” em [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).

**nota**  
Uma KPU adicional é cobrada para fins de orquestração. Para obter mais informações, consulte [Preço do Managed Service for Apache Flink](https://aws.amazon.com/kinesis/data-analytics/pricing/).

## Atualize o paralelismo do seu aplicativo
<a name="how-scaling-howto"></a>

Esta seção contém exemplos de solicitações de ações de API que definem o paralelismo de um aplicativo. Para ver mais exemplos e instruções sobre como usar blocos de solicitação com ações de API, consulte [Exemplo de código de API para o Managed Service for Apache Flink](api-examples.md).

O exemplo a seguir de solicitação para a ação [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) define o paralelismo quando você está criando um aplicativo:

```
{
   "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
         }
      }
   }
}
```

O exemplo de solicitação a seguir para a ação [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) define o paralelismo para um aplicativo existente:

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

O exemplo de solicitação a seguir para a ação [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) desativa o paralelismo para um aplicativo existente:

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

# Use a escalabilidade automática no Managed Service for Apache Flink
<a name="how-scaling-auto"></a>

O Managed Service for Apache Flink dimensiona elasticamente o paralelismo de seu aplicativo para acomodar o throughput de dados de sua fonte e a complexidade de seu operador na maioria dos cenários. O ajuste de escala automático está habilitado por padrão. O Managed Service for Apache Flink monitora o uso de recursos (CPU) do seu aplicativo e aumenta ou diminui elasticamente o paralelismo do seu aplicativo de acordo com:
+ Seu aplicativo aumenta (aumenta o paralelismo) se o máximo da CloudWatch métrica `containerCPUUtilization` for maior que 75 por cento ou mais por 15 minutos. Isso significa que a ação `ScaleUp` é iniciada quando há 15 pontos de dados consecutivos com um período de 1 minuto igual ou superior a 75%. Uma ação `ScaleUp` dobra o `CurrentParallelism` do seu aplicativo. O `ParallelismPerKPU` não é modificado. Como consequência, o número de alocados KPUs também dobra. 
+ Seu aplicativo reduz a escala verticalmente (diminui o paralelismo) quando o uso da CPU permanece abaixo de 10% por seis horas. Isso significa que a ação `ScaleDown` é iniciada quando há 360 pontos de dados consecutivos com um período de 1 minuto inferior a 10%. Uma `ScaleDown` ação divide pela metade (arredondando para cima) o paralelismo do aplicativo. `ParallelismPerKPU`não é modificado, e o número de alocados KPUs também é reduzido pela metade (arredondado para cima). 

**nota**  
Um período máximo de `containerCPUUtilization` acima de 1 minuto pode ser referenciado para encontrar a correlação com um ponto de dados usado para a ação de escalabilidade, mas não é necessário refletir o momento exato em que a ação é iniciada.

O Managed Service for Apache Flink não reduzirá o valor `CurrentParallelism` do seu aplicativo para menos do que a configuração `Parallelism` do seu aplicativo.

Quando o serviço do Managed Service for Apache Flink estiver escalando seu aplicativo, ele estará no status `AUTOSCALING`. Você pode verificar o status atual da sua inscrição usando as [ ListApplications](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)ações [ DescribeApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_DescribeApplication.html)ou. Enquanto o serviço está escalando seu aplicativo, a única ação de API válida que você pode usar é [ StopApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)com o `Force` parâmetro definido como. `true`

Você pode usar a propriedade `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 ativar ou desativar o comportamento de ajuste de escala automático. Sua AWS conta é cobrada pelas KPUs provisões do Managed Service for Apache Flink, que é uma função do seu aplicativo `parallelism` e `parallelismPerKPU` das configurações. Um pico de atividade aumenta os custos do Managed Service for Apache Flink.

Para obter mais informações sobre preços, consulte [Preço do Amazon Managed Service for Apache Flink](https://aws.amazon.com/kinesis/data-analytics/pricing/). 

Observe o seguinte sobre escalonamento de aplicativo:
+ O ajuste de escala automático está habilitado por padrão.
+ O escalonamento não se aplica aos blocos de anotações do Studio. No entanto, se você implantar um bloco de anotações do Studio como um aplicativo de estado durável, o escalonamento será aplicado ao aplicativo implantado.
+ Seu aplicativo tem um limite padrão de 64 KPUs. Para obter mais informações, consulte [Quota do notebook do Managed Service for Apache Flink e Studio](limits.md).
+ Quando o ajuste automático de escala automático atualiza o paralelismo do aplicativo, o aplicativo passa por um tempo de inatividade. Para evitar esse tempo de inatividade, faça o seguinte:
  + Desabilitar o ajuste de escala automático
  + Configure seu aplicativo `parallelism` e `parallelismPerKPU` com a [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)ação. Para obter mais informações sobre como definir as configurações de paralelismo do aplicativo, consulte [Atualize o paralelismo do seu aplicativo](how-scaling.md#how-scaling-howto).
  + Monitore periodicamente o uso de recursos do seu aplicativo para verificar se ele tem as configurações de paralelismo corretas para seu workload. Para obter informações sobre monitoramento de alocação de recursos, consulte [Métricas e dimensões no Managed Service for Apache Flink](metrics-dimensions.md).

## Implemente a escalabilidade automática personalizada
<a name="how-scaling-custom-autoscaling"></a>

Se você quiser um controle mais refinado sobre a escalabilidade automática ou usar outras métricas diferentes de `containerCPUUtilization`, você pode usar este exemplo: 
+ [AutoScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/AutoScaling)

  Esses exemplos ilustram como escalar seu aplicativo Managed Service for Apache Flink usando uma CloudWatch métrica diferente da aplicação Apache Flink, incluindo métricas do Amazon MSK e do Amazon Kinesis Data Streams, usadas como fontes ou coletores.

Para obter informações adicionais, consulte [Monitoramento aprimorado e escalabilidade automática para o Apache Flink](https://aws.amazon.com/blogs/big-data/enhanced-monitoring-and-automatic-scaling-for-apache-flink/).

## Implemente a escalabilidade automática programada
<a name="how-scaling-scheduled-autoscaling"></a>

Se sua workload seguir um perfil previsível ao longo do tempo, talvez você prefira escalar seu aplicativo Apache Flink preventivamente. Isso escala seu aplicativo em um horário programado, em vez de escalar reativamente com base em uma métrica. Para configurar a escalabilidade vertical e horizontal em horários fixos do dia, você pode usar este exemplo:
+ [ScheduledScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/ScheduledScaling)

## Considerações sobre o MaxParallelism
<a name="how-scaling-auto-max-parallelism"></a>

O paralelismo máximo que uma tarefa do Flink pode escalar é limitado pelo `maxParallelism` *mínimo* em todos os operadores da tarefa. Por exemplo, se você tiver um trabalho simples com apenas uma origem e um coletor, e a origem tiver um `maxParallelism` de 16 e coletor tiver 8, o aplicativo não poderá escalar além do paralelismo de 8.

Para saber como o `maxParallelism` padrão de um operador é calculado e como substituir o padrão, consulte [Como definir o paralelismo máximo](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#setting-the-maximum-parallelism) na documentação do Apache Flink.

Como regra básica, lembre-se de que, se você não definir `maxParallelism` para nenhum operador e iniciar seu aplicativo com um paralelismo menor ou igual a 128, todos os operadores terão um `maxParallelism` de 128.

**nota**  
O paralelismo máximo do trabalho é o limite superior do paralelismo para escalar seu aplicativo mantendo o estado.   
Se você modificar o `maxParallelism` de um aplicativo existente, o aplicativo não poderá ser reiniciado a partir de um snapshot anterior tirado com o `maxParallelism` antigo. Você só pode reiniciar o aplicativo sem um snapshot.   
Se planeja escalar seu aplicativo para um paralelismo maior que 128, você deve definir explicitamente o `maxParallelism` em seu aplicativo.
+ A lógica de escalabilidade automática evitará a escalar uma tarefa do Flink para um paralelismo que excederá o paralelismo máximo da tarefa.
+ Se você usar uma escalabilidade automática personalizada ou escalabilidade programada, configure-as para que não excedam o paralelismo máximo do trabalho.
+ Se você escalar manualmente seu aplicativo além do paralelismo máximo, o aplicativo falhará ao iniciar.