S3 StreamingFileSink FileNotFoundExceptions - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려졌습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

S3 StreamingFileSink FileNotFoundExceptions

Managed Service for Apache Flink 애플리케이션은 저장 포인트에서 참조하는 진행 중인 부분 파일이 없는 경우 스냅샷에서 시작할 때 진행 중인 부분 파일 FileNotFoundException로 실행될 수 있습니다. 이 오류 모드가 발생하면 Managed Service for Apache Flink 애플리케이션의 연산자 상태는 일반적으로 복구할 수 없으므로 SKIP_RESTORE_FROM_SNAPSHOT을 사용하는 스냅샷 없이 다시 시작해야 합니다. 다음 예 스택트레이스를 참조하십시오.

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) ...

StreamingFileSinkFlink는 파일 시스템에서 지원하는 파일 시스템에 레코드를 기록합니다. 들어오는 스트림을 제한하지 않을 수 있다는 점을 고려하면 데이터는 데이터가 기록될 때 새 파일이 추가되고 한정된 크기의 부분 파일로 구성됩니다. 부품 라이프사이클 및 롤오버 정책에 따라 부분 파일의 타이밍, 크기 및 명칭이 결정됩니다.

체크포인트 지정 및 저장점 지정(스냅샷) 중에는 보류 중인 모든 파일의 명칭이 바뀌고 구속됩니다. 그러나 진행 중인 부분 파일은 구속되지 않고 명칭이 변경되며 해당 참조는 작업을 복원할 때 사용할 체크포인트 또는 저장점 메타데이터에 보관됩니다. 진행 중인 이러한 부분 파일은 결국 미결로 넘겨지고 후속 체크포인트 또는 저장점에서 명칭을 바꾸고 구속됩니다.

진행 중인 부분 파일이 누락되는 근본 원인과 해결 방법은 다음과 같습니다.

  • Apache Flink용 관리 서비스 애플리케이션을 시작하는 데 사용되는 오래된 스냅샷 — 애플리케이션이 중지되거나 업데이트될 때 생성된 최신 시스템 스냅샷만 Amazon S3에서 Apache Flink용 관리 서비스 애플리케이션을 시작하는 데 사용할 수 있습니다. StreamingFileSink 이러한 장애 클래스를 방지하려면 최신 시스템 스냅샷을 사용하십시오.

    • 예를 들어 중지 또는 업데이트 중에 시스템 트리거 스냅샷 대신 CreateSnapshot을 사용하여 만든 스냅샷을 선택할 때 이런 현상이 발생합니다. 이전 스냅샷의 저장 지점에는 후속 체크포인트 또는 저장점에 의해 이름이 변경되고 커밋된 진행 중인 부분 파일에 out-of-date 대한 참조가 보관됩니다.

    • 이는 최신이 아닌 Stop/Update 이벤트에서 시스템이 트리거한 스냅샷을 선택한 경우에도 발생할 수 있습니다. 시스템 스냅샷이 비활성화되었지만 RESTORE_FROM_LATEST_SNAPSHOT을 이미 구성한 애플리케이션을 예로 들 수 있습니다. 일반적으로 Amazon S3를 사용하는 Apache Flink 애플리케이션용 관리형 서비스에서는 항상 시스템 스냅샷을 활성화하고 StreamingFileSink RESTORE_FROM_LATEST_SNAPSHOT 구성해야 합니다.

  • 진행 중인 부분 파일 제거 – 진행 중인 부분 파일은 S3 버킷에 있으므로 해당 버킷에 액세스할 수 있는 다른 구성 요소나 행위자에 의해 제거될 수 있습니다.

  • 저장점 이후 자동 체크포인트가 트리거되는 경쟁 조건 – 이는 Managed Service for Apache Flink 버전(최대 1.13 포함)에 영향을 미칩니다. 이 문제는 Apache Flink용 관리형 서비스 버전 1.15에서 수정되었습니다. 애플리케이션을 Apache Flink용 관리형 서비스의 최신 버전으로 마이그레이션하여 재발을 방지하세요. 또한 에서 로 마이그레이션하는 것이 좋습니다. StreamingFileSink FileSink

    • 애플리케이션이 중지되거나 업데이트되면 Managed Service for Apache Flink는 저장점을 트리거하고 두 단계에 걸쳐 애플리케이션을 중지합니다. 두 단계 사이에 자동 체크포인트가 트리거되면 진행 중인 부분 파일의 명칭이 바뀌고 잠재적으로 구속될 수 있으므로 저장점을 사용할 수 없게 됩니다.