Background
- AWS MSK(Kafka) 데이터를 S3 에 Json 으로 적재하는 앱을 운영중이다.
- S3 에 데이터 재적재를 위해 업로드 되었던 객체들을 모두 삭제한 후 Flink 앱을 재실행 하였다.
- 그러나 Flink 앱을 중지하기 전 생성 하였던 스냅샷을 기준으로 재작업이 진행 되어
flink java.io.FileNotFoundException 장애가 발생하였다.
장애 메시지
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 앱을 중단 후 재실행 시키면, 이전 스냅샷, 체크포인트 상태를 기준으로 이어서 작업하게 된다.
- 그런데 내가 앱을 중단하기 전에 작업하고 있던 S3 Key path 에 해당하는 객체를 삭제 하였기 때문에 위와 같은 장애 메시지가 반환 된 것이다.
장애 대응
- 앱을 재실행 하였는데,
java.io.FileNotFoundException: No such file or directory 장애가 발생하여 Flink 앱의 Task 가 계속 RESTARING 상태이거나 Failed 상태로 남아 있다면 내부적으로 다운타임 상태가 되어 있을 것이다.
- 따라서, 앱을
중지 할 수 없고 강제 중지 해야한다.
- 앱 강제 중지 후
준비됨 상태가 되면 다시 앱 실행 버튼을 누르고 아래 이미지와 같이 스냅샷 없이 실행 을 활성화한 후 실행하면 정상적으로 동작한다.
장애 원인 분석 참고 자료