Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.
S3 StreamingFileSink FileNotFoundExceptions
Las aplicaciones de Managed Service para Apache Flink pueden ejecutarse en un archivo FileNotFoundException parcial en curso cuando se parte de instantáneas si falta un archivo parcial en curso al que se hace referencia por su punto de guardado. Cuando se produce este modo de error, el estado de operador de la aplicación Managed Service para Apache Flink no suele ser recuperable y debe reiniciarse sin instantánea mediante SKIP_RESTORE_FROM_SNAPSHOT. Consulte el siguiente ejemplo de stacktrace:
java.io.FileNotFoundException: No such file or directory: s3://amzn-s3-demo-bucket/pathj/INSERT/2023/4/19/7/_part-2-1234_tmp_12345678-1234-1234-1234-123456789012 at org.apache.hadoop.fs.s3a.S3AFileSystem.s3GetFileStatus(S3AFileSystem.java:2231) at org.apache.hadoop.fs.s3a.S3AFileSystem.innerGetFileStatus(S3AFileSystem.java:2149) at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:2088) at org.apache.hadoop.fs.s3a.S3AFileSystem.open(S3AFileSystem.java:699) at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:950) at org.apache.flink.fs.s3hadoop.HadoopS3AccessHelper.getObject(HadoopS3AccessHelper.java:98) at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverInProgressPart(S3RecoverableMultipartUploadFactory.java:97) ...
StreamingFileSink de Flink escribe registros en sistemas de archivos compatibles con File Systems
Durante los puntos de control y los puntos de guardado (creación de instantáneas), se cambia el nombre de todos los archivos pendientes y se los confirma. Sin embargo, los archivos parciales en curso no se confirman, sino que se les cambia el nombre, y se guarda su referencia en los metadatos de los puntos de control o de guardado para utilizarlos cuando se restauren los trabajos. Con el tiempo, estos archivos parciales en curso pasarán a estar Pendientes, se les cambiará el nombre y se los confirmará en un punto de control o guardado posterior.
A continuación se indican las causas principales y las medidas correctoras de la falta de un archivo parcial en curso:
Se utiliza una instantánea obsoleta para iniciar la aplicación de Managed Service para Apache Flink: solo la última instantánea del sistema tomada cuando se detiene o actualiza una aplicación se puede usar para iniciar una aplicación de Managed Service para Apache Flink con Amazon S3 StreamingFileSink. Para evitar este tipo de error, utilice la última instantánea del sistema.
Esto ocurre, por ejemplo, cuando se selecciona una instantánea creada con
CreateSnapshoten lugar de una instantánea activada por el sistema durante la detención o la actualización. El punto de guardado de la instantánea anterior guarda una referencia desactualizada al archivo parcial en curso al que se le cambió el nombre y se lo confirmó en un punto de control o guardado posterior.Esto también puede ocurrir cuando se selecciona una instantánea activada por el sistema de un evento de detención o actualización que no es el más reciente. Un ejemplo es una aplicación con la instantánea del sistema deshabilitada pero con configuración
RESTORE_FROM_LATEST_SNAPSHOT. Por lo general, las aplicaciones de Managed Service para Apache Flink con Amazon S3 StreamingFileSink siempre deben tener habilitada la instantánea y configuraciónRESTORE_FROM_LATEST_SNAPSHOTdel sistema.
Se elimina el archivo parcial en curso: dado que el archivo parcial en curso se encuentra en un bucket de S3, pueden eliminarlo otros componentes o actores que tengan acceso al bucket.
Esto puede suceder si se detuvo la aplicación durante demasiado tiempo y la política de ciclo de vida de MultipartUpload de S3 bucket ha eliminado el archivo parcial en curso al que hace referencia el punto de guardado de la aplicación. Para evitar este tipo de errores, asegúrese de que la política de ciclo de vida de S3 Bucket MPU abarque un período lo suficientemente amplio para su caso de uso.
Esto también puede ocurrir cuando el archivo parcial en curso se elimina manualmente o mediante otro de los componentes del sistema. Para evitar este tipo de errores, asegúrese de que otros actores o componentes no eliminen los archivos parciales en curso.
Condición de carrera en la que se activa un punto de control automático después del punto de guardado: esto afecta a las versiones de Managed Service para Apache Flink hasta la 1.13, inclusive. Este problema está solucionado en Managed Service para Apache Flink, versión 1.15. Migre la aplicación a la versión más reciente de Managed Service para Apache Flink para evitar la reaparición. También sugerimos migrar de StreamingFileSink a FileSink
. Cuando las aplicaciones se detienen o actualizan, Managed Service para Apache Flink activa un punto de guardado y detiene la aplicación en dos pasos. Si se activa un punto de control automático entre los dos pasos, el punto de guardado quedará inutilizable, ya que se cambiará el nombre del archivo parcial en curso y, posiblemente, se lo confirmará.