Programing/Akka 29

Akka Stream Operator Fusion

Akka Stream Operator Fusion- 기본 설정으로 Akka Stream은 stream operator (source, sink)를 하나로 합치는데(fused), 이는 하나의 actor에서 stream graph를 실행되는 것을 의미한다.- 하나의 Operator에서 다른 Operator로 데이터를 전달하는 것은 fused stage간의 전달보다는 더 빠르다 (비동기 메시지 overhead때문에)- fused stream operator는 동시에 실행되지 않는다. 이말은 CPU Core는 하나의 fused part만 실행을 시킨다.- 병렬 프로세싱 (Parallel Proccess)를 하기위해서는 Asynchronous Boundaries를 직접 손으로 넣어줘야한다.Source.range(..

Programing/Akka 2018.06.29

Akka Stream 기본 개념 Source, Sink, Flow

Akka Stream 기본 개념 Source, Sink, FlowSource- 하나의 아웃풋(output), 데이터를 발생시켜 다운스트림으로 흐리게 한다- 데이터가 발생되는 점이라고 생각하면 된다.- 예를 들어 Kafka 등 MQ에서 데이터를 받을수 있다.- 파일, List, Queue 등을 원천으로 할수 있다.Sink- 하나의 인풋(input)- 데이터가 끝나는 지점, 데이터를 처리하는 지점- 데이터의 결과값을 CompletionStage객체로 받을수가 있다.- 예를 데이터를 들어오는 MySQL에 저장을 한다. Flow- 하나의 인풋(input)과 하나의 아웃풋(output)- 데이터의 Transform(변경)이 된다.- 예를 데이터를 다른 형태의 데이터를 컨버팅을 한다. RunnableGraph- S..

Programing/Akka 2018.06.29

Akka Stream Graph DSL를 이용한 Broadcast/Merge 기능 구현

Akka Stream Graph DSL를 이용한 Broadcast/Merge 기능 구현- Data stream 기능을 개발을 하다보면 같은 데이터를 Broadcast로 보내고 분석해야 되는 경우가 있다.- 또 다른 경우에는 데이터를 하나로 합치는 Merge 기능이 필요할때도 있다.- Akka Stream에서는 GraphDSL를 이용하여 Broadcast/Merge 기능을 제공한다. gradledependencies { compile group: 'com.typesafe.akka', name: 'akka-stream_2.12', version: '2.5.13'}Reference- https://doc.akka.io/docs/akka/2.5/stream/stream-graphs.html Example fin..

Programing/Akka 2018.06.02

Akka Stream을 이용한 Kafka Producer 개발

Akka Stream을 이용한 Kafka Producer 개발 Referencehttps://doc.akka.io/docs/akka-stream-kafka/current/producer.html - Kafka Library에서 KafkaProducer를 이용한다. Settingsprotected final ProducerSettings producerSettings = ProducerSettings .create(system, new ByteArraySerializer(), new StringSerializer()) .withBootstrapServers("localhost:9092"); 필요한 정보- Kafka BootstrapServer- Key/Value Serializer Configuration..

Programing/Akka 2018.06.02

Persistence Actor

Persistence Actor- Actor를 이용하여 비즈니스 로직을 구현을 할때, Actor가 상태를 필요한 경우가 있을수 있다. 이런 경우에는 Akka의 Persistence 기능을 이용하여 구현을 할수가 있다.- 상태를 저장하는 방식을 2가지 방식이 있다. (Event Sourcing) - 상태의 데이터를 그대로 저장하는 방식. - 상태의 데이터를 변환하는 과정을 저장을 하는 방식 (Append)- Event Sourcing 관련 내용 : https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj591559(v=pandp.10)Gradledependencies { compile group: 'com.typesafe.akka', name: 'akk..

Programing/Akka 2018.05.27

Akka Cluster

Akka Cluster시작하기전에 Gradle 라이브러리 추가compile group: 'com.typesafe.akka', name: 'akka-cluster_2.12', version: '2.5.6'Simple Configurationapplication.confakka { actor { # cluster mode로 실행을 의미 provider = "cluster" } # 원격 접근을 위한 설정 remote { log-remote-lifecycle-events = off netty.tcp { # local로 실행할때에는 127.0.0.1이지만 실제 배포시에는 hostname을 변경해줘야된다. hostname = "127.0.0.1" # 0 - Random Port port = 0 } } # 클러스터 ..

Programing/Akka 2017.10.22

Akka Tutorial

Akka TutorialReferencehttp://developer.lightbend.com/guides/akka-quickstart-java/?_ga=2.240985411.172449809.1498889504-939982481.1485157124Actor Model의 좋은 점이벤트 기반의 모델Actor는 메시지를 통해 작업Actor 사이간의 통신은 비동기, blocking 없이, 응답을 기다리지 않고 다른 작업을 할수가 있다.강한 격리 원칙일반적인 자바 객체와 달리 Actor는 자신이 가지고 있는 상태에 대한 API 존재하지 않는다. 대신에 메세지를 통해 공유가 가능하다.이는 다른 액터간의 상태(State)를 공유하는 것을 막는다.오로지 메세지를 보내는 것을 통해 다른 액테의 상태를 볼수가 있다.가벼..

Programing/Akka 2017.07.01

Akka Actor

Akka ActorAkka는 오픈 소스 툴킷으로, JVM 상의 동시성과 분산 애플리케이션을 단순화하는 런타임이다. Akka는 동시성을 위한 여러 프로그래밍 모델을 지원하지만, Erlang으로부터 영향을 받아 actor 기반의 동시성이 두드러진다.자바와 스칼라 언어 모두로 작성이 가능하다. Akka는 스칼라 2.10로 작성되었으며, 스칼라 2.10의 Akka의 actor 구현은 스칼라 표준 라이브러리에 포함되어있다.출처 : 위키백과Akka Actor ModelAkka actor를 기반으로하는 애플리케이션의 구별되는 특징은 다음과 같다:동시성은 메시지 기반 이며 비동기 방식 으로 이루어진다: 일반적으로 변형 가능한 데이터를 공유하거나 동기화되는 primitive를 사용해서는 안됩니다: Akka는 액터 모델을..

Programing/Akka 2017.06.25

Akka Actor Throttle

Akka Actor ThrottleAkka가 2.5 버전이 되면서 TimerBasedThrottler은 더 이상 사용되지 않고, Stream의 Throttle를 기능을 이용하여 구현을 할수 있다.Source Codeimport java.util.concurrent.TimeUnit;import scala.concurrent.duration.FiniteDuration;import akka.NotUsed;import akka.actor.ActorRef;import akka.actor.ActorSystem;import akka.stream.ActorMaterializer;import akka.stream.Materializer;import akka.stream.OverflowStrategy;import akka..

Programing/Akka 2017.06.24