Aggiornamenti di versione in loco per Apache Flink - 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à.

Aggiornamenti di versione in loco per Apache Flink

Con gli aggiornamenti di versione in loco per Apache Flink, è possibile mantenere la tracciabilità delle applicazioni su un singolo ARN tra le versioni di Apache Flink. Ciò include istantanee, log, metriche, tag, configurazioni Flink, aumenti dei limiti di risorse, VPC e altro ancora. Puoi eseguire aggiornamenti di versione sul posto per Apache Flink per aggiornare le applicazioni esistenti a una nuova versione di Flink in Amazon Managed Service for Apache Flink. Per eseguire questa operazione, puoi utilizzare,, SDK o. AWS CLI AWS CloudFormation AWS AWS Management Console

Nota

Non puoi utilizzare aggiornamenti di versione in loco per Apache Flink con Amazon Managed Service per Apache Flink Studio.

Aggiornamento delle applicazioni utilizzando aggiornamenti di versione in loco per Apache Flink

Prima di iniziare, ti consigliamo di guardare questo video: Aggiornamenti delle versioni in loco.

Per eseguire aggiornamenti di versione sul posto per Apache Flink, puoi utilizzare,, SDK o. AWS CLI AWS CloudFormation AWS AWS Management ConsoleÈ possibile utilizzare questa funzionalità con qualsiasi applicazione esistente utilizzata con Managed Service for Apache Flink in uno stato or. READY RUNNING Utilizza l' UpdateApplication API per aggiungere la possibilità di modificare il runtime di Flink.

Prima dell'aggiornamento: aggiornamento dell'applicazione Apache Flink

Quando scrivi le tue applicazioni Flink, le raggruppi con le relative dipendenze in un JAR dell'applicazione e carichi il JAR nel tuo bucket Amazon S3. Da lì, Amazon Managed Service for Apache Flink esegue il job nel nuovo runtime Flink che hai selezionato. Potrebbe essere necessario aggiornare le applicazioni per ottenere la compatibilità con il runtime Flink a cui desideri eseguire l'aggiornamento. Possono esserci delle incongruenze tra le versioni di Flink che impediscono l'aggiornamento della versione. Più comunemente, ciò avverrà con connettori per sorgenti (ingresso) o destinazioni (lavandini, uscite) e dipendenze di Scala. Flink 1.15 e le versioni successive di Managed Service for Apache Flink sono indipendenti dalla scala e il tuo JAR deve contenere la versione di Scala che intendi utilizzare.

Per aggiornare l'applicazione

  1. Leggi i consigli della community di Flink sull'aggiornamento delle applicazioni con state. Vedi Aggiornamento delle applicazioni e delle versioni di Flink.

  2. Leggi l'elenco dei problemi e delle limitazioni più comuni. Per informazioni, consulta Precauzioni e problemi noti.

  3. Aggiorna le tue dipendenze e testa le tue applicazioni localmente. Queste dipendenze sono in genere:

    1. Il runtime e l'API di Flink.

    2. Connettori consigliati per il nuovo runtime Flink. Puoi trovarli nelle versioni Release per il runtime specifico a cui desideri eseguire l'aggiornamento.

    3. Scala — Apache Flink è indipendente dalla scala a partire da Flink 1.15 incluso. È necessario includere le dipendenze di Scala che si desidera utilizzare nel JAR dell'applicazione.

  4. Crea una nuova applicazione JAR su zipfile e caricala su Amazon S3. Ti consigliamo di utilizzare un nome diverso dal precedente JAR/zipFile. Se devi eseguire il rollback, utilizzerai queste informazioni.

  5. Se esegui applicazioni con stato, ti consigliamo vivamente di scattare un'istantanea dell'applicazione corrente. In questo modo è possibile eseguire il rollback in modalità statefully in caso di problemi durante o dopo l'aggiornamento.

Aggiornamento dell'applicazione a una nuova versione di Apache Flink

È possibile aggiornare l'applicazione Flink utilizzando l'azione. UpdateApplication

