Best practice sulle prestazioni - Servizio gestito per Apache Flink

Il servizio gestito da Amazon per Apache Flink era precedentemente noto come Analisi dei dati Amazon Kinesis per Apache Flink.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Best practice sulle prestazioni

Questa sezione descrive considerazioni particolari relative alla progettazione di un'applicazione che garantisca prestazioni elevate.

Gestire correttamente il dimensionamento

Questa sezione contiene informazioni sulla gestione del dimensionamento a livello di applicazione e di operatore.

Gestire correttamente il dimensionamento dell’applicazione

È possibile utilizzare il dimensionamento automatico per gestire picchi imprevisti nell'attività dell’applicazione. I KPU dell'applicazione aumenteranno automaticamente se i seguenti criteri sono soddisfatti:

  • il dimensionamento automatico è abilitato per l'applicazione;

  • l'utilizzo della CPU rimane superiore al 75% per 15 minuti.

Se il dimensionamento automatico è abilitato, ma l'utilizzo della CPU non rimane entro questa soglia, l'applicazione non aumenterà le KPU. Se si verifica un picco nell'utilizzo della CPU che non soddisfa questa soglia o un picco in una metrica di utilizzo diversa (ad esempio heapMemoryUtilization) aumenta manualmente il ridimensionamento, per consentire all'applicazione di gestire al meglio i picchi di attività.

Nota

Se l'applicazione ha aggiunto automaticamente più risorse tramite il dimensionamento automatico, l'applicazione rilascerà le nuove risorse dopo un periodo di inattività. Il ridimensionamento delle risorse influirà temporaneamente sulle prestazioni.

Per ulteriori informazioni sul dimensionamento, consulta Dimensionamento.

Gestire correttamente il dimensionamento degli operatori

È possibile migliorare le prestazioni dell'applicazione verificando che il carico di lavoro dell'applicazione sia distribuito in modo uniforme tra i processi di lavoro e che gli operatori dell'applicazione dispongano delle risorse di sistema necessarie per garantire stabilità e ottime prestazioni.

È possibile impostare il parallelismo per ogni operatore nel codice dell'applicazione utilizzando l'impostazione parallelism. Nel caso in cui il parallelismo per un operatore non sia impostato, verrà utilizzata l'impostazione del parallelismo a livello di applicazione. Gli operatori che utilizzano l'impostazione del parallelismo a livello di applicazione possono potenzialmente utilizzare tutte le risorse di sistema disponibili per l'applicazione, rendendola poco stabile.

Per determinare al meglio il parallelismo per ogni operatore, è fondamentale considerare i requisiti di risorse relativi dell'operatore rispetto agli altri operatori dell'applicazione. È consigliabile impostare gli operatori che richiedono più risorse su un'impostazione di parallelismo degli operatori più elevata rispetto agli operatori che ne richiedono di meno.

Il parallelismo totale dell'operatore per l'applicazione è la somma del parallelismo per tutti gli operatori dell'applicazione. È possibile ottimizzare il parallelismo totale degli operatori per l'applicazione determinando il migliore rapporto tra tale parallelismo e il totale degli slot di attività disponibili per l'applicazione. Generalmente, un rapporto stabile tra il parallelismo totale dell'operatore e gli slot di attività è 4:1, ovvero l'applicazione ha uno slot di attività disponibile per ogni quattro attività secondarie dell'operatore disponibili. Un'applicazione con operatori che richiedono più risorse può richiedere un rapporto di 3:1 o 2:1, mentre un'applicazione con operatori che richiedono meno risorse può essere stabile anche con un rapporto di 10:1.

È possibile impostare il rapporto per l'operatore utilizzando Proprietà di runtime, in modo da ottimizzare il parallelismo dell'operatore senza compilare e caricare il codice dell'applicazione.

L'esempio di codice seguente mostra il procedimento per impostare il parallelismo dell'operatore come rapporto regolabile del parallelismo dell'applicazione attuale:

Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties(); operatorParallelism = StreamExecutionEnvironment.getParallelism() / Integer.getInteger( applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio") );

Per informazioni sulle attività secondarie, gli slot di attività e altre risorse dell'applicazione, consulta Risorse dell'applicazione.

Per controllare la distribuzione del carico di lavoro tra i processi di lavoro dell'applicazione, utilizza l'impostazione Parallelism e il metodo di partizioneKeyBy. Per ulteriori informazioni, consulta gli argomenti seguenti nella documentazione Apache Flink:

Monitoraggio dell'utilizzo delle risorse di dipendenza esterne

Se si verifica un rallentamento delle prestazioni in una destinazione (come Kinesis Streams, Firehose, DynamoDB o Service), l'applicazione subirà una contropressione. OpenSearch Verifica che le dipendenze esterne siano state predisposte correttamente per la velocità di trasmissione effettiva dell'applicazione.

Nota

I malfunzionamenti in altri servizi possono causare errori all’interno dell'applicazione. Se riscontri errori nella tua applicazione, controlla i log dei servizi di destinazione per individuare eventuali errori. CloudWatch

Avviamento dell'applicazione Apache Flink in locale

Per risolvere i problemi di memoria, è consigliabile avviare l'applicazione in un'installazione locale di Flink. In tal modo sarà possibile accedere a strumenti di debug, come lo stack trace e gli heap dump, che non possono essere impiegati quando si esegue l'applicazione nel servizio gestito per Apache Flink.

Per informazioni sulla creazione di un'installazione locale di Flink, consulta Standalone nella documentazione di Apache Flink.