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 |