Actualizaciones de versión locales para Apache Flink - Managed Service para Apache Flink

Amazon Managed Service para Apache Flink Amazon se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.

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.

Actualizaciones de versión locales para Apache Flink

Con las actualizaciones de versión locales para Apache Flink, usted conserva la trazabilidad de las aplicaciones con respecto a un único ARN en todas las versiones de Apache Flink. Esto incluye instantáneas, registros, métricas, etiquetas, configuraciones de Flink, aumentos de los límites de recursos, VPC y más. Puede realizar actualizaciones de versión locales de Apache Flink para actualizar las aplicaciones existentes a una nueva versión de Flink en Amazon Managed Service for Apache Flink. Para realizar esta tarea, puede utilizar el AWS CLI AWS CloudFormation, el AWS SDK o el. AWS Management Console

nota

No puedes usar actualizaciones de versión locales de Apache Flink con Amazon Managed Service para Apache Flink Studio.

Actualización de aplicaciones mediante actualizaciones de versiones locales de Apache Flink

Antes de empezar, le recomendamos que vea este vídeo: Actualizaciones de versiones locales.

Para actualizar las versiones locales de Apache Flink, puede usar el AWS CLI AWS CloudFormation, el AWS SDK o el. AWS Management Console Puede utilizar esta función con cualquier aplicación existente que utilice con Managed Service for Apache Flink en un READY estado o estado. RUNNING Utiliza la UpdateApplication API para añadir la posibilidad de cambiar el tiempo de ejecución de Flink.

Antes de actualizar: actualice la aplicación Apache Flink

Al escribir las aplicaciones de Flink, las agrupa con sus dependencias en un JAR de aplicaciones y carga el JAR en su bucket de Amazon S3. A partir de ahí, Amazon Managed Service para Apache Flink ejecuta el trabajo en el nuevo entorno de ejecución de Flink que haya seleccionado. Puede que tengas que actualizar tus aplicaciones para lograr la compatibilidad con el entorno de ejecución de Flink al que deseas actualizar. Puede haber inconsistencias entre las versiones de Flink que provoquen un error en la actualización de la versión. Lo más habitual es que se utilice con conectores para fuentes (entrada) o destinos (sumideros, egresos) y dependencias de Scala. Flink 1.15 y las versiones posteriores de Managed Service for Apache Flink son independientes de Scala, y su JAR debe contener la versión de Scala que planea usar.

Para actualizar la aplicación

  1. Lea los consejos de la comunidad de Flink sobre cómo actualizar las aplicaciones con el estado. Consulte Actualización de aplicaciones y versiones de Flink.

  2. Lea la lista de problemas y limitaciones relacionados con el conocimiento. Consulte Precauciones y problemas conocidos.

  3. Actualice sus dependencias y pruebe sus aplicaciones a nivel local. Estas dependencias suelen ser:

    1. El tiempo de ejecución y la API de Flink.

    2. Se recomiendan conectores para el nuevo entorno de ejecución de Flink. Puede encontrarlos en las versiones de lanzamiento correspondientes al tiempo de ejecución específico al que desee actualizar.

    3. Scala: Apache Flink es independiente de Scala a partir de la versión 1.15 de Flink (inclusive). Debe incluir las dependencias de Scala que desee usar en el JAR de su aplicación.

  4. Cree un nuevo JAR de aplicación en un archivo zip y cárguelo en Amazon S3. Le recomendamos que utilice un nombre diferente al del archivo JAR/zip anterior. Si necesitas revertirlo, utilizarás esta información.

  5. Si ejecuta aplicaciones con estado, le recomendamos encarecidamente que tome una instantánea de la aplicación actual. Esto le permite revertirla de forma automática si tiene problemas durante o después de la actualización.

Actualización de la aplicación a una nueva versión de Apache Flink

Puede actualizar su aplicación Flink mediante la UpdateApplicationacción.

