La aplicación se está reiniciando - 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.

La aplicación se está reiniciando

Si la aplicación no está en buen estado, el trabajo en Apache Flink fallará y se reiniciará continuamente. En esta sección se describen los síntomas y los pasos para solucionar esta condición.

Síntomas

Esta condición puede tener los siguientes síntomas:

  • La métrica FullRestarts no es cero. Esta métrica representa el número de veces que se ha reiniciado el trabajo de la aplicación desde que se inició la aplicación.

  • La métrica Downtime no es cero. Esta métrica representa el número de milisegundos en los que la aplicación se encuentra en estado FAILING o RESTARTING.

  • El registro de la aplicación contiene cambios de estado a RESTARTING o FAILED. Puede consultar el registro de su aplicación para ver estos cambios de estado mediante la siguiente consulta de CloudWatch Logs Insights:. Analice los errores: errores relacionados con las tareas de la aplicación

Causas y soluciones

Las siguientes condiciones pueden provocar que la aplicación se vuelva inestable y se reinicie repetidamente:

  • El operador está emitiendo una excepción: si no se gestiona alguna excepción en un operador de su aplicación, la aplicación realiza una conmutación por error (interpretando que el operador no puede gestionar la falla). La aplicación se reinicia desde el último punto de control para mantener la semántica de procesamiento “una sola vez”. Como resultado, Downtime no es cero durante estos períodos de reinicio. Para evitar que esto suceda, le recomendamos que gestione cualquier excepción reintentable en el código de la aplicación.

    Puede investigar las causas de esta condición consultando los registros de la aplicación para ver si el estado de la aplicación cambió de RUNNING a FAILED. Para obtener más información, consulte Analice los errores: errores relacionados con las tareas de la aplicación.

  • Las transmisiones de datos de Kinesis no se aprovisionan correctamente: si una fuente o receptor de su aplicación es una transmisión de datos de Kinesis, compruebe las métricas de la transmisión para ver si hay errores. ReadProvisionedThroughputExceeded WriteProvisionedThroughputExceeded

    Si ve estos errores, puede aumentar el rendimiento disponible para el flujo de Kinesis aumentando el número de particiones del flujo. Para más información, consulte How do I change the number of open shards in Kinesis Data Streams?

  • No hay otros orígenes o receptores disponibles o no se los suministra correctamente: compruebe que la aplicación suministre correctamente los orígenes y los receptores. Compruebe que todas las fuentes o receptores utilizados en la aplicación (como otros AWS servicios o fuentes o destinos externos) estén bien aprovisionadas, no sufran limitaciones de lectura o escritura o no estén disponibles periódicamente.

    Si tiene problemas de rendimiento con sus servicios dependientes, aumente los recursos disponibles para esos servicios o, bien, investigue la causa de cualquier error o falta de disponibilidad.

  • No se suministran correctamente los operadores: si la carga de trabajo de los subprocesos de uno de los operadores de la aplicación no se distribuye correctamente, es posible que el operador se sobrecargue y la aplicación se bloquee. Para obtener información sobre cómo ajustar el paralelismo de los operadores, consulte Gestión correcta del escalado del operador.

  • La aplicación produce un error DaemonException: este error aparece en el registro de la aplicación si utiliza una versión de Apache Flink anterior a la 1.11. Es posible que necesite actualizar a una versión posterior de Apache Flink para poder utilizar una versión de KPL 0.14 o posterior.

  • La aplicación falla con TimeoutException FlinkException, o RemoteTransportException: estos errores pueden aparecer en el registro de la aplicación si los administradores de tareas fallan. Si la aplicación está sobrecargada, los administradores de tareas pueden experimentar una presión en los recursos de CPU o memoria y hacer que fallen.

    Estos errores pueden ser similares a los siguientes:

    • java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out

    • org.apache.flink.util.FlinkException: The assigned slot xxx was removed

    • org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager

    Para solucionar este problema, compruebe lo siguiente:

    • Comprueba tus CloudWatch métricas para detectar picos inusuales en el uso de la CPU o la memoria.

    • Compruebe si la aplicación tiene problemas de rendimiento. Para obtener más información, consulte Solucione problemas de rendimiento.

    • Examine el registro de la aplicación para detectar excepciones no gestionadas que esté generando el código de la aplicación.

  • La aplicación falla y aparece el error JaxbAnnotationModule No se encuentra: este error se produce si la aplicación usa Apache Beam, pero no tiene las dependencias o versiones de dependencia correctas. Las aplicaciones de Managed Service para Apache Flink que utilizan Apache Beam deben utilizar las siguientes versiones de dependencias:

    <jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>

    Si no proporciona la versión correcta de jackson-module-jaxb-annotations como dependencia explícita, la aplicación la cargará desde las dependencias del entorno y, como las versiones no coincidirán, la aplicación se bloqueará durante el tiempo de ejecución.

    Para obtener más información sobre el uso de Apache Beam con Managed Service para Apache Flink, consulte Utilice CloudFormation.

  • La aplicación falla con java.io.IOException: Insufficient number of network buffers

    Esto ocurre cuando una aplicación no tiene suficiente memoria asignada para los búferes de red. Los búferes de red facilitan la comunicación entre las subtareas. Se los utiliza para almacenar registros antes de transmitirlos a través de una red y para almacenar los datos entrantes antes de dividirlos en registros y destinarlos a subtareas. La cantidad de búferes de red necesarios escala directamente según el paralelismo y la complejidad del gráfico de trabajo. Existen varios enfoques para mitigar este problema:

    • Puede configurar un parallelismPerKpu más bajo para que haya más memoria asignada por subtarea y búferes de red. Tenga en cuenta que bajar el parallelismPerKpu aumentará la KPU y, por lo tanto, el costo. Para evitarlo, puede reducir el paralelismo según el mismo factor para mantener la misma cantidad de KPU.

    • Puede simplificar el gráfico de tareas reduciendo el número de operadores o encadenándolos para que se necesiten menos búferes.

    • De lo contrario, puede ponerse en contacto con https://aws.amazon.com/premiumsupport/ para obtener una configuración personalizada del búfer de red.