Programing/Akka

Akka Stream 기본 개념 Source, Sink, Flow

BUST 2018. 6. 29. 13:39

Akka Stream 기본 개념 Source, Sink, Flow

Source

- 하나의 아웃풋(output), 데이터를 발생시켜 다운스트림으로 흐리게 한다
- 데이터가 발생되는 점이라고 생각하면 된다.
- 예를 들어 Kafka 등 MQ에서 데이터를 받을수 있다.
- 파일, List, Queue 등을 원천으로 할수 있다.

Sink

- 하나의 인풋(input)
- 데이터가 끝나는 지점, 데이터를 처리하는 지점
- 데이터의 결과값을 CompletionStage객체로 받을수가 있다.
- 예를 데이터를 들어오는 MySQL에 저장을 한다.

Flow

- 하나의 인풋(input)과 하나의 아웃풋(output)
- 데이터의 Transform(변경)이 된다.
- 예를 데이터를 다른 형태의 데이터를 컨버팅을 한다.


RunnableGraph

- Source, Sink가 연결이되어 있는, run() 할수 있는 상태
- RunnableGraph의 상태에서는 실제 구체화(Materialize) 되기전에는 데이터가 흐리지 않는다.

Backpressure

- 뒤로 압박한다. 즉 Sink의 처리에 따라 Source의 속도를 조절한다.
- Reactive Stream Specfication에 Protocol이 구현이 되어있다.
- Akka Stream에는 자동으로 적용이 되어있다.

Slow Publisher(Source), fast Subscriber(Sink)

- Happy Case 

Fast Publisher(Source), slow Subscriber(Sink)

- 이 경우 BackPressure기능이 필요하다. 
아래의 같은 방법중 하나로  Backpressure를 적용한다.
- 들어온 데이터가 처리될때까지 데이터를 받지 않는다.
- 들어온 데이터를 buffer에 보관한다. (bounded)
- 들어오는 데이터를 버린다.
- 스트림을 강제로 종료시킨다. 


'Programing > Akka' 카테고리의 다른 글

Akka Http  (0) 2018.07.28
Akka Stream Operator Fusion  (0) 2018.06.29
Akka Stream Graph DSL를 이용한 Broadcast/Merge 기능 구현  (0) 2018.06.02
Akka Stream을 이용한 Kafka Producer 개발  (0) 2018.06.02
Persistence Actor  (0) 2018.05.27