Puoi chiamare l'UpdateApplicationAPI in diversi modi:

  • Utilizza il flusso di lavoro di configurazione esistente su AWS Management Console.

    • Vai alla pagina della tua app su AWS Management Console.

    • Scegli Configura.

    • Seleziona il nuovo runtime e l'istantanea da cui vuoi iniziare, nota anche come configurazione di ripristino. Utilizza l'impostazione più recente come configurazione di ripristino per avviare l'app dall'ultima istantanea. Seleziona la nuova applicazione aggiornata JAR/zip su Amazon S3.

  • Usa l'azione update-application. AWS CLI

  • Usa AWS CloudFormation (CFN).

    • Aggiorna il RuntimeEnvironmentcampo. In precedenza, AWS CloudFormation eliminava l'applicazione e ne creava una nuova, causando la perdita delle istantanee e della cronologia dell'altra app. Ora AWS CloudFormation aggiorna la RuntimeEnvironment versione in uso e non elimina l'applicazione.

  • Usa l' AWS SDK.

    • Consulta la documentazione SDK per il linguaggio di programmazione che preferisci. Per informazioni, consulta UpdateApplication.

È possibile eseguire l'aggiornamento mentre l'applicazione è in RUNNING stato o mentre l'applicazione è arrestata in READY tale stato. Amazon Managed Service for Apache Flink esegue la convalida per verificare la compatibilità tra la versione di runtime originale e la versione di runtime di destinazione. Questo controllo di compatibilità viene eseguito quando lo esegui UpdateApplicationmentre sei in RUNNING uno stato o successivamente StartApplicationse esegui l'upgrade mentre sei in stato. READY

L'esempio seguente mostra l'aggiornamento di un'app nello RUNNING stato denominato UpgradeTest Flink 1.18 negli Stati Uniti orientali (Virginia settentrionale) utilizzando AWS CLI e l'avvio dell'app aggiornata dall'ultima istantanea.

aws --region us-east-1 kinesisanalyticsv2 update-application \ --application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \ --application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\ '{"CodeContentUpdate": {"S3ContentLocationUpdate": '\ '{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \ --run-configuration-update '{"ApplicationRestoreConfiguration": '\ '{"ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"}}' \ --current-application-version-id ${current_application_version}
  • Se hai abilitato gli snapshot del servizio e desideri continuare l'applicazione dallo snapshot più recente, Amazon Managed Service for Apache Flink verifica che il runtime dell'RUNNINGapplicazione corrente sia compatibile con il runtime di destinazione selezionato.

  • Se hai specificato uno snapshot da cui continuare il runtime di destinazione, Amazon Managed Service for Apache Flink verifica che il runtime di destinazione sia compatibile con lo snapshot specificato. Se il controllo di compatibilità fallisce, la richiesta di aggiornamento viene rifiutata e l'applicazione rimane invariata nello stato. RUNNING

  • Se scegli di avviare l'applicazione senza uno snapshot, Amazon Managed Service for Apache Flink non esegue alcun controllo di compatibilità.

  • Se l'applicazione aggiornata fallisce o rimane bloccata in uno UPDATING stato transitivo, segui le istruzioni nella Rollback sezione per tornare allo stato integro.

Flusso di processo per l'esecuzione di applicazioni statali

Il diagramma seguente rappresenta il flusso di lavoro consigliato per aggiornare l'applicazione durante l'esecuzione. Partiamo dal presupposto che l'applicazione sia dotata di stato e che le istantanee siano state abilitate. Per questo flusso di lavoro, al momento dell'aggiornamento, ripristini l'applicazione dall'ultima istantanea scattata automaticamente da Amazon Managed Service for Apache Flink prima dell'aggiornamento.

L'esempio seguente mostra l'aggiornamento di un'app READY nello stato denominato UpgradeTest Flink 1.18 negli Stati Uniti orientali (Virginia settentrionale) utilizzando il. AWS CLI Non esiste un'istantanea specificata per avviare l'app perché l'applicazione non è in esecuzione. È possibile specificare un'istantanea quando si invia la richiesta di avvio dell'applicazione.

aws --region us-east-1 kinesisanalyticsv2 update-application \ --application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \ --application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\ '{"CodeContentUpdate": {"S3ContentLocationUpdate": '\ '{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \ --current-application-version-id ${current_application_version}
  • È possibile aggiornare il runtime delle applicazioni in READY stato a qualsiasi versione di Flink. Amazon Managed Service for Apache Flink non esegue alcun controllo finché non avvii l'applicazione.

  • Amazon Managed Service for Apache Flink esegue solo controlli di compatibilità sullo snapshot selezionato per avviare l'app. Si tratta di controlli di compatibilità di base che seguono la tabella di compatibilità Flink. Controllano solo la versione di Flink con cui è stata scattata l'istantanea e la versione di Flink che hai scelto come target. Se il runtime Flink dell'istantanea selezionata è incompatibile con il nuovo runtime dell'app, la richiesta di avvio potrebbe essere rifiutata.