Puedes llamar a la UpdateApplication API de varias formas:

  • Utilice el flujo de trabajo de configuración existente en AWS Management Console.

    • Ve a la página de tu aplicación en AWS Management Console.

    • Elija Configurar.

    • Seleccione el nuevo tiempo de ejecución y la instantánea desde la que quiere empezar, lo que también se conoce como configuración de restauración. Use la configuración más reciente como configuración de restauración para iniciar la aplicación desde la última instantánea. Señale la nueva aplicación actualizada JAR/ZIP en Amazon S3.

  • Utilice la acción de AWS CLI actualizar la aplicación.

  • Utilice AWS CloudFormation (CFN).

    • Actualice el RuntimeEnvironmentcampo. Anteriormente, AWS CloudFormation eliminaba la aplicación y creaba una nueva, lo que provocaba la pérdida de las instantáneas y el resto del historial de la aplicación. Ahora AWS CloudFormation actualiza tu RuntimeEnvironment aplicación y no la borra.

  • Usa el AWS SDK.

    • Consulte la documentación del SDK para ver el lenguaje de programación que prefiera. Consulte UpdateApplication.

Puede realizar la actualización mientras la aplicación está en RUNNING estado o mientras la aplicación está detenida en ese READY estado. Amazon Managed Service for Apache Flink realiza una validación para verificar la compatibilidad entre la versión en tiempo de ejecución original y la versión en tiempo de ejecución de destino. Esta comprobación de compatibilidad se ejecuta cuando se está en UpdateApplicationRUNNINGestado o, al siguiente, StartApplicationsi se actualiza mientras se está en READY ese estado.

En el siguiente ejemplo, se muestra la actualización de una aplicación en un RUNNING estado denominado UpgradeTest Flink 1.18 en EE. UU. Este (Virginia del Norte) mediante la aplicación actualizada AWS CLI y el inicio de la aplicación actualizada desde la última instantánea.

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}
  • Si has activado las instantáneas de servicio y deseas continuar con la aplicación desde la última instantánea, Amazon Managed Service for Apache Flink comprueba que el tiempo de ejecución de la RUNNING aplicación actual es compatible con el tiempo de ejecución de destino seleccionado.

  • Si ha especificado una instantánea desde la que continuar con el tiempo de ejecución de destino, Amazon Managed Service for Apache Flink comprueba que el tiempo de ejecución de destino es compatible con la instantánea especificada. Si se produce un error en la comprobación de compatibilidad, se rechaza la solicitud de actualización y la aplicación permanece intacta en ese estado. RUNNING

  • Si decides iniciar la aplicación sin una instantánea, Amazon Managed Service for Apache Flink no realiza ninguna comprobación de compatibilidad.

  • Si la aplicación actualizada falla o se queda atascada en un UPDATING estado transitivo, siga las instrucciones de la Reversión sección para volver al estado correcto.

Flujo de proceso para ejecutar aplicaciones en estado

El siguiente diagrama representa el flujo de trabajo recomendado para actualizar la aplicación mientras está en ejecución. Suponemos que la aplicación está en estado y que ha activado las instantáneas. Para este flujo de trabajo, al actualizar, se restaura la aplicación a partir de la última instantánea que Amazon Managed Service para Apache Flink realizó automáticamente antes de la actualización.

En el siguiente ejemplo, se muestra la actualización de una aplicación en un READY estado denominado UpgradeTest Flink 1.18 en EE. UU. Este (Virginia del Norte) mediante el. AWS CLI No hay ninguna instantánea específica para iniciar la aplicación porque la aplicación no se está ejecutando. Puede especificar una instantánea al emitir la solicitud de inicio de la aplicación.

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}
  • Puede actualizar el tiempo de ejecución de sus aplicaciones en READY estado a cualquier versión de Flink. Amazon Managed Service for Apache Flink no realiza ninguna comprobación hasta que inicias la aplicación.

  • Amazon Managed Service para Apache Flink solo ejecuta comprobaciones de compatibilidad con la instantánea que seleccionaste para iniciar la aplicación. Se trata de comprobaciones de compatibilidad básicas que siguen la tabla de compatibilidad de Flink. Solo comprueban la versión de Flink con la que se tomó la instantánea y la versión de Flink a la que te diriges. Si el tiempo de ejecución de Flink de la instantánea seleccionada no es compatible con el nuevo tiempo de ejecución de la aplicación, es posible que se rechace la solicitud de inicio.

