⭐ Plogramming/BigData

Apache Flink란?

김진한

Apache Flink란?

  • 분산 처리를 위한 오픈 소스 데이터 스트림 및 배치 처리 프레임워크
  • 모든 일반 클러스터 환경에서 실행되고 인메모리 속도와 모든 스케일에서 계산을 수행할 수 있도록 설계됨

Architecture

  1. 데이터 처리
    • 데이터는 이벤트의 스트림으로 처리
    • 제한되지 않은 스트림
      • 시작점은 있으나 종료시점은 존재하지 않음
      • 스트림은 종료되지 않고 데이터가 생성될 때마다 데이터를 제공
      • 입력이 무제한이기 때문에 어느 시점에서도 입력이 완전하지 않아 종료되지 않은 데이터를 특정 순서로 처리해야 함
      • 이벤트가 발생한 순서대로 이벤트를 수집해야 결과의 완전성을 처리할 수 있
    • 제한된 스트림
      • 시작점과 종료시점이 정해져 있음
      • 모든 계산을 수행하기 전에 모든 데이터를 수집함으로써 처리
      • 정렬된 입력이 필요하지 않음 -> 언제든 정렬 가능
      • 배치 처리(일괄 처리)
  2. 애플리케이션 배포
    • 응용 프로그램을 실행하기 위해 계산 리소스가 필요 -> Hadoop YARN, Apache Mesos, 쿠버네티스와 같은 클러스터 리소스 관리자와 통합되어 있고, 독립적인 클러스터로도 실행 가능
    • 리소스 관리자별 배포 모드를 통해 리로스 관리자와 상호작용할 수 있도록 구현되었음
    • 응용 프로그램 배포 시, 필요한 리소스를 자동으로 식별하고 리소스 관리자에게 요청
    • 장애 발생 시, 실패한 컨테이너를 새로운 리소스를 요청하여 대체
    • 응용 프로그램을 제출하거나 제어하기 위한 모든 통신은 REST 호출을 통해 이루어짐
  3. 애플리케이션 실행
    • 어떤 스케일에서도 안정적인 애플리케이션 실행 환경을 위해 설계되었음
    • 응용 프로그램은 수천 개의 작업으로 병렬화되며, 클러스터에서 분산되고 동시에 실행됨
    • 프로그램은 거의 무제한의 CPU, 주 메모리, 디스크 및 네트워크 IO를 활용할 수 있음
    • 처리 지연에 미치는 영향을 최소화하고 응용 프로그램 상태 일관성을 보장
  4. 인메모리 퍼포먼스
    • 로컬 상태 액세스를 위해 최적화된 상태 유지형 응용 프로그램
    • 작업 상태는 항상 메모리에 유지되고, 메모리를 초과하는 경우 디스크 기반 데이터 구조에 유지
    • 스토리지로 로컬 상태를 주기적으로 비동기적으로 체크하여 일관성을 보장

Applications

  1. 스트리밍 어플리케이션을 위한 빌딩 블록
    • 스트림 처리 어플리케이션을 위한 구성 요소
    • 모든 종류의 스트림을 처리할 수 있는 프로세싱 프레임워크
    • Stream
      • 제한되거나 제한되지 않은 스트림 처리
      • 실시간 및 기록 스트림 처리
    • State
      • 중요하지 않은 모든 스트리밍 어플리케이션은 상태를 저장(개별 이벤트에 변환 적용하는 어플리케이션만 State가 필요하지 않음)
      • 모든 응용 프로그램은 이벤트 또는 중간 결과를 기억하여 이후 시점에 액세스해야 함(다음 이벤트를 수신하거나 특정 시간 간격 후에 액세스할 때 사용)
      • 다중 상태 프리미티브
        • 원자 값, 목록 또는 맵과 같은 다양한 데이터 구조에 대한 State 프리미티브를 제공
      • 플러그형 State 백엔드
        • 메모리 또는 RocksDB에 상태를 저장하는 다양한 State 백엔드 제공
        • 사용자 정의 State 백엔드를 연결할 수 있음
      • 한 번의 상태 일관성
        • 체크포인트 및 복구 알고리즘은 장애 발생 시 응용 프로그램 State의 일관성을 보장
      • Large State
        • 비동기적이고 점진적인 체크포인트 알고리즘 덕에 수 TB의 응용 프로그램 State를 유지
      • 확장 가능한 응용 프로그램
        • State가 있는 응용 프로그램 확장을 지원 -> State를 다른 워커에 재분배
    • Time
      • 이벤트 타임 모드
        • 이벤트의 타임 스탬프를 기반으로 결과를 계산
        • 기록된 이벤트나 실시간 이벤트에 관계없이 정확하고 일관된 결과를 얻을 수 있음
      • 워터마크 지원
        • 이벤트 시간 애플리케이션에서 시간을 추론하기 위해 사용
      • 지연 데이터 처리
        • 지연 이벤트 (워터마크와 함께 이벤트 시간 모드에서 스트림을 처리할 때 모든 관련 이벤트가 도착하기 전에 계산이 완료될 수 있는 것)를 처리하기 위해 여러 옵션 제공
      • 처리 시간 모드
        • 처리 기계의 시간에 따라 계산을 수행
        • 저지연 요구 사항을 갖는 응용 프로그램에 적합
  2. 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

  1. 논스탑 어플리케이션 실행
    • 일관된 체크 포인트
      • 정확히 한 번만 상태 일관성을 보장할 수 있음
    • 효율적인 체크포인트
      • 어플리케이션의 대기 시간에 대한 체크포인트의 영향을 매우 작게 유지 -> 비동기 및 증가하는 체크포인트 수행
    • End-to-End Exactly-Once
      • 장애가 발생한 경우, 데이터가 정확히 한 번만 작성되도록 보장하는 특정 스토리지 시스템용 트랜잭션 싱크를 제공
    • Cluster 관리자와 통합
      • Hadoop YARN or 쿠버네티스와 같은 클러스터 관리자와 통합
      • 프로세스가 실패하면 작업을 인계하기 위해 새 프로세스가 자동으로 시작
    • 고가용성 설정
      • 모든 단일 장애 지점을 제거하는 고가용성 모드를 제공
      • 분산 조정을 위해 Apache Zookeper를 기반으로 함
  2. Update, Mirgrate, Suspend, Resume
    • 세이브포인트
      • 어플리케이션 상태의 일관된 스냅샷 -> 수동으로 트리거해야 함(중지 시 자동제거도 안됨)
      • 클러스터 마이그레이션
      • Flink 버전 업데이트
      • A/B 테스트 및 What-if 시나리오
      • 일시 중지 및 다시 시작
      • 보관
  3. 모니터링 및 컨트롤
    • 웹 UI
    • 로깅: slf4j 구현하고 log4j 또는 logback과 통합
    • 시스템 및 사용자 정의 지표 수집 및 보고
    • REST API: 실행 중인 어플리케이션의 세이브포인트를 가져오거나, 어플리케이션을 취소
      • 새 어플리케이션을 제출
      • 실행 중인 어플리케이션의 세이브 포인트 불러오기
      • 어플리케이션을 취소
      • 실행 중이거나 완료된 어플리케이션의 메타데이터 및 수집된 메트릭을 노출

 

하,,, 뭔소린지 몰라서 정리해놓고 걍 외울라함

 

참조: https://flink.apache.org/