cluster
JobManager:
역할: Flink 클러스터의 마스터 노드 역할을 합니다.
책임:
사용자의 프로그램을 시작하고, 중지하며, 장애 복구를 관리합니다.
프로그램이 Flink 클러스터에서 실행되기 위한 작업 분해 및 스케줄링을 담당합니다.
모든 TaskManager들과 통신하며, 각 TaskManager의 상태와 작업 진행 상황을 모니터링합니다.
Checkpointing 및 Savepoint를 관리하여 상태 지속성을 보장합니다.
TaskManager:
역할: Flink 클러스터의 워커 노드 역할을 합니다.
책임:
실제로 데이터 스트림 처리 작업(예: 맵핑, 리듀싱, 필터링 등)을 수행하는 곳입니다.
각 TaskManager는 여러 스레드에서 동시에 여러 태스크를 실행할 수 있습니다.
데이터 처리와 상태 관리를 위한 로컬 저장소를 제공합니다.
작업이 완료되면 결과를 JobManager에 보고합니다.
ValueState
key(flink 스트림 데이터에서 개발자가 지정한 특정컬럼을 의미)별로 한번씩 초기화 되며, key-value쌍을 저장하는데 사용된다.
일반 map 자료구조형을 쓰는것 대비해서 스레드 안정성 및 일관성 내결함성 Atomic등을 보장
Boolean으로 하더라도 null, true, false의 tri-state를 가지므로 코딩시 주의해야한다.
(아래 코드에서는 그래서 true, null 만사용하고 false란 값은 일부러 사용하지 않았음에 주의. clear()하면 null된다. )
//멤버변수선언은 아래처럼
private transient ValueState<Boolean> flagState;
---
//아래는key별로 한번씩만 초기화(AbstractRichFunction의 open()을 override해서 사용)
ValueStateDescriptor<Boolean> flagDescriptor = new ValueStateDescriptor<>(
"flag",
Types.BOOLEAN);
flagState = getRuntimeContext().getState(flagDescriptor);
---
//아래는 processsElement() 안에서 사용
Boolean bFlag = flagState.value(); // 주의할점은 bFlag를 직접변경해봤자 아래 update()하기전에는 반영안된다는것. 따라서 모든 변경은 update()를 호출하는 방식으로 코딩해야한다.
flagState.update(true);
flagState.clear();
자세한 사용법은 여기참조
반응형
'Data Engineering' 카테고리의 다른 글
flink window (0) | 2023.10.29 |
---|---|
flink Table API를 사용한 실시간 Reporting샘플 (0) | 2023.10.28 |
Spark, Flink를 사용한 실시간 스트림 분석 (0) | 2023.08.02 |
Apache Flink 설치 (0) | 2023.08.02 |
kafka Consume (0) | 2023.08.02 |