강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

열심히하자님의 프로필 이미지
열심히하자

작성한 질문수

실리콘밸리 엔지니어와 함께하는 Apache Flink

Apache Flink와 Apache Spark의 차이점

State Management & Fault Tolerance 부분 설명이 하나도 이해가 안 돼요

작성

·

14

0

안녕하세요 강사님, 강의 중 이 페이지가 도저히 이해가 안 돼서 추가적으로 (되도록이면 한글로) 풀어서 설명 부탁드려도 될까요?

 

질문드릴 내용과 제가 이해한게 맞는지 확인하는 부분 두 부분으로 나눠서 작성해두었습니다.

 

[질문드릴 내용]

  • First Class Support에 대해서 궁금합니다. 왜 First Class라는 용어를 사용하나요?

  • Periodic checkpointing, Robust의 차이가 궁금합니다. 유추상.. Periodic checkpointing은 주기적으로 체크포인트를 지정해서 체크포인트 기준으로 다시 동작시키기 때문에 중복 처리를 할 수 있는데, Flink는 exactly once를 지원하기 때문에 무조건 한 번만 실행함을 보장하는 건가요?

  • Backpressure는 데이터가 많이 들어와 병목이 생길 때 처리인데, Spark는 지원 범위가 좁고 Flink는 세밀하게 지원 가능한건가요?

추가로 fine-grained 용어가 무슨 뜻인지도 궁금합니다.

 

[제가 이해한게 맞는지 확인 부탁드려요]

  • maintain state across events: flink가 event 기반으로 동작하고, 이벤트간의 상태를 알고 있다는 뜻인가요?

  • Spark이 Standalone하고 윈도우 사이에 연결이 없다: 추측상 데이터를 윈도우 단위로 잘라서 처리하고, 윈도우끼리 상태를 공유하지 않는다는 뜻 맞을까요?

     

 

[설명 스크립트]

Apache Flinke Better Fault Tolerancee-Consistency를 가지고요.

Across Events 간의 maintain 합니다.

예를 들어서 유저 간의 세션 데이터를 다 계속 모아서 사용할 수가 있어요.

그에 반해서 Spark는 심플하고요.

Standalone, 윈도우 간에 연결하는 게 없고요.

Light, Stateful, Workload라고 생각하시면 됩니다.

스파크는 스테이트풀 스트림을 베이직 서포트만 한다 고 하는 거고요.

Flink는 Across 이벤트별로 스테이트를 메인테인하기 때문에 First Class Support로 시작할 때부터 그런 식으로 만들었습니다.

체크포인트 측면에서도 Spark는 Periodically 체크 포인트를 하지만 Flink는 Robust, Exactly Once 체크포인트를 지원해서 아 주 작은,very low한 오버헤드를 가지고 있습니다

Backpressure 같은 경우는 데이터가 엄청나게 많이 들어오잖아요 그럴 경우에 어떻게 핸들할 건가 기본적인 것만 스파크는 서 포트를 하구요 fine-grained 하지않습니다.

그에 반해서 이제 Flink 같은 경우에는 백프레셔 메카니즘이 기본적으로 빌트인되어있기 때문에 Smooth flow control과 stability가 같이 들어 있습니다.

답변 2

1

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 열심히하자님,

질문 좋네요!

First Class Support에 대해서 궁금합니다. 왜 First Class라는 용어를 사용하나요?

First-Class라는 표현은 "언어적, 시스템적 핵심 개념으로서 완전하게 지원된다"는 뜻이에요.

예를 들어, Python에서 함수(Function)가 일급 객체(First-Class Citizen)라고 하죠. 이는 함수 자체를 변수로 넘기거나 리턴할 수 있을 때 쓰는 표현이에요.

같은 맥락으로, Flink는 Stateful Stream ProcessingFirst-Class Support로 제공한다는 말은, 상태(State) 관리가 옵션이 아니라 프레임워크의 기본 철학과 구조에 완전히 녹아 있다는 뜻입니다.

즉, Flink의 런타임, API, 체크포인트, 백프레셔 등 모든 구성요소가 ‘상태 유지’를 전제로 설계되어 있습니다. 반대로 Spark는 Stateless 모델이 기본이고, Stateful은 부가 기능 수준으로만 지원합니다.

Periodic checkpointing, Robust의 차이가 궁금합니다. 유추상.. Periodic checkpointing은 주기적으로 체크포인트를 지정해서 체크포인트 기준으로 다시 동작시키기 때문에 중복 처리를 할 수 있는데, Flink는 exactly once를 지원하기 때문에 무조건 한 번만 실행함을 보장하는 건가요?

Spark와 Flink는 둘 다 상태(state)를 주기적으로 저장하는 체크포인트(Checkpoint) 기능을 가지고 있지만, 이 기능이 어떤 수준으로 데이터를 일관성 있게 복원할 수 있느냐에서 큰 차이가 있습니다.

