AWS managed flink 에서 어플리케이션의 재배포가 필요한 경우, 기존 어플리케이션을 중단이 필요합니다.
어플리케이션을 중단하는 방법엔 크게 두 가지 stop, force stop 이 있는데, 이 글에선 해당 방법이 무엇인지, 어떻게 사용해야하는지 실제 라이브 환경 대응 경험을 통해 설명합니다.
GPT o3 대화를 통해 정리한 글이므로, 검증이 필요합니다.
AWS managed flink 에서만 유효한 동작 방식일 수 있습니다.
Flink 어플리케이션을 재배포하기 위해선 기존의 배포를 멈춰야 하는데, 이 때 두 가지 배포 방식 stop, force stop 방식이 있음.
| 구분 | 동작 방식 | 데이터 일관성 영향 |
|---|---|---|
| Stop (정상 중지) | 현재 읽은 offset 까지 처리하여 마지막 스냅숏을 생성한 뒤 종료 | exactly-once/at-least-once 보장 유지. 마지막 스냅숏 이후 입력 레코드는 중복 없이 재시작 가능 |
| Force Stop (강제 중지) | 컨테이너를 즉시 종료시켜 현재 스냅숏 생성을 하지 않고, 상태를 이전 성공한 스냅숏으로 롤백 | 마지막 스냅숏 이후 sink 되었던 레코드에 대해 다시 sink 될 수 있음 |
Flink 의 기본적인 processing 중 에러 처리 정책은 재시도 전략에 의해 재시도를 수행한 후, 지속적인 실패시 application 이 FAILED 상태로 다운되는 것.
stop 으로 application 을 중지하고자 한다면, 잘못된 쿼리로 인해 영구적인 예외를 만나서 계속해서 재시도를 하여 stop 되지 않았을 것임.
따라서, force stop 으로 application 을 중지한 후, 수정한 버전으로 재배포 진행하여 해결.
force stop 은 sink 의 중복 처리 위험이 있는데, 사용하였던 insert 쿼리가 멱등성 보장하였기 때문에 sink 가 중복되어도 문제가 없었음.