Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Foundry 스트리밍의 Flink 실행 구조

Apache Flink는 끝이 정해지지 않은 데이터를 낮은 지연으로 처리하는 분산 연산 엔진입니다. Foundry 스트리밍은 사용자 코드 실행, 온톨로지의 실시간 갱신과 시계열 스트리밍 수집 등에 Flink를 사용합니다. 작업의 구조를 이해하면 처리량이나 상태 크기에 맞는 실행 설정을 판단할 수 있습니다.

연산자, 그래프와 태스크

스트리밍 실행 작업은 데이터 소스를 읽고 여러 연산을 적용한 뒤 출력 대상에 결과를 씁니다. 집계, 조인, 문자열 처리와 산술 같은 각 연산은 연산자(Operator)로 표현합니다. 소스와 출력 대상도 연산자입니다.

Flink에 작업을 제출하면 연산자를 노드로, 연산자 사이의 데이터 전달 관계를 간선으로 하는 방향성 실행 작업 그래프를 만듭니다. 이를 논리 그래프라고도 합니다. Foundry 실행 관리 화면의 작업 Details에서 이 그래프를 확인할 수 있습니다.

실제 실행 시에는 논리 그래프를 물리 그래프로 바꿉니다. 물리 그래프의 기본 작업 단위는 태스크(Task)입니다. 하나의 태스크가 연산자 인스턴스 하나를 실행할 수도 있고, 여러 연산자를 연결하여 실행할 수도 있습니다.

Job Manager

Job Manager는 태스크 스케줄링과 자원 할당, 완료 및 실패 처리, 체크포인트 조정과 장애 복구를 담당합니다. 프로그램에서 작업 정보에 접근할 수 있는 인터페이스도 제공합니다. Spark의 드라이버와 대체로 비슷한 역할입니다.

보통 활성 리더인 Job Manager가 하나 있고, 복구할 수 없는 오류에 대비한 대기 인스턴스가 준비되어 있습니다.

Task Manager

Task Manager는 태스크를 실행하고 스트림 사이에서 데이터를 버퍼링하거나 교환합니다. 최소 하나가 있으며 병렬 처리를 위해 여러 개를 사용할 수 있습니다. Spark의 실행기와 대체로 비슷한 역할입니다.

레코드 크기가 매우 크면 Task Manager에 추가 자원이 필요할 수 있습니다. 처리량이 매우 높으면 병렬성을 높여 Task Manager 수를 늘리는 구성을 검토합니다.

상태를 유지하는 연산

문자열 하나를 변환하는 연산은 개별 이벤트만 보면 되지만, 집계나 조인은 이전 이벤트의 정보를 기억해야 합니다. 최근 5분의 이벤트 수를 세거나 전체 이벤트의 누적 평균을 계산하는 작업, 과거에 받은 이벤트와 새 이벤트를 조인하는 작업이 이에 해당합니다.

이 정보가 실행 작업 상태(Job state)입니다. Flink는 상태 백엔드에 상태를 저장하며, Task Manager가 상태를 관리하고 Job Manager가 체크포인트를 조정합니다. 체크포인트는 장애 후 복구할 상태와 처리 위치를 제공합니다.

집계나 조인의 시간 범위가 커지면 보관해야 하는 상태도 커질 수 있습니다. 이런 경우 Task Manager뿐 아니라 체크포인트를 조정하는 Job Manager에도 추가 자원이 필요할 수 있습니다.