Spark의 경우에는 Periodic Checkpointing 방식을 사용합니다. 즉, 일정 시간 간격(예: 10초마다, 1분마다)으로 현재의 상태를 저장해두고, 장애가 발생했을 때 그 시점으로 복구하는 방식이에요. 이 접근법은 단순하고 구현이 쉬운 대신, 그 사이에 처리 중이던 일부 데이터는 다시 재실행될 수 있습니다.그래서 결과적으로 at-least-once 수준의 보장만 가능합니다. 즉, 어떤 이벤트가 중복으로 처리될 가능성이 남아있다는 뜻이죠. 반면 Flink는 Robust하고 Exactly-once를 보장하는 Checkpointing을 제공합니다. 여기서 Robust는 시스템 전반이 장애나 네트워크 지연에도 안정적으로 동작하도록 설계되어 있다는 의미이고, Exactly-once는 데이터가 단 한 번만, 정확하게 처리된다는 것을 보장합니다.

즉, 중복도 없고 누락도 없는 완전한 일관성을 유지하는 거죠. 이게 가능한 이유는 Flink가 내부적으로 분산 스냅샷(distributed snapshot) 구조를 사용하기 때문입니다. 각 연산자(operator)의 상태를 이벤트 스트림의 특정 지점과 함께 일관되게 저장하고, 장애가 발생하면 그 시점의 스냅샷에서부터 정확히 이어서 재실행합니다. 이 방식은 Spark보다 훨씬 정교하고 오버헤드가 낮으며, 복구 시 정확성이 뛰어납니다.

 

Backpressure는 데이터가 많이 들어와 병목이 생길 때 처리인데, Spark는 지원 범위가 좁고 Flink는 세밀하게 지원 가능한건가요?

Backpressure는 데이터 유입 속도가 처리 속도를 초과할 때 생기는 병목 현상을 제어하는 메커니즘이에요. Spark는 간단한 큐 기반 버퍼링만 지원 (coarse-grained) 어느 정도 밀리면 전체 스트림 처리 속도가 늦어지는데... 이에 반해 Flink는 연산자(operator) 단위로 fine-grained (세밀한 단위) 조절하여, 각 연산자가 처리 속도에 맞춰 upstream 속도를 조절해서 부드럽고 안정적인 흐름 유지합니다. 즉, fine-grained는 세밀한 단위로 조정 가능하다는 뜻이에요.

짧게 말하자면 ... Spark는 coarse-grained(거친 단위), Flink는 fine-grained(세밀한 단위)라고 생각하면 되겠습니다.

 

한글과 영어를 섞어서 얘기하다보니 장황하네요 ㅎㅎㅎ...

 

마지막으로 ...

maintain state across events: flink가 event 기반으로 동작하고, 이벤트간의 상태를 알고 있다는 뜻인가요?

네, 맞습니다!

Flink는 이벤트 스트림을 처리하면서, 이전 이벤트의 상태를 계속 유지하며 계산을 이어갈 수 있다는 뜻입니다.

 

Spark이 Standalone하고 윈도우 사이에 연결이 없다: 추측상 데이터를 윈도우 단위로 잘라서 처리하고, 윈도우끼리 상태를 공유하지 않는다는 뜻 맞을까요?

역시 잘 이해하셨습니다!!

Spark Structured Streaming은 윈도우 단위로 데이터를 나누고, 그 윈도우 간의 상태(State)를 직접 연결하지 않습니다. 즉, 이전 윈도우에서의 누적 상태를 유지하거나 세션 기반 상태를 관리하려면 개발자가 직접 외부 저장소(State Store, Redis 등)에 저장하고 불러와야 해요. 반면 Flink는 그 상태 관리가 내부에 이미 통합되어 있죠.

 

도움이 되셨으면 좋겠네요! - 참고로 제가 내일부터 3일간 휴가라... 다음 질문을 하실때는 늦게 답변드릴수 있습니다(랩탑을 안가져갈꺼라...)

0

강사님!!! 세세하게 설명해주셔서 감사합니다. 모르는 개념이 많아서 GPT한테 물어보다가 강사님께 남겼는데 덕분에 잘 이해했습니다. 어우~ 속이 풀리네요. First-Class랑 fine-grained 개념이 특히 잘 이해됐어요.

답변을 들으면서 궁금한 점이 상태란게 무엇인가요? 저는 막연하게 이벤트 사이에 연결되는 값이라고 생각했어요. 예를 들어 상태가 있기 때문에 이전 이벤트 처리의 결과물이 이후 이벤트로 넘어갈 수 있다고 이해했어요. (약간 전역변수 같이요) 그런데 답변을 보니 상태란게 작업에 대한 처리 기록 같은데 어떻게 이해하면 좋을까요?

열심히하자님의 프로필 이미지
열심히하자

작성한 질문수

질문하기