S3 StreamingFileSink FileNotFoundExceptions - 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.

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://your-s3-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) ...

Flink StreamingFileSink escribe los registros en los sistemas de archivos compatibles con los sistemas de archivos. Dado que los flujos entrantes pueden ser ilimitados, los datos se organizan en archivos parciales de tamaño finito y se añaden nuevos archivos a medida que se escriben los datos. El ciclo de vida parcial y la política de renovación determinan el momento, el tamaño y la denominación de los archivos parciales.

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:

  • Instantánea obsoleta utilizada para iniciar la aplicación Managed Service for 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 Managed Service for 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 CreateSnapshot en 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 out-of-date referencia a un archivo de pieza en curso al que se le ha cambiado el nombre y al que se ha asignado el siguiente punto de control o punto de guardado.

    • 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 for Apache Flink con Amazon S3 siempre StreamingFileSink deben tener habilitada y RESTORE_FROM_LATEST_SNAPSHOT configurada la instantánea del 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 ha detenido la aplicación durante demasiado tiempo y la política de ciclo de vida de los buckets de S3 ha eliminado el archivo de parte en curso al que hace referencia el punto de almacenamiento de la aplicación. MultiPartUpload 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 se ha corregido en la versión 1.15 de Managed Service for Apache Flink. Migre su aplicación a la última versión de Managed Service for Apache Flink para evitar que se repita. También le 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á.