티스토리 뷰
[Flink] Could not acquire the minimum required resources 이유와 해결방법
정선생 2022. 5. 24. 07:00Flink 로직을 돌릴때 로그에 "Could not acquire the minimum required resources" 라는 메시지가 보이면 이유는 리소스가 부족하기 때문이다. 보통 데이터를 처리할때는 DAG 라고 해서 데이터의 처리 흐름을 그래프로 그리고, 각 작업을 돌리게 된다. (그림에서 노란 동그라미가 하나의 슬롯이라고 생각하면 편하다)
하지만, 이 데이터를 처리하기위한 슬롯의 여유가 충분하지 않아서 데이터를 처리할수 없음을 의미한다. 이걸 해결하는건 taskmanager 를 더 추가로 늘려주면 된다.
원인과 해결
원인은 위에서 설명한것처럼 실행할 여유 슬롯이 부족하기 때문이다.
현재 여유 슬롯의 갯수를 보는 가장 쉬운건 flink dashboard (기본포트는 8081) 에서 확인이 가능하다.
그런데 위와 같이 모두 0인거라면, 모든 taskmanager 가 죽어있는 상태라는걸 의미하고, 이건 장애를 의미하는것이니 jvm heap 을 키워주거나, 물리적인 리소스여유가 없는지 확인이 선행되야 한다.
그게 아니라면 다음과 같이 taskManager 를 추가하거나, taskManager 당 taskSlot 수를 늘려주면 된다.
TaskManager 데몬 추가실행하기
편의상 Flink 설치는 $FLINK_HOME 에 있다고 가정하면, 다음과 같은 명령어를 실행해서 taskManager 만 추가실행 가능하다. 추가후 수십초 뒤에 flink dashboard 를 확인해보면 추가된것 확인가능하다.
cd $FLINK_HOME
./bin/taskmanager.sh start
TaskManager 당 슬롯 갯수 늘리기
TaskManager를 늘리는건 프로세스를 늘리는거라면, slot을 늘려주는건 쓰레드를 늘려주는 개념으로 생각하면 편하다.
나같은 경우는 개발테스트할때 편의상 슬롯설정을 늘리는 형태로 대응하고 있다. flink-conf.yaml 설정에 다음과 같은 설정이 기본으로 1로 되어있을텐데 이 숫자를 높여준다.
taskmanager.numberOfTaskSlots: 6
그러면, 1개의 taskManager 가 기동되어있어도 슬롯이 6개가 된다. 그리고 당연한 소리지만, taskManager를 하나더 기동하면 슬롯은 12개가 된다.
- 슬롯갯수 = TaskManager 갯수 x taskmanager.numberOfTaskSlots
몇 가지 더 알아두기
사실 위와같이 taskManager 를 수동으로 늘려줘야하는 상황은 standalone 형태로 설치했을때에 해당한다.
k8s 나 yarn 기반위에서 flink 를 운영하면 슬롯이 부족하면 알아서 taskManager를 동적으로 추가 혹은 제외 하면서 관리된다.
그렇기 때문에 테스트가 아닌 운영환경에서는 k8s 나 yarn 기반에서 운영하는걸 추천한다.
'데이터처리 > Flink' 카테고리의 다른 글
[Flink] Explode 쿼리 표현하기 - Cross join unnest (0) | 2022.05.31 |
---|---|
Flink Application 개발시 Avro 라이브러리 충돌 문제 해결방법 (0) | 2022.05.27 |
Flink 1.15 버전에서 HA 설정시 오류가 발생하는 경우 - 주키퍼 버전 (0) | 2022.05.22 |
[Flink] streaming-source.enable 기능이 동작 안하는 이유? - 파티션갯수 (0) | 2022.04.21 |
[Flink] Hive Streaming Source 기능 소개 - unbounded scan (0) | 2022.04.19 |