A dive into akka streams: from the basics to a real-world scenario

Gioia Ballin
Gioia BallinLead Data Engineer at Measurence
A dive into Akka Streams
From the basics to a real-world scenario
Gioia Ballin, Simone Fabiano - SW developers
Who are these guys?
Gioia Ballin
Twitter / @GioiaBallin
Simone Fabiano
Twitter / @mone_tpatpc
R&D Data Analysis Microservices Infrastructure WebBlog
Agenda
The Problem
Akka Streams Basics
The Collector Service
Recap and Learnings
Data processing pipeline
COLLECTOR SVC AMAZON KINESIS
WI-FI/3GSENSORS
The Collector Service: two months ago...
AMAZON
KINESIS
INBOX
ACTOR
TCP
Kinesis Client
INBOX
ACTOR Kinesis Client
INBOX
ACTOR Kinesis Client
TCP
TCP
chunks
chunks
chunks
events
events
events
put
put
put
A dive into akka streams: from the basics to a real-world scenario
Data may be lost
COLLECTOR SVC AMAZON KINESIS
WI-FI/3GSENSORS
CONNECTION
ISSUES
MESSAGE
OVERLOAD
Not REALLY reactive: why?
Lack of...
RECOVERY MECHANISMS
BACKPRESSURE
Recovery mechanisms
Upload failure? Retry
Kinesis unavailable? Buffer
Ingestion speed under control
Take advantage of sensors buffer
Sensors switch from busier to less busy services
Welcome Akka Streams!
Backpressure on the network
+
Easy fit for stream paradigm
Typed flow & Increased Readability
Akka Streams Basics - 3 2 1 Go!
SOURCE FLOW SINK
val source = Source(1 to 42)
val flow = Flow[Int].map(_ + 1)
val sink = Sink.foreach(println)
val graph = source.via(flow).to(sink)
graph.run()
Flows are collections (almost)
OK map, filter, fold, …
No flatMap! (there’s mapConcat though)
Extras mapAsync, mapAsyncUnordered, buffer..
How backpressure works
Source Flow Sink
pull
pull
push
push
Collector with Akka Streams
path("data") {
post {
extractRequest { request =>
val source = request.entity.dataBytes
val flow = processing()
val sink = Sink.ignore
source.via(flow).runWith(sink)
… } }
Flow[ByteString]
.via(chunkBuffer)
Transformation tools: Framing.delimiter
val chunkBuffer = Framing.delimiter(
ByteString("n"),
maxPresenceEventBytes,
false
)
.map(_.dropRight(1))
.map(_.utf8String)
Flow[ByteString]
.via(chunkBuffer)
.via(presenceEventFactory.asStream)
Flow[ByteString]
.via(chunkBuffer)
.via(presenceEventFactory.asStream)
.via(persistentBuffer)
class PersistentBuffer[A] (...)
extends GraphStage[FlowShape[A, A]] {
val in =
Inlet[A]("PersistentBuffer.in")
val out =
Outlet[A]("PersistentBuffer.out")
override val shape = FlowShape.of(in,out)
When the available stages are not enough, write your own
Custom stages: State
override def createLogic(
attr: Attributes
): GraphStageLogic =
new GraphStageLogic(shape) {
var state: StageState[A] = initialState[A]
val cb = getAsyncCallback[Try[A]] {
case Success(elements:A) =>
state = state.copy(...)
	 ...
}
queue.getCurrentQueue
.onComplete(cb.invoke)
Custom Stages: ports
setHandler(in, new InHandler {
override def onPush() = {
val element = grab(in)
pull(in)
...
}
...
})
setHandler(out, new OutHandler {
override def onPull(): Unit = {
push(out, something)
}
...
})
Custom Stages: Start and stop
override def postStop(): Unit = {
...
}
override def preStart(): Unit = {
...
}
Flow[ByteString]
.via(chunkBuffer)
.via(presenceEventFactory.asStream)
.via(persistentBuffer)
.via(kinesisPublisher)
Delegating work to actors
Flow[KinesisEvent]
.mapAsync(1) { event =>
(publisher ? Publish(event))
.mapTo[PublishCompleted]
}
Flow[KinesisEvent]
.mapAsync(1) { event =>
(publisher ? Publish(event))
.mapTo[Future[PublishCompleted]]
.flatten
}
Flow[ByteString]
.via(chunkBuffer)
.via(presenceEventFactory.asStream)
.via(persistentBuffer)
.via(kinesisPublisher)
.alsoTo(countEvents)
Extra side-effects
val countEvents = Sink.foreach[Event] { _ =>
metricEventsPerTimeUnitOfSensor.mark()
metricEventsPerTimeUnit.mark()
}
Automatic Fusion and Async Stages
A stream is handled by 1 thread
NO CROSS-THREAD COMMUNICATIONS
NO PARALLELISM
FASTER CODE!
SLOWER CODE!
A boundary will split your stream on different threads
source
.via(doSomething).async
.via(doSomething).async
.runWith(Sink.foreach(println))
Materialized Values
val sink: Sink[Any, Future[Done]] = Sink.ignore
.runWith(sink) is a shortcut for .toMat(sink)(Keep.Right).run
STREAM RUN
Obtain a materialized
value per each stage
Materialized Values Example: TestKit
val myFlow = Flow[String].map { v => v.take(1) }
val (pub, sub) = TestSource.probe[String]
.via(myFlow)
.toMat(TestSink.probe[Any])(Keep.both)
.run()
sub.request(1)
pub.sendNext("Gathering")
sub.expectNext("G")
Stream Ending: Supervisioning
val flow = otherFlow
.withAttributes
ActorAttributes.supervisionStrategy {
case _ => Supervision.resume
}
)
Stream Ending: Supervisioning
RESUME
RESET
STOP
> drop failing elem
> keep going
> drop failing elem
> reset stage state
> keep going
fail all the things!
Other shapes
FAN OUT FAN IN WHATEVER
Finally Got Reactive!
In two months to production...
Memory Leaks
Data Losses
Backpressure on the network
Recovery mechanisms
Key learnings
Actors aren’t sufficient to be reactive
Backpressure as a building block
Akka Streams API is rich
THANK YOU!
Sleep more worry less
1 of 42

Recommended

Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka... by
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Reactivesummit
2.1K views26 slides
Journey into Reactive Streams and Akka Streams by
Journey into Reactive Streams and Akka StreamsJourney into Reactive Streams and Akka Streams
Journey into Reactive Streams and Akka StreamsKevin Webber
1.6K views52 slides
Streaming all the things with akka streams by
Streaming all the things with akka streams   Streaming all the things with akka streams
Streaming all the things with akka streams Johan Andrén
4.2K views49 slides
Reactive Streams / Akka Streams - GeeCON Prague 2014 by
Reactive Streams / Akka Streams - GeeCON Prague 2014Reactive Streams / Akka Streams - GeeCON Prague 2014
Reactive Streams / Akka Streams - GeeCON Prague 2014Konrad Malawski
5.5K views124 slides
Resilient Applications with Akka Persistence - Scaladays 2014 by
Resilient Applications with Akka Persistence - Scaladays 2014Resilient Applications with Akka Persistence - Scaladays 2014
Resilient Applications with Akka Persistence - Scaladays 2014Björn Antonsson
23.5K views73 slides
Reactive Stream Processing with Akka Streams by
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsKonrad Malawski
14.2K views123 slides

More Related Content

What's hot

Scala usergroup stockholm - reactive integrations with akka streams by
Scala usergroup stockholm - reactive integrations with akka streamsScala usergroup stockholm - reactive integrations with akka streams
Scala usergroup stockholm - reactive integrations with akka streamsJohan Andrén
652 views40 slides
Distributed Real-Time Stream Processing: Why and How 2.0 by
Distributed Real-Time Stream Processing:  Why and How 2.0Distributed Real-Time Stream Processing:  Why and How 2.0
Distributed Real-Time Stream Processing: Why and How 2.0Petr Zapletal
5.5K views98 slides
2014 akka-streams-tokyo-japanese by
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japaneseKonrad Malawski
25.5K views115 slides
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache... by
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Lightbend
7.5K views72 slides
Reactive programming on Android by
Reactive programming on AndroidReactive programming on Android
Reactive programming on AndroidTomáš Kypta
7.5K views88 slides
Asynchronous Orchestration DSL on squbs by
Asynchronous Orchestration DSL on squbsAsynchronous Orchestration DSL on squbs
Asynchronous Orchestration DSL on squbsAnil Gursel
525 views28 slides

What's hot(20)

Scala usergroup stockholm - reactive integrations with akka streams by Johan Andrén
Scala usergroup stockholm - reactive integrations with akka streamsScala usergroup stockholm - reactive integrations with akka streams
Scala usergroup stockholm - reactive integrations with akka streams
Johan Andrén652 views
Distributed Real-Time Stream Processing: Why and How 2.0 by Petr Zapletal
Distributed Real-Time Stream Processing:  Why and How 2.0Distributed Real-Time Stream Processing:  Why and How 2.0
Distributed Real-Time Stream Processing: Why and How 2.0
Petr Zapletal5.5K views
2014 akka-streams-tokyo-japanese by Konrad Malawski
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
Konrad Malawski25.5K views
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache... by Lightbend
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Lightbend7.5K views
Reactive programming on Android by Tomáš Kypta
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
Tomáš Kypta7.5K views
Asynchronous Orchestration DSL on squbs by Anil Gursel
Asynchronous Orchestration DSL on squbsAsynchronous Orchestration DSL on squbs
Asynchronous Orchestration DSL on squbs
Anil Gursel525 views
Akka Streams and HTTP by Roland Kuhn
Akka Streams and HTTPAkka Streams and HTTP
Akka Streams and HTTP
Roland Kuhn41.6K views
Akka streams - Umeå java usergroup by Johan Andrén
Akka streams - Umeå java usergroupAkka streams - Umeå java usergroup
Akka streams - Umeå java usergroup
Johan Andrén556 views
Async - react, don't wait - PingConf by Johan Andrén
Async - react, don't wait - PingConfAsync - react, don't wait - PingConf
Async - react, don't wait - PingConf
Johan Andrén3.3K views
Asynchronous stream processing with Akka Streams by Johan Andrén
Asynchronous stream processing with Akka StreamsAsynchronous stream processing with Akka Streams
Asynchronous stream processing with Akka Streams
Johan Andrén3K views
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7) by Konrad Malawski
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
[Tokyo Scala User Group] Akka Streams & Reactive Streams (0.7)
Konrad Malawski2K views
HBase RowKey design for Akka Persistence by Konrad Malawski
HBase RowKey design for Akka PersistenceHBase RowKey design for Akka Persistence
HBase RowKey design for Akka Persistence
Konrad Malawski2.3K views
Akka persistence == event sourcing in 30 minutes by Konrad Malawski
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutes
Konrad Malawski40.1K views
Building Scalable Stateless Applications with RxJava by Rick Warren
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
Rick Warren7.6K views
Reactive stream processing using Akka streams by Johan Andrén
Reactive stream processing using Akka streams Reactive stream processing using Akka streams
Reactive stream processing using Akka streams
Johan Andrén1.1K views
Reactive streams processing using Akka Streams by Johan Andrén
Reactive streams processing using Akka StreamsReactive streams processing using Akka Streams
Reactive streams processing using Akka Streams
Johan Andrén1.9K views
Spark stream - Kafka by Dori Waldman
Spark stream - Kafka Spark stream - Kafka
Spark stream - Kafka
Dori Waldman1.2K views

Similar to A dive into akka streams: from the basics to a real-world scenario

Spark streaming with kafka by
Spark streaming with kafkaSpark streaming with kafka
Spark streaming with kafkaDori Waldman
4.4K views35 slides
Job Queue in Golang by
Job Queue in GolangJob Queue in Golang
Job Queue in GolangBo-Yi Wu
22.3K views82 slides
GTS Episode 1: Reactive programming in the wild by
GTS Episode 1: Reactive programming in the wildGTS Episode 1: Reactive programming in the wild
GTS Episode 1: Reactive programming in the wildOmer Iqbal
383 views56 slides
MongoDB World 2019: Life In Stitch-es by
MongoDB World 2019: Life In Stitch-esMongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-esMongoDB
184 views52 slides
The Art of The Event Streaming Application: Streams, Stream Processors and Sc... by
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...confluent
923 views76 slides
Kakfa summit london 2019 - the art of the event-streaming app by
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming appNeil Avery
595 views76 slides

Similar to A dive into akka streams: from the basics to a real-world scenario(20)

Spark streaming with kafka by Dori Waldman
Spark streaming with kafkaSpark streaming with kafka
Spark streaming with kafka
Dori Waldman4.4K views
Job Queue in Golang by Bo-Yi Wu
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
Bo-Yi Wu22.3K views
GTS Episode 1: Reactive programming in the wild by Omer Iqbal
GTS Episode 1: Reactive programming in the wildGTS Episode 1: Reactive programming in the wild
GTS Episode 1: Reactive programming in the wild
Omer Iqbal383 views
MongoDB World 2019: Life In Stitch-es by MongoDB
MongoDB World 2019: Life In Stitch-esMongoDB World 2019: Life In Stitch-es
MongoDB World 2019: Life In Stitch-es
MongoDB184 views
The Art of The Event Streaming Application: Streams, Stream Processors and Sc... by confluent
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
confluent923 views
Kakfa summit london 2019 - the art of the event-streaming app by Neil Avery
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming app
Neil Avery595 views
Building a High-Performance Database with Scala, Akka, and Spark by Evan Chan
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and Spark
Evan Chan2.8K views
Building Stateful Microservices With Akka by Yaroslav Tkachenko
Building Stateful Microservices With AkkaBuilding Stateful Microservices With Akka
Building Stateful Microservices With Akka
Yaroslav Tkachenko1.9K views
Practical RxJava for Android by Tomáš Kypta
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
Tomáš Kypta1.4K views
Reactive Streams 1.0 and Akka Streams by Dean Wampler
Reactive Streams 1.0 and Akka StreamsReactive Streams 1.0 and Akka Streams
Reactive Streams 1.0 and Akka Streams
Dean Wampler1.8K views
Apache Flink @ Tel Aviv / Herzliya Meetup by Robert Metzger
Apache Flink @ Tel Aviv / Herzliya MeetupApache Flink @ Tel Aviv / Herzliya Meetup
Apache Flink @ Tel Aviv / Herzliya Meetup
Robert Metzger627 views
Azure Durable Functions (2019-04-27) by Paco de la Cruz
Azure Durable Functions (2019-04-27)Azure Durable Functions (2019-04-27)
Azure Durable Functions (2019-04-27)
Paco de la Cruz741 views
Maxim Salnikov - Service Worker: taking the best from the past experience for... by Codemotion
Maxim Salnikov - Service Worker: taking the best from the past experience for...Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Codemotion193 views
Dynatrace: DevOps, shift-left & self-healing a performance clinic with andi by Dynatrace
Dynatrace: DevOps, shift-left & self-healing a performance clinic with andiDynatrace: DevOps, shift-left & self-healing a performance clinic with andi
Dynatrace: DevOps, shift-left & self-healing a performance clinic with andi
Dynatrace371 views
Anton Moldovan "Load testing which you always wanted" by Fwdays
Anton Moldovan "Load testing which you always wanted"Anton Moldovan "Load testing which you always wanted"
Anton Moldovan "Load testing which you always wanted"
Fwdays1.1K views
Gearmanpresentation 110308165409-phpapp01 by longtuan
Gearmanpresentation 110308165409-phpapp01Gearmanpresentation 110308165409-phpapp01
Gearmanpresentation 110308165409-phpapp01
longtuan1K views
Online Meetup: Why should container system / platform builders care about con... by Docker, Inc.
Online Meetup: Why should container system / platform builders care about con...Online Meetup: Why should container system / platform builders care about con...
Online Meetup: Why should container system / platform builders care about con...
Docker, Inc.3K views
Node.js: Continuation-Local-Storage and the Magic of AsyncListener by Islam Sharabash
Node.js: Continuation-Local-Storage and the Magic of AsyncListenerNode.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
Islam Sharabash6.3K views
Oracle Drivers configuration for High Availability by Ludovico Caldara
Oracle Drivers configuration for High AvailabilityOracle Drivers configuration for High Availability
Oracle Drivers configuration for High Availability
Ludovico Caldara590 views

Recently uploaded

360 graden fabriek by
360 graden fabriek360 graden fabriek
360 graden fabriekinfo33492
37 views25 slides
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...TomHalpin9
5 views29 slides
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptxanimuscrm
14 views19 slides
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... by
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...Deltares
14 views23 slides
Quality Engineer: A Day in the Life by
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the LifeJohn Valentino
5 views18 slides
Unleash The Monkeys by
Unleash The MonkeysUnleash The Monkeys
Unleash The MonkeysJacob Duijzer
7 views28 slides

Recently uploaded(20)

360 graden fabriek by info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info3349237 views
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by TomHalpin9
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
TomHalpin95 views
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm14 views
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... by Deltares
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
Deltares14 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino5 views
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the... by Deltares
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
Deltares6 views
Generic or specific? Making sensible software design decisions by Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge... by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
Deltares17 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... by Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller38 views
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs by Deltares
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
Deltares8 views
Software evolution understanding: Automatic extraction of software identifier... by Ra'Fat Al-Msie'deen
Software evolution understanding: Automatic extraction of software identifier...Software evolution understanding: Automatic extraction of software identifier...
Software evolution understanding: Automatic extraction of software identifier...
Headless JS UG Presentation.pptx by Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor7 views
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports by Ra'Fat Al-Msie'deen
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug ReportsBushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports

A dive into akka streams: from the basics to a real-world scenario