Flujo de proceso para aplicaciones en estado preparado

El siguiente diagrama representa el flujo de trabajo recomendado para actualizar la aplicación cuando está lista. Suponemos que la aplicación está en estado y que ha activado las instantáneas. Para este flujo de trabajo, al actualizar, se restaura la aplicación a partir de la última instantánea que Amazon Managed Service para Apache Flink tomó automáticamente cuando se detuvo la aplicación.

Reversión

Si tiene problemas con la aplicación o encuentra incoherencias en el código de la aplicación entre las versiones de Flink, puede revertirla utilizando el AWS CLI AWS CloudFormation, el AWS SDK o el. AWS Management Console En los siguientes ejemplos, se muestra el aspecto de la reversión en distintos escenarios de error.

La actualización en tiempo de ejecución se realizó correctamente, la aplicación está en buen RUNNING estado, pero el trabajo está fallando y se reinicia continuamente

Supongamos que está intentando actualizar una aplicación con estado denominada Flink 1.15 TestApplication a Flink 1.18 en EE.UU. Este (Norte de Virginia). Sin embargo, la aplicación Flink 1.18 actualizada no se inicia o se reinicia constantemente, aunque la aplicación esté en ese estado. RUNNING Este es un escenario de error común. Para evitar un mayor tiempo de inactividad, le recomendamos que restablezca la aplicación inmediatamente a la versión en ejecución anterior (Flink 1.15) y que diagnostique el problema más adelante.

Para revertir la aplicación a la versión en ejecución anterior, usa el AWS CLI comando rollback-application o la acción de la API. RollbackApplication Esta acción de la API anula los cambios que realizaste y que dieron como resultado la versión más reciente. A continuación, reinicia la aplicación con la última instantánea correcta.

Le recomendamos encarecidamente que tome una instantánea de la aplicación existente antes de intentar actualizarla. Esto ayudará a evitar la pérdida de datos o tener que volver a procesarlos.

En este escenario de error, no AWS CloudFormation revertirá la aplicación por usted. Debe actualizar la CloudFormation plantilla para que apunte al tiempo de ejecución anterior y al código anterior CloudFormation para forzar la actualización de la aplicación. De lo contrario, se CloudFormation supone que la aplicación se ha actualizado cuando pase al RUNNING estado.

Revertir una aplicación que está atascada UPDATING

Si tu aplicación se queda atascada en el AUTOSCALING estado UPDATING o después de un intento de actualización, Amazon Managed Service for Apache Flink ofrece el AWS CLI comando rollback-applications, o la acción de RollbackApplicationsAPI que puede revertir la aplicación a la versión anterior al bloqueo o estado. UPDATING AUTOSCALING Esta API revierte los cambios que has realizado y que han provocado que la aplicación quede atascada o en UPDATING un estado transitivo. AUTOSCALING

Recomendaciones y prácticas recomendadas generales

  • Pruebe el nuevo trabajo/tiempo de ejecución sin estado en un entorno que no sea de producción antes de intentar una actualización de producción.

  • Considere probar primero la actualización con estado con una aplicación que no sea de producción.

  • Asegúrese de que el nuevo gráfico de tareas tenga un estado compatible con la instantánea que utilizará para iniciar la aplicación actualizada.

    • Asegúrese de que los tipos almacenados en los estados del operador permanezcan iguales. Si el tipo ha cambiado, Apache Flink no podrá restaurar el estado del operador.

    • Asegúrese de que los ID de operador que configuró con el uid método sigan siendo los mismos. Apache Flink recomienda encarecidamente asignar identificadores únicos a los operadores. Para obtener más información, consulte Asignación de identificadores de operador en la documentación de Apache Flink.

      Si no asigna identificadores a sus operadores, Flink los genera automáticamente. En ese caso, pueden depender de la estructura del programa y, si se modifican, pueden provocar problemas de compatibilidad. Flink usa los ID de operador para hacer coincidir el estado de la instantánea con el operador. Al cambiar los ID de operador, la aplicación no se inicia o se elimina el estado almacenado en la instantánea y el nuevo operador se inicia sin estado.

    • No cambie la clave utilizada para almacenar el estado de la clave.

    • No modifique el tipo de entrada de los operadores con estado, como window o join. Esto cambia implícitamente el tipo de estado interno del operador y provoca una incompatibilidad de estados.

