Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.
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
FullRestartsno 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
Downtimeno es cero. Esta métrica representa el número de milisegundos en los que la aplicación se encuentra en estadoFAILINGoRESTARTING.El registro de la aplicación contiene cambios de estado a
RESTARTINGoFAILED. Puede consultar estos cambios de estado en el registro de la aplicación mediante la siguiente consulta de CloudWatch Logs Insights: Errores de análisis: 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 una excepción en un operador de la aplicación no se gestiona, la aplicación realiza una conmutación por error (sobre la base de 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,
Downtimeno 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
RUNNINGaFAILED. Para obtener más información, consulte Errores de análisis: errores relacionados con las tareas de la aplicación.Los flujos de datos de Kinesis no se suministran correctamente: si el origen o el receptor de la aplicación es un flujo de datos de Kinesis, compruebe si las métricas del flujo presentan los errores
ReadProvisionedThroughputExceededoWriteProvisionedThroughputExceeded.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. Verifique que se estén suministrando correctamente todos los orígenes o receptores utilizados en la aplicación (como otros servicios de AWS, u orígenes o destinos externos), que estos no presenten limitaciones de lectura o escritura o que 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 falla con 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 presenta una falla de 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 outorg.apache.flink.util.FlinkException: The assigned slot xxx was removedorg.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager
Para solucionar este problema, compruebe lo siguiente:
Compruebe las métricas de CloudWatch para ver si hay 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 Solución de 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 JaxbNotationModule Not Found: 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-annotationscomo 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 Uso de 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
parallelismPerKpumás bajo para que haya más memoria asignada por subtarea y búferes de red. Tenga en cuenta que bajar elparallelismPerKpuaumentará 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.