Apache Flink — 스트림을 엔진으로 돌린다 · 체크포인트와 세이브포인트 · 测验
퀴즈: 체크포인트·세이브포인트·정확히 한 번
6道题. 完成作答后会显示正确答案和解析。
체크포인트 1초 간격으로 csv 파일 싱크에 쓰는 잡이 돌고 있다. 하류 도구가 읽어도 되는 파일은?
- 이름이 part- 로 시작하는 파일 — 체크포인트 완료 통지 뒤 확정된 것
- 이름이 .part- 로 시작하는 파일 — 가장 최근 행이 들어 있는 것
- 디렉터리의 모든 파일 — 싱크는 쓰는 즉시 확정한다
- 체크포인트 디렉터리의 chk-N 아래 파일 — 결과 사본이 거기 있다
`STOP JOB '<jid>' WITH SAVEPOINT` 로 멈춘 직후 싱크 디렉터리에 쓰는 중이던 점 파일은 어떻게 되는가?
- 그대로 남아 다음 잡이 이어 쓴다
- 세이브포인트가 완료되며 확정 파일로 바뀐다
- 세이브포인트 안으로 옮겨져 디렉터리에서 사라진다
- 지워지고 그 안의 행은 다음 잡이 다시 만든다
세이브포인트에서 되살린 잡이 싱크 경로를 out1 에서 out2 로 바꿨는데도 순번이 out1 의 마지막 바로 다음부터 나왔다. 왜인가?
- filesystem 싱크가 out1 의 마지막 id 를 읽어 이어 붙였기 때문이다
- datagen 은 원래 잡 이름별로 번호를 기억하기 때문이다
- 원천이 다음에 낼 번호가 원천의 상태로 세이브포인트에 들어 있기 때문이다
- JobManager 가 잡 기록에서 마지막 행 수를 찾아 시작점을 정했기 때문이다
보존 설정 없이(기본값) 체크포인트를 켠 잡을 취소했다. ckpt/<jid>/ 아래는 어떻게 되는가?
- 마지막 chk-N 하나만 남는다
- 모든 chk-N 이 남는다 — 지우는 것은 사람의 몫이다
- 세이브포인트 디렉터리로 옮겨진다
- chk-N 디렉터리가 지워진다 — 기본은 장애 복구용이라 보존하지 않는다
SQL 을 조금 고쳐 세이브포인트 없이 같은 싱크 디렉터리로 다시 INSERT 했다. 순번 원천이라면 결과는?
- 원천이 1 부터 다시 세어 이미 있는 id 가 한 번 더 들어간다
- Flink 가 같은 잡 이름을 알아보고 마지막 위치부터 이어 쓴다
- 싱크가 같은 디렉터리의 파일을 덮어써 결과가 새로 만들어진다
- 체크포인트 디렉터리에 옛 잡의 체크포인트가 있으면 자동으로 복원한다
RETAIN_ON_CANCELLATION 으로 남긴 chk-N 에서 되살려 같은 디렉터리에 이어 썼다. 취소 때 남은 점 파일을 하류가 함께 읽으면?
- 아무 문제 없다 — 새 잡이 점 파일을 이어 받아 확정했다
- 빠지는 id 가 생긴다 — 점 파일의 행은 새 잡이 다시 쓰지 않는다
- 겹치는 id 가 생긴다 — 새 잡이 체크포인트 시점부터 다시 써서 확정했기 때문이다
- 읽을 수 없다 — 점 파일은 취소 때 이미 비워졌다