Precauciones y problemas conocidos

No se permiten cambios de configuración a partir de la versión 1.19 de Flink y versiones posteriores

  • Si actualiza el tiempo de ejecución de Flink 1.18 o anterior a Flink 1.19 o posterior, ya no se permiten cambios en la configuración de los trabajos de Flink mediante el código de trabajo de Flink. Como resultado, la solicitud no podrá enviar el trabajo. Un registro de errores indica qué configuraciones no permitidas se han modificado en tiempo de ejecución. Para obtener más información, consulte FlinkRuntimeException: «Se detectaron cambios de configuración no permitidos».

Limitaciones conocidas de la compatibilidad entre estados

Problemas conocidos con el conector Flink Kinesis

  • Si utiliza Flink 1.11 o una versión anterior y utiliza el amazon-kinesis-connector-flink conector compatible con E nhanced-fan-out (EFO), debe tomar medidas adicionales para realizar una actualización completa a Flink 1.13 o posterior. Esto se debe al cambio en el nombre del paquete del conector. Para obtener más información, consulte amazon-kinesis-connector-flink.

    El amazon-kinesis-connector-flink conector de Flink 1.11 y versiones anteriores usa el paquetesoftware.amazon.kinesis, mientras que el conector de Kinesis para Flink 1.13 y versiones posteriores usa el paquete. org.apache.flink.streaming.connectors.kinesis Utilice esta herramienta para respaldar su migración: -state-migrator. amazon-kinesis-connector-flink

  • Si utiliza Flink 1.13 o una versión anterior FlinkKinesisProducer y la actualiza a la versión 1.15 o posterior, para obtener una actualización con estado, debe seguir utilizándola en la versión 1.15 o posterior, FlinkKinesisProducer en lugar de utilizar la versión más reciente. KinesisStreamsSink Sin embargo, si ya tienes un uid conjunto personalizado en tu fregadero, deberías poder cambiarlo porque no conserva el estado. KinesisStreamsSink FlinkKinesisProducer Flink lo tratará como el mismo operador porque uid tiene una configuración personalizada.

Aplicaciones de Flink escritas en Scala

  • A partir de la versión 1.15 de Flink, Apache Flink no incluye Scala en el entorno de ejecución. Debe incluir la versión de Scala que desee usar y otras dependencias de Scala en su jar/zip de código cuando actualice a Flink 1.15 o una versión posterior. Para obtener más información, consulte Amazon Managed Service for Apache Flink para la versión 1.15.2 de Apache Flink.

  • Si su aplicación usa Scala y la está actualizando de Flink 1.11 o anterior (Scala 2.11) a Flink 1.13 (Scala 2.12), asegúrese de que su código use Scala 2.12. De lo contrario, es posible que la aplicación Flink 1.13 no encuentre las clases de Scala 2.11 en el entorno de ejecución de Flink 1.13.

Aspectos a tener en cuenta a la hora de degradar la aplicación Flink

  • Es posible degradar las aplicaciones de Flink, pero se limita a los casos en que la aplicación se ejecutaba anteriormente con la versión anterior de Flink. Para una actualización completa, el servicio gestionado de Apache Flink requerirá el uso de una instantánea tomada con una versión coincidente o anterior para la degradación

  • Si está actualizando su entorno de ejecución de Flink 1.13 o posterior a Flink 1.11 o anterior, y si su aplicación usa el backend de HashMap estado, la aplicación fallará continuamente.