본문 바로가기

Data/Data Engineering

[Flink] Flink 정보 정리

반응형

다람쥐 념념

본 포스팅은 패스트 캠퍼스의 "실시간 빅데이터 처리를 위한 Spark & Flink Online" 참고하여 제작했습니다! 전반적인 정의에 대해서만 정리하고 프로그래밍 관련은 강의를 보시는걸 추천드립니다!

기본 정보

  • 오픈소스 스트림 프로세싱(Stream Processing) 프레임워크
  • 분산처리 / 고성능 / 고가용성
  • 배치 프로세싱 또한 지원
  • Spark 보다 빠른 속도 (오...?)
  • Fault-tolerance - 시스템 장애시 장애 직적으로 돌아가서 다시 시작가능
  • Rescalability - 실행도중 리소스 추가 가능

Stream Processing

Batch Processing과 다르게 비교적 가벼운 데이터(ex. 주식 거래소, 웹 서버, 센서 데이터, 비정상 거래 탐지...)를 처리하는데 사용함.

이외로 Batch Processing은

  • "한정된 데이터를 다루거나"
  • "모든 데이터셋을 읽은 후 처리할수있으며"
  • "주기적으로 실행되는 작업"
  • "처리속도보다는 처리량에 포커스"

반대로 Stream Processing은

  • 데이터가 무한이라고 가정
  • 데이터가 도착할때마다 처리
  • 실시간으로 실행되는 작업
  • 처리량보다는 처리속도에 포커스

Flink의 기본적인 처리 구조는 다음과같다

  • Source - 한개 혹은 여러개의 데이터 소스가 있음
  • Operators - 데이터를 변환 (Transformation, MapReduce같은 부분인듯)
  • Sink - 데이터플로우의 마지막부분(데이터를 출력, 저장)

Flink또한 Spark와 동일하게 Lazy Evaluation특성을 갖고있음

Hadoop vs Spark vs Flink

Hadoop

  • Batch Processing
  • Disk에서 데이터를 읽고 처리
  • 데이터 처리 방법을 손수 코딩
  • 낮은 단계의 추상화

Spark

  • Batch Processing (Batch based Streaming)
  • In-Memory 데이터 처리
  • 높은 단계의 추상화
  • 쉬운 프로그래밍(RDD)
  • Spark - MLlib (머신러닝 라이브러리)
  • Scala로 개발됨
  • 효율적인 메모리 관리가 어려움 (Out of Memory 자주 발생)
  • 의존성 관리로 DAG 사용

Flink

  • Stream Processing
  • In-Memory 데이터 처리
  • 데이터 처리방식은 Spark와 굉장히 비슷함
  • 높은 단계의 추상화
  • 쉬운 프로그래밍(Dataflows)
  • Flink - FlinkML (머신러닝 라이브러리)
  • Java로 개발
  • 내장 메모리 매니저 (Out of Memory 에러가 Spark에 비해 적게 발생)
  • Controlled cyclic dependency graph (ML같이 반복적인 작업에 최적화)

Flink

다음과 같은 스펙을 갖고있음

Flink는 3가지 요소로 구성되어있음

  • Storage
    • Flink는 각종 저장 시스템들과 연동이 가능함(ex. HDFS, Local File System, Mongo DB, RDBMS, S3 ...)
  • Deployment/Environment
    • 리소스 관리도 저장 시스템과 같이 여러 시스템과 연동이 가능(ex. YARN, Mesos, AWS, GCP ...)
  • Engine
    • JAVA로 만들어졌기 때문에 JVM위에서 돌아감 

 

반응형