작성
·
210
0
예전에 airflow를 쓰면서 DAG의 task가 스케쥴에 따라서 실행되지 않았던 적이 있습니다. 실행될 시간인데 scheduled상태로도 들어가지 않고 아예 사라졌다가 한참 후에 다시 scheduled되어서 중간에 실행되지 않는 시간이 많이 생겼습니다.
당시에는 pool의 slot수를 늘리니 해결이 되긴 했습니다. 그런데 강의에 따르면 slot수에 scheduled는 영향을 주지 않는 것으로 이해가 됐습니다.
혹시 scheduled도 따로 slot개수를 가지게 되는건가요?
p.s. 그때는 몰랐지만 airflow가 너무 자주 실행하는 경우에는 적합하지 않다는 거는 알게된 경험이었습니다. 당시 스케쥴은 1분마다 실행시키는 DAG들을 많이 만들었거든요
답변 1
0
안녕하세요 휘뚜루마뚜루님!
pool의 크기와 scheduled slot의 크기는 상관이 없습니다.
즉 pool 크기를 10으로 지정하더라도 scheduled slot은 100개 또는 1000개 이상 쌓일 수 있습니다.
scheduled slot의 limit이 몇 인지는 문서에 나와있지 않으나 unlimit 일거라 생각됩니다.
아마 당시 1분짜리 스케줄을 많이 만들었을 때 제대로 수행되지 않은 것은 scheduler의 부하로 인해 trigger를 놓쳤을 가능성이 높습니다. 저도 그런 경험이 있는데 당시 1분 주기 dag이 매 분 돌지 않고 간헐적으로 연속 2회 혹은 3회 누락되는 현상을 본 적이 있습니다. 그래서 강의 도입부에서 airflow는 실시간 처리 혹은 분 단위 처리 등에는 적합하지 않다고 말씀드린 거에요 ^^
결국.. pool의 제한 때문보다는 스케줄러가 queue를 제때 하지 못하지 않았나 추정합니다. 혹시 강의 후반부에 있는 airflow 메타테이블 보기 강의를 들으셨을까요? 메타 테이블 중 dag_run 테이블은 dag별로 스케줄러가 queue한 시간이 나옵니다. 분명 돌아야 하는 시간인데 queue한 기록이 없다면 스케줄러가 누락했을 수 있습니다. 1분 간격 dag은 종종 그런 일이 생기죠.
꼭 1분 간격으로 실행해야 한다면 5분마다 도는 dag을 1분씩 어긋나게 5개를 만드는 식으로 해결은 할 수 있는데 cron 스케줄을 아래처럼 만들면 됩니다.
0-59/5 * * * *
1-59/5 * * * *
2-59/5 * * * *
3-59/5 * * * *
4-59/5 * * * *
동일한 로직을 가지되 스케줄만 저렇게 다르게 가진 dag을 만들어서 해결할 순 있어요.
궁금증이 해결되었을까요? ^^