Flusso di processo per applicazioni Ready State

Il diagramma seguente rappresenta il flusso di lavoro consigliato per aggiornare l'applicazione mentre è pronta. Partiamo dal presupposto che l'applicazione sia dotata di stato e che le istantanee siano state abilitate. Per questo flusso di lavoro, al momento dell'aggiornamento, ripristini l'applicazione dall'ultima istantanea scattata automaticamente da Amazon Managed Service for Apache Flink quando l'applicazione è stata interrotta.

Rollback

Se riscontri problemi con l'applicazione o riscontri incongruenze nel codice dell'applicazione tra le versioni di Flink, puoi eseguire il rollback utilizzando, AWS CLI, AWS CloudFormation SDK o. AWS AWS Management Console Gli esempi seguenti mostrano come si presenta il rollback in diversi scenari di errore.

L'aggiornamento del runtime è riuscito, l'applicazione è in RUNNING stato, ma il processo non riesce e viene riavviato continuamente

Supponiamo che stiate cercando di aggiornare un'applicazione stateful denominata TestApplication da Flink 1.15 a Flink 1.18 negli Stati Uniti orientali (Virginia settentrionale). Tuttavia, l'applicazione Flink 1.18 aggiornata non si avvia o si riavvia costantemente, anche se l'applicazione è in stato. RUNNING Si tratta di uno scenario di errore comune. Per evitare ulteriori tempi di inattività, si consiglia di ripristinare immediatamente l'applicazione alla versione precedente in esecuzione (Flink 1.15) e di diagnosticare il problema in un secondo momento.

Per ripristinare l'applicazione alla versione precedente in esecuzione, utilizzate il comando AWS CLI rollback-application o l'azione API. RollbackApplication Questa azione API ripristina le modifiche che hai apportato e che hanno portato alla versione più recente. Quindi riavvia l'applicazione utilizzando l'ultima istantanea riuscita.

Ti consigliamo vivamente di scattare un'istantanea con l'app esistente prima di tentare l'aggiornamento. Ciò contribuirà a evitare la perdita di dati o la necessità di rielaborarli.

In questo scenario di errore, l'applicazione non AWS CloudFormation verrà ripristinata automaticamente. È necessario aggiornare il CloudFormation modello in modo che punti al runtime precedente e al codice precedente per CloudFormation forzare l'aggiornamento dell'applicazione. Altrimenti, CloudFormation si presuppone che l'applicazione sia stata aggiornata durante la transizione allo RUNNING stato.

Ripristino di un'applicazione bloccata UPDATING

Se l'applicazione si blocca nello AUTOSCALING stato UPDATING or dopo un tentativo di aggiornamento, Amazon Managed Service for Apache Flink offre il AWS CLI comando rollback-applications o l'azione RollbackApplicationsAPI che può ripristinare l'applicazione alla versione precedente al blocco o allo stato. UPDATING AUTOSCALING Questa API ripristina le modifiche che hai apportato che hanno causato il blocco o lo stato transitivo dell'applicazione. UPDATING AUTOSCALING

Procedure consigliate e raccomandazioni generali

  • Testa il nuovo job/runtime senza stato in un ambiente non di produzione prima di tentare un aggiornamento di produzione.

  • Valuta la possibilità di testare prima l'aggiornamento stateful con un'applicazione non di produzione.

  • Assicurati che il tuo nuovo job graph abbia uno stato compatibile con l'istantanea che utilizzerai per avviare l'applicazione aggiornata.

    • Assicurati che i tipi memorizzati negli stati dell'operatore rimangano gli stessi. Se il tipo è cambiato, Apache Flink non può ripristinare lo stato dell'operatore.

    • Assicurati che gli ID operatore impostati utilizzando il uid metodo rimangano gli stessi. Apache Flink consiglia vivamente di assegnare ID univoci agli operatori. Per ulteriori informazioni, consulta Assegnazione degli ID operatore nella documentazione di Apache Flink.

      Se non assegnate ID ai vostri operatori, Flink li genera automaticamente. In tal caso, potrebbero dipendere dalla struttura del programma e, se modificati, causare problemi di compatibilità. Flink utilizza gli ID degli operatori per abbinare lo stato nell'istantanea all'operatore. La modifica degli ID operatore comporta il mancato avvio dell'applicazione, l'eliminazione dello stato memorizzato nell'istantanea e l'avvio del nuovo operatore senza stato.

    • Non modificate la chiave utilizzata per memorizzare lo stato della chiave.

    • Non modificate il tipo di input degli operatori statici come window o join. Ciò modifica implicitamente il tipo di stato interno dell'operatore, causando un'incompatibilità di stato.

Precauzioni e problemi noti

Modifiche alla configurazione non consentite da Flink 1.19 e versioni successive

  • Se state aggiornando il runtime da Flink 1.18 o precedente a Flink 1.19 o versione successiva, le modifiche alla configurazione del job Flink utilizzando il codice di lavoro Flink non sono più consentite. Di conseguenza, la candidatura non riuscirà a inviare il lavoro. Un registro degli errori indica quali configurazioni non consentite sono state modificate in fase di esecuzione. Per ulteriori informazioni, consulta FlinkRuntimeException: «Sono state rilevate modifiche alla configurazione non consentite».

Limitazioni note della compatibilità tra stati

  • Se utilizzi l'API Table, Apache Flink non garantisce la compatibilità degli stati tra le versioni di Flink. Per ulteriori informazioni, consulta Stateful Upgrades and Evolution nella documentazione di Apache Flink.

  • Gli stati di Flink 1.6 non sono compatibili con Flink 1.18. L'API rifiuta la tua richiesta se tenti di eseguire l'aggiornamento da 1.6 a 1.18 e versioni successive con state. Puoi eseguire l'aggiornamento alla versione 1.8, 1.11, 1.13 e 1.15 e scattare un'istantanea, quindi eseguire l'aggiornamento alla versione 1.18 e successive. Per ulteriori informazioni, consulta Aggiornamento delle applicazioni e delle versioni Flink nella documentazione di Apache Flink.

Problemi noti con il connettore Flink Kinesis

  • Se si utilizza Flink 1.11 o versioni precedenti e si utilizza il amazon-kinesis-connector-flink connettore per il supporto E nhanced-fan-out (EFO), è necessario eseguire ulteriori passaggi per un aggiornamento stateful a Flink 1.13 o versione successiva. Ciò è dovuto alla modifica del nome del pacchetto del connettore. Per ulteriori informazioni, vedere amazon-kinesis-connector-flink.

    Il amazon-kinesis-connector-flink connettore per Flink 1.11 e versioni precedenti utilizza la confezionesoftware.amazon.kinesis, mentre il connettore Kinesis per Flink 1.13 e versioni successive utilizza. org.apache.flink.streaming.connectors.kinesis Utilizzate questo strumento per supportare la migrazione: -state-migrator. amazon-kinesis-connector-flink

  • Se si utilizza Flink 1.13 o versioni precedenti FlinkKinesisProducer e si esegue l'aggiornamento a Flink 1.15 o successivo, per un aggiornamento statico è necessario continuare a utilizzare in Flink 1.15 o versione successiva, anziché la versione più recente. FlinkKinesisProducer KinesisStreamsSink Tuttavia, se hai già un uid set personalizzato sul tuo sink, dovresti essere in grado di passare a perché non mantiene lo stato. KinesisStreamsSink FlinkKinesisProducer Flink lo tratterà come lo stesso operatore perché uid è impostata una personalizzazione.

Applicazioni Flink scritte in Scala

  • A partire da Flink 1.15, Apache Flink non include Scala nel runtime. È necessario includere la versione di Scala che si desidera utilizzare e altre dipendenze di Scala nel codice JAR/zip quando si esegue l'aggiornamento a Flink 1.15 o successivo. Per ulteriori informazioni, consulta Amazon Managed Service for Apache Flink for Apache Flink release 1.15.2.

  • Se la tua applicazione utilizza Scala e la stai aggiornando da Flink 1.11 o precedente (Scala 2.11) a Flink 1.13 (Scala 2.12), assicurati che il codice utilizzi Scala 2.12. Altrimenti, l'applicazione Flink 1.13 potrebbe non riuscire a trovare le classi Scala 2.11 nel runtime Flink 1.13.

Aspetti da considerare quando si esegue il downgrade dell'applicazione Flink

  • Il downgrade delle applicazioni Flink è possibile, ma limitato ai casi in cui l'applicazione era precedentemente in esecuzione con la versione precedente di Flink. Per un aggiornamento statico, Managed Service for Apache Flink richiederà l'utilizzo di un'istantanea scattata con una versione corrispondente o precedente per il downgrade.

  • Se state aggiornando il runtime da Flink 1.13 o versione successiva a Flink 1.11 o precedente e se l'app utilizza il backend di stato, l'applicazione fallirà continuamente. HashMap