Apache Flink란?
- 분산 처리를 위한 오픈 소스 데이터 스트림 및 배치 처리 프레임워크
- 모든 일반 클러스터 환경에서 실행되고 인메모리 속도와 모든 스케일에서 계산을 수행할 수 있도록 설계됨
Architecture
- 데이터 처리
- 데이터는 이벤트의 스트림으로 처리
- 제한되지 않은 스트림
- 시작점은 있으나 종료시점은 존재하지 않음
- 스트림은 종료되지 않고 데이터가 생성될 때마다 데이터를 제공
- 입력이 무제한이기 때문에 어느 시점에서도 입력이 완전하지 않아 종료되지 않은 데이터를 특정 순서로 처리해야 함
- 이벤트가 발생한 순서대로 이벤트를 수집해야 결과의 완전성을 처리할 수 있
- 제한된 스트림
- 시작점과 종료시점이 정해져 있음
- 모든 계산을 수행하기 전에 모든 데이터를 수집함으로써 처리
- 정렬된 입력이 필요하지 않음 -> 언제든 정렬 가능
- 배치 처리(일괄 처리)
- 애플리케이션 배포
- 응용 프로그램을 실행하기 위해 계산 리소스가 필요 -> Hadoop YARN, Apache Mesos, 쿠버네티스와 같은 클러스터 리소스 관리자와 통합되어 있고, 독립적인 클러스터로도 실행 가능
- 리소스 관리자별 배포 모드를 통해 리로스 관리자와 상호작용할 수 있도록 구현되었음
- 응용 프로그램 배포 시, 필요한 리소스를 자동으로 식별하고 리소스 관리자에게 요청
- 장애 발생 시, 실패한 컨테이너를 새로운 리소스를 요청하여 대체
- 응용 프로그램을 제출하거나 제어하기 위한 모든 통신은 REST 호출을 통해 이루어짐
- 애플리케이션 실행
- 어떤 스케일에서도 안정적인 애플리케이션 실행 환경을 위해 설계되었음
- 응용 프로그램은 수천 개의 작업으로 병렬화되며, 클러스터에서 분산되고 동시에 실행됨
- 프로그램은 거의 무제한의 CPU, 주 메모리, 디스크 및 네트워크 IO를 활용할 수 있음
- 처리 지연에 미치는 영향을 최소화하고 응용 프로그램 상태 일관성을 보장
- 인메모리 퍼포먼스
- 로컬 상태 액세스를 위해 최적화된 상태 유지형 응용 프로그램
- 작업 상태는 항상 메모리에 유지되고, 메모리를 초과하는 경우 디스크 기반 데이터 구조에 유지
- 스토리지로 로컬 상태를 주기적으로 비동기적으로 체크하여 일관성을 보장
Applications
- 스트리밍 어플리케이션을 위한 빌딩 블록
- 스트림 처리 어플리케이션을 위한 구성 요소
- 모든 종류의 스트림을 처리할 수 있는 프로세싱 프레임워크
- Stream
- 제한되거나 제한되지 않은 스트림 처리
- 실시간 및 기록 스트림 처리
- State
- 중요하지 않은 모든 스트리밍 어플리케이션은 상태를 저장(개별 이벤트에 변환 적용하는 어플리케이션만 State가 필요하지 않음)
- 모든 응용 프로그램은 이벤트 또는 중간 결과를 기억하여 이후 시점에 액세스해야 함(다음 이벤트를 수신하거나 특정 시간 간격 후에 액세스할 때 사용)
- 다중 상태 프리미티브
- 원자 값, 목록 또는 맵과 같은 다양한 데이터 구조에 대한 State 프리미티브를 제공
- 플러그형 State 백엔드
- 메모리 또는 RocksDB에 상태를 저장하는 다양한 State 백엔드 제공
- 사용자 정의 State 백엔드를 연결할 수 있음
- 한 번의 상태 일관성
- 체크포인트 및 복구 알고리즘은 장애 발생 시 응용 프로그램 State의 일관성을 보장
- Large State
- 비동기적이고 점진적인 체크포인트 알고리즘 덕에 수 TB의 응용 프로그램 State를 유지
- 확장 가능한 응용 프로그램
- State가 있는 응용 프로그램 확장을 지원 -> State를 다른 워커에 재분배
- Time
- 이벤트 타임 모드
- 이벤트의 타임 스탬프를 기반으로 결과를 계산
- 기록된 이벤트나 실시간 이벤트에 관계없이 정확하고 일관된 결과를 얻을 수 있음
- 워터마크 지원
- 이벤트 시간 애플리케이션에서 시간을 추론하기 위해 사용
- 지연 데이터 처리
- 지연 이벤트 (워터마크와 함께 이벤트 시간 모드에서 스트림을 처리할 때 모든 관련 이벤트가 도착하기 전에 계산이 완료될 수 있는 것)를 처리하기 위해 여러 옵션 제공
- 처리 시간 모드
- 처리 기계의 시간에 따라 계산을 수행
- 저지연 요구 사항을 갖는 응용 프로그램에 적합
- 이벤트 타임 모드
- API 레이어
- ProcessFunction
- 많은 State 저장 이벤트 기반 어플리케이션에 필요
- DataStream API
- Java, Scala에서 사용
- map(), reduce() 등 함수 기반
- aggregate() 함수는 인터페이스를 확장하거나 자바, 스칼라 람다 함수로 정의할 수 있음
- 기록 변환 및 외부 데이터 저장소를 쿼리로 이벤트 강화와 같은 많은 스트림 처리 작업에 대한 기본 요소를 제공
- SQL/Table API
- 관계형 API
- 배치 및 스트림 처리를 위한 통합 API
- 실시간 스트림, 기록 스트림에서 동일한 쿼리로 실행되어 동일한 결과를 생성
- DataStream 및 DataSet API와 통합이 되며, 사용자 정의 스칼라, 집계 및 테이블 값 함수를 지
3. 라이브러리
- 일반적으로 API에 포함되며 완전 독립되지 않음
- 복합 이벤트 처리(CEP)
- 이벤트 패턴을 지정하는 API 제공
- DataSet API
- 배치 처리 애플리케이션을 위한 API
- 프리미티브에는 map , reduce , (외부) join , co-group 및 iterate 가 포함
- Flink 1.12부터 더 이상 사용되지 않음
- Gelly
- 확장 가능한 그래프 처리 및 분석을 위한 라이브러리
- DataSet API 위에 구현되고 통합
Operations
- 논스탑 어플리케이션 실행
- 일관된 체크 포인트
- 정확히 한 번만 상태 일관성을 보장할 수 있음
- 효율적인 체크포인트
- 어플리케이션의 대기 시간에 대한 체크포인트의 영향을 매우 작게 유지 -> 비동기 및 증가하는 체크포인트 수행
- End-to-End Exactly-Once
- 장애가 발생한 경우, 데이터가 정확히 한 번만 작성되도록 보장하는 특정 스토리지 시스템용 트랜잭션 싱크를 제공
- Cluster 관리자와 통합
- Hadoop YARN or 쿠버네티스와 같은 클러스터 관리자와 통합
- 프로세스가 실패하면 작업을 인계하기 위해 새 프로세스가 자동으로 시작
- 고가용성 설정
- 모든 단일 장애 지점을 제거하는 고가용성 모드를 제공
- 분산 조정을 위해 Apache Zookeper를 기반으로 함
- 일관된 체크 포인트
- Update, Mirgrate, Suspend, Resume
- 세이브포인트
- 어플리케이션 상태의 일관된 스냅샷 -> 수동으로 트리거해야 함(중지 시 자동제거도 안됨)
- 클러스터 마이그레이션
- Flink 버전 업데이트
- A/B 테스트 및 What-if 시나리오
- 일시 중지 및 다시 시작
- 보관
- 세이브포인트
- 모니터링 및 컨트롤
- 웹 UI
- 로깅: slf4j 구현하고 log4j 또는 logback과 통합
- 시스템 및 사용자 정의 지표 수집 및 보고
- REST API: 실행 중인 어플리케이션의 세이브포인트를 가져오거나, 어플리케이션을 취소
- 새 어플리케이션을 제출
- 실행 중인 어플리케이션의 세이브 포인트 불러오기
- 어플리케이션을 취소
- 실행 중이거나 완료된 어플리케이션의 메타데이터 및 수집된 메트릭을 노출
하,,, 뭔소린지 몰라서 정리해놓고 걍 외울라함
'⭐ Plogramming > BigData' 카테고리의 다른 글
Apache Flink DataStream API를 사용한 사기 탐지 (0) | 2023.07.17 |
---|---|
분산 클러스터를 위한 하둡 시스템 (0) | 2023.07.16 |
TimeWindow란 (1) | 2023.07.13 |
Chpater 3. 하둡 클러스터 생성 및 환경 설정 (0) | 2023.07.08 |
Chapter 2. 하둡 아키텍쳐 (0) | 2023.07.02 |