SlideShare a Scribd company logo
1 of 99
Akka 2.4.x
and
Commercial Features
1 September 2015
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Konrad `ktoso` Malawski
Akka Team,
Reactive Streams TCK
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform: Akka
• Reactive Platform: Versioning explained
• Remoting / Cluster: Docker networking support
• Cluster: Split Brain Resolver (beta)
• Akka Persistence: Cross-Scala-version snapshot deseriali
• Java 6: Extended LTS
• Akka 2.4.x (currently in Release Candidate phase)
• Cluster Tools promoted to stable!
• Persistence promoted to stable!
• Persistence Queries (experimental)
• Akka Typed (experimental)
• Distributed Data (experimental)
• Akka Streams (currently 1.0, will be included in 2.4.x eventually)
• Q / A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
https://together.typesafe.com/products/reactivePlatform
Reactive Platform Versioning
15v05p01
year
month
patch
=
Scala 2.10.x
Akka 2.3.x
…
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
https://together.typesafe.com/products/reactivePlatform
Reactive Platform Versioning
https://together.typesafe.com/products/reactivePlatform
15v05p01
year
month
patch
=
Scala 2.10.x
Akka 2.3.x
…
15v09p01 =
Scala 2.11.x
Akka 2.3.12 => 2.3.++ (binary compatible!)
…
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Reactive Platform Versioning
https://together.typesafe.com/products/reactivePlatform
How does this help?
• Huge integration test suite before release
• Certified to work well together
• Priority updates / additional features
• Back-ports, fixes, long-term support
Life cycle of each release: 2 years
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
NAT Support
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
support
(NAT support)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
support
(NAT support)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Available in:
RP 15v01p## (Akka 2.3.x),
OSS only in Akka 2.4.x (work in progress)
Docker / NAT support
docker run -d -p 8000:2551 akka-app
Akka App
172.17.0.11:2551
Outside world
example.com:8000
doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Docker / NAT support
akka.remote {
netty.tcp {
hostname = example.com # external (logical) hostname
port = 8000 # external (logical) port
bind-hostname = 172.17.0.11 # internal (bind) hostname
bind-port = 2552 # internal (bind) port
}
}
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server
Split Brain Resolver
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Split Brain Resolver (customer beta)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Installing the Reactive Platform with Split Brain Resolver
Split Brain Resolver
• Fundamental Problem in all distributed systems
• SBR helps to make decisions, is not a magic wand
• A set of pre-built strategies
for when to down nodes in a cluster.
• Strategies:
• Static Quorum (like zoo-keeper)
• Keep Majority
• Keep Oldest
• Keep Referee
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
Split Brain Resolver
• The default behaviour of Akka Cluster is “Manual Downing”:
• A node needs to issue cluster.down(address)
• This decision can be powered by external monitoring,
or DevOps teams observing the cluster.
• It is Safe.
however involves the most human/automated work
• A naive implementation exists called “auto-downing”
• It is not very safe to be used in real clusters
• Definitely not a good choice for apps using Persistence
• It is not recommended for production deployments.
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
Heartbeats
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
everyone is down!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
`n-1` is down!
I’ll take over `A`!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Heartbeats
A
`n-1` is down!
I’ll take over `A`!
A
good if: n-1 really is down.
bad: if n-1 is just very unresponsive
Fundamentally, it is hard to distinguish the two states in distributed systems.
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Static Quorum (3 (> (n/2 +1))
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Static Quorum (3 (> (n/2 +1))
we need to down
ourselves
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Keep Majority (aka. dynamic quorum)
A
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Keep Majority (aka. dynamic quorum)
A
we need to down
ourselves
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
referee node
Keep Referee
A
down-all-if-less-than-nodes
referee node
Keep Referee
A
can’t see referee node!
down-all-if-less-than-nodes
oldest node
Keep Oldest
A
can’t see oldest node!
down-if-alone
oldest node can change,
if “up until now oldest node” leaves the
cluster.
This is more dynamic than keep-referee.
Persistence
Cross-scala-version
compatibility for snapshots
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compatibility for persistent snapshot envelope.
(Payload compatibility depends on application.)
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compatibility for persistent snapshot envelope.
(Payload compatibility depends on application.)
• Scala 2.10 is not binary compatible with 2.11
• 10 => 11 is “major update” by design
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Enhanced compatibility for persistent snapshot envelope.
(Payload compatibility depends on application.)
• More compatible deserialisation than the language
itself!
• Eases migration to latest Scala versions
• (Your journal may actually not be affected and be compatible
anyway.)
• Scala 2.10 is not binary compatible with 2.11
• 10 => 11 is “major update” by design
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
saveSnapshot( )
Akka 2.3 + Scala 2.10
Persistence: Cross-scala-version compat
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
saveSnapshot( )
Akka 2.3 + Scala 2.10
Akka 2.3 + Scala 2.11
loadSnapshot
Java 6
Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java 1.6 compatibility
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java 1.6 compatibility
• Akka Streams & Http currently work with 1.6
• will be merged into Akka 2.4 (likely after 1.1)
• we can back-port and support for RP (Akka 2.3)
Java 6: Extended LTS
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Existing RP releases keep Java 1.6 compatibility
• Akka Streams & Http currently work with 1.6
• will be merged into Akka 2.4 (likely after 1.1)
• we can back-port and support for RP (Akka 2.3)
• Akka 2.4 does require Java 8
• Scala 2.11 + Scala 2.12 (once released)
• it will enter RP once released
Akka 2.4
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• 2.3 => 2.4 is a major update
• additional effort made it binary compatible!
• it does require Java 1.8
• i.e. update your JDK, same sources “just work”
• Future:
• Version bump to 3.0 if binary incompatible
Cluster Tools
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Now Stable!
Akka 2.4 Cluster Tools (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
• Distributed Pub Sub
• Smart message batching (1 send per node)
• Cluster Singleton
• useful for “master” or coordinator Actors
• Cluster Sharding
• useful for sharding load onto the cluster
• graceful shut-down
• balancing load across cluster
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html
class Subscriber extends Actor with ActorLogging {
import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
val mediator = DistributedPubSub(context.system).mediator
// subscribe to the topic named "content"
mediator ! Subscribe("content", self)
def receive = {
case SubscribeAck(Subscribe("content", None, `self`)) ⇒
context become ready
}
def ready: Actor.Receive = {
case s: String ⇒
log.info("Got {}", s)
}
}
Akka 2.4 Cluster Tools - PubSub (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
class Publisher extends Actor {
import DistributedPubSubMediator.Publish
// activate the extension
val mediator = DistributedPubSub(context.system).mediator
def receive = {
case in: String ⇒
val out = in.toUpperCase
mediator ! Publish("content", out)
}
}
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html
Akka 2.4 Cluster Tools - PubSub (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A
B
C D
http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html
Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A
B
C
D
role: backend-2 role: backend-2
http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html
Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
Akka 2.4 Cluster Tools - Sharding (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
A B
C
D
doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
Akka 2.4 Cluster Tools - Sharding (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
val counterRegion: ActorRef = ClusterSharding(system).start(
typeName = "Counter",
entityProps = Props[Counter],
settings = ClusterShardingSettings(system),
extractEntityId = extractEntityId,
extractShardId = extractShardId)
val counterRegion: ActorRef =
ClusterSharding(system).shardRegion("Counter")
counterRegion ! Get(123)
expectMsg(0)
Start a shard region:
Other nodes in cluster send messages to it:
doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
Persistence
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Now Stable!
var state = S0
persistenceId = “a”
Command
Journal
Akka 2.4 Persistence (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
var state = S0
persistenceId = “a”
Journal
Generate Events
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
var state = S0
persistenceId = “a”
Journal
Generate Events
E1
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
ACK “persisted”
Journal
E1
var state = S0
persistenceId = “a”
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
“Apply” event
Journal
E1
var state = S0
persistenceId = “a”
E1
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Journal
E1
var state = S0
persistenceId = “a”
E1
Okey!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Journal
E1
var state = S0
persistenceId = “a”
E1
Okey!
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Journal
E1
var state = S0
persistenceId = “a”
E1
Ok, he got my $.
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
…sum of states…
Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Snapshot Store
snapshot!
state until [E5]
S5Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Snapshot Store
state until [E8]
S8Journal
E1 E2 E3 E4
E5 E6 E7 E8
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
state until [E8]
S8
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
“bring me up-to-date!”
Snapshot Store
Journal
E1 E2 E3 E4
E5 E6 E7 E8
restart!
replay!
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
“bring me up-to-date!”
Snapshot Store
restart!
replay!
S5
Journal
E1 E2 E3 E4
E5 E6 E7 E8
S5
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
state until [E8]
Snapshot Store
S5
restart!
replay!
S8
Journal
E1 E2 E3 E4
E5 E6 E7 E8
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka 2.4 Persistence (Now Stable!)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Advanced support for long-term schema evolution.
EventAdapters & StringManifestSerializers
Akka 2.4 Persistence (Now Stable!)
Persistence Query
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
Akka 2.4 Persistence Queries (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
API still work in progress, should be polished very soon.
val query: Source[RichEvent, QueryStats] =
readJournal.query(ByTagsWithStats(Set("red", "blue")))
query
.map { event => s"Event payload: ${event.payload}" }
.runWith(Sink.ignore)
Akka 2.4 Persistence Queries (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
API still work in progress, should be polished very soon.
val query: Source[RichEvent, QueryStats] =
readJournal.query(ByTagsWithStats(Set("red", "blue")))
query
.map { event => s"Event payload: ${event.payload}" }
.runWith(Sink.ignore)
Journalwrite-side query-side
Query
Optimised
Journal
Simple view / result
Akka Typed
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor
Akka 2.4 Typed (experimental)
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
The main concept is Behaviour[T]
Explicit protocols for the win!
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
Since Behaviour[Greet] is typed,
msgis-a Greet.
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
The Behaviour[T]is the receive.
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
sender()is no more.
Explicit protocols for the win!
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
sender()is no more.
Explicit protocols for the win!
final case class Greet(whom: String, replyTo: ActorRef[Greeted])
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
ActorRef[T]is now typed!
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
become()is required.
And replaced by returning the “next” Behaviour[T]
// context.become(receive)
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
become()is required.
And replaced by returning the “next” Behaviour[T]
On a conceptual level at least,
we provide Static[T]if you don’t need become.
// context.become(receive)
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
become()is required.
And replaced by returning the “next” Behaviour[T]
Special behaviors:
Same / Unhandled / Empty / Stopped / Ignore
// context.become(receive)
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
val greeter = Total[Greet] { msg ⇒
println(s"Hello ${msg.whom}!")
msg.replyTo ! Greeted(msg.whom)
Same
}
val system: ActorSystem[Greet] =
ActorSystem(“typed", Props(totalGreeter))
system ! Greet("kapi", system.deadLetters)
class Greeter extends Actor {
def receive = {
case msg: Greet ⇒
println(s"Hello ${msg.whom}!")
sender() ! Greeted(msg.whom)
}
}
val system: ActorSystem =
ActorSystem(“akka-actor-system“)
val greeter =
system.actorOf(Props[Greeter])
system ! Greet("kapi", system.deadLetters)
Akka Actor Akka Typed
“Root actor” is not user-defined for ActorSystem[T]
Encourages thinking about supervision.
doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
Akka 2.4 Typed (experimental)
Akka Distributed Data
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
New module, experimental!
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
for “small, fast data”
Implements various CRDTs and gossips changes through the
Cluster.
CRDTs = Conflict-free Replicated Data Types
Data structures that can be concurrently updated
and always eventually converge on the same value.
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
for “small, fast data”
Implements various CRDTs and gossips changes through the
Cluster.
CRDTs = Conflict-free Replicated Data Types
Data structures that can be concurrently updated
and always eventually converge on the same value.
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
value = 5
n1: 2
n2: 0
n3: 3
Akka Cluster (gossip)
GCounter example:
value = 5
n1: 2
n2: 0
n3: 3
value = 5
n1: 2
n2: 0
n3: 3
node-1 node-2
node-3
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
value = 6
n1: 2+1
n2: 0
n3: 3
Akka Cluster (gossip)
GCounter example:
value = 5
n1: 2
n2: 0
n3: 3
value = 6
n1: 2
n2: 0
n3: 3+1
node-1 node-2
node-3
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
node-1 node-2
node-3
value = 7
n1: 2+1
n2: 0
n3: 3+1
Akka Cluster (gossip)
GCounter example:
value = 5
n1: 2
n2: 0
n3: 3
value = 6
n1: 2
n2: 0
n3: 3+1
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
node-1 node-2
node-3
value = 7
n1: 2+1
n2: 0
n3: 3+1
Akka Cluster (gossip)
GCounter example:
value = 7
n1: 2+1
n2: 0
n3: 3+1
value = 7
n1: 2+1
n2: 0
n3: 3+1
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
implicit val node = Cluster(system)
val replicator = DistributedData(system).replicator
val Counter1Key = PNCounterKey("counter1")
replicator ! Update(Counter1Key, PNCounter(), WriteLocal)(_ + 1)
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka 2.4 Distributed Data (experimental)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Provided data types:
• Counters: GCounter, PNCounter
• Sets: GSet, ORSet
• Maps: ORMap, ORMultiMap, LWWMap, PNCounterMap
• Registers: LWWRegister, Flag
doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
Akka Streams & Http
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
1.0 (experimental) currently.
will join the Akka 2.4.x release.
Akka Streams & Http (experimental, to eventually join Akka 2.4.x)
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Akka Streams
Asynchronous Back-pressured Stream Processing
An implementation of Reactive Streams.
Reactive Streams
an initiative co-lead by Typesafe, Netflix, Pivotal, RedHat),
allowing for inter-op of asynchronous streaming libraries.
Akka Http
Superseeds Spray.io, the well known high-performance Http serv
Fully based on Akka Streams.
http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
http://www.reactive-streams.org/
Reactive Streams (1.0, en route to be included in JDK9)
Akka Streams <-> Actors – Advanced
val subscriber = ActorSubscriber(
system.actorOf(Props[SubStreamParent], ”parent”)
)
Source(1 to 100)
.map(_.toString)
.filter(_.length == 2)
.drop(2)
.conflate(seed => seed)((acc, i) => acc + i)
.groupBy(_.last)
.runWith(subscriber)
All the usual ops available for Linear Flows.
http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
Links
• akka.io
• reactive-streams.org
• akka-user
• https://www.typesafe.com/subscription
• Streams and Http
• http://doc.akka.io/docs/akka-stream-and-http-
experimental/1.0/scala.html
• http://doc.akka.io/docs/akka-stream-and-http-
experimental/1.0/java.html
• Akka 2.4 RC1
• http://doc.akka.io/docs/akka/2.4.0-RC1/scala.html
• http://doc.akka.io/docs/akka/2.4.0-RC1/java.html
Akka 2.4 and RP commercial features
with Konrad `@ktosopl` Malawski
Perhaps you’d also like…
WEBINAR
Introducing Typesafe
ConductR
WATCH NOW
HAVE QUESTIONS?
Get in touch with
Typesafe today!
CONTACT US
ACTIVATOR TEMPLATE
Akka Distributed
Data Samples (Scala)
CHECK IT OUT
EXPERT TRAINING
Delivered on-site for Akka, Spark, Scala and Play
Help is just a click away. Get in touch
with Typesafe about our training courses.
• Intro Workshop to Apache Spark
• Fast Track & Advanced Scala
• Fast Track to Akka with Java or
Scala
• Fast Track to Play with Java or Scala
• Advanced Akka with Java or Scala
Ask us about local trainings available by
24 Typesafe partners in 14 countries
around the world.
CONTACT US Learn more about on-site training
©Typesafe 2015 – All Rights Reserved©Typesafe 2015 – All Rights Reserved

More Related Content

What's hot

Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...
Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...
Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...Helena Edelson
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootIvan Vasyliev
 
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...StreamNative
 
Design and Implementation of Incremental Cooperative Rebalancing
Design and Implementation of Incremental Cooperative RebalancingDesign and Implementation of Incremental Cooperative Rebalancing
Design and Implementation of Incremental Cooperative Rebalancingconfluent
 
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&Pierre
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&PierreKafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&Pierre
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&PierreStreamNative
 
Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Guido Schmutz
 
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...confluent
 
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...Erik Onnen
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Christopher Curtin
 
Being Ready for Apache Kafka - Apache: Big Data Europe 2015
Being Ready for Apache Kafka - Apache: Big Data Europe 2015Being Ready for Apache Kafka - Apache: Big Data Europe 2015
Being Ready for Apache Kafka - Apache: Big Data Europe 2015Michael Noll
 
A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)Markus Günther
 
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...Lucas Jellema
 
How Pulsar Stores Your Data - Pulsar Summit NA 2021
How Pulsar Stores Your Data - Pulsar Summit NA 2021How Pulsar Stores Your Data - Pulsar Summit NA 2021
How Pulsar Stores Your Data - Pulsar Summit NA 2021StreamNative
 
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...StreamNative
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache KafkaChhavi Parasher
 
Scale-Out Resource Management at Microsoft using Apache YARN
Scale-Out Resource Management at Microsoft using Apache YARNScale-Out Resource Management at Microsoft using Apache YARN
Scale-Out Resource Management at Microsoft using Apache YARNDataWorks Summit/Hadoop Summit
 
[Big Data Spain] Apache Spark Streaming + Kafka 0.10: an Integration Story
[Big Data Spain] Apache Spark Streaming + Kafka 0.10:  an Integration Story[Big Data Spain] Apache Spark Streaming + Kafka 0.10:  an Integration Story
[Big Data Spain] Apache Spark Streaming + Kafka 0.10: an Integration StoryJoan Viladrosa Riera
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaSteven Wu
 

What's hot (20)

Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...
Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...
Building Reactive Distributed Systems For Streaming Big Data, Analytics & Mac...
 
Spark streaming + kafka 0.10
Spark streaming + kafka 0.10Spark streaming + kafka 0.10
Spark streaming + kafka 0.10
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
 
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...
Take Kafka-on-Pulsar to Production at Internet Scale: Improvements Made for P...
 
Design and Implementation of Incremental Cooperative Rebalancing
Design and Implementation of Incremental Cooperative RebalancingDesign and Implementation of Incremental Cooperative Rebalancing
Design and Implementation of Incremental Cooperative Rebalancing
 
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&Pierre
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&PierreKafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&Pierre
Kafka on Pulsar:bringing native Kafka protocol support to Pulsar_Sijie&Pierre
 
Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !
 
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...
The Foundations of Multi-DC Kafka (Jakub Korab, Solutions Architect, Confluen...
 
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
 
Being Ready for Apache Kafka - Apache: Big Data Europe 2015
Being Ready for Apache Kafka - Apache: Big Data Europe 2015Being Ready for Apache Kafka - Apache: Big Data Europe 2015
Being Ready for Apache Kafka - Apache: Big Data Europe 2015
 
A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)
 
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
AMIS SIG - Introducing Apache Kafka - Scalable, reliable Event Bus & Message ...
 
How Pulsar Stores Your Data - Pulsar Summit NA 2021
How Pulsar Stores Your Data - Pulsar Summit NA 2021How Pulsar Stores Your Data - Pulsar Summit NA 2021
How Pulsar Stores Your Data - Pulsar Summit NA 2021
 
Have your cake and eat it too
Have your cake and eat it tooHave your cake and eat it too
Have your cake and eat it too
 
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache Kafka
 
Scale-Out Resource Management at Microsoft using Apache YARN
Scale-Out Resource Management at Microsoft using Apache YARNScale-Out Resource Management at Microsoft using Apache YARN
Scale-Out Resource Management at Microsoft using Apache YARN
 
[Big Data Spain] Apache Spark Streaming + Kafka 0.10: an Integration Story
[Big Data Spain] Apache Spark Streaming + Kafka 0.10:  an Integration Story[Big Data Spain] Apache Spark Streaming + Kafka 0.10:  an Integration Story
[Big Data Spain] Apache Spark Streaming + Kafka 0.10: an Integration Story
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 

Viewers also liked

(Hashtag) Advertising Plans Book
(Hashtag) Advertising Plans Book(Hashtag) Advertising Plans Book
(Hashtag) Advertising Plans BookSam Koester
 
motionQR - Citi Mobile Challenge Finalist
motionQR - Citi Mobile Challenge FinalistmotionQR - Citi Mobile Challenge Finalist
motionQR - Citi Mobile Challenge FinalistmotionQR
 
Advertising Plans Book Saint Joseph Funeral Home
Advertising Plans Book Saint Joseph Funeral HomeAdvertising Plans Book Saint Joseph Funeral Home
Advertising Plans Book Saint Joseph Funeral HomeDonald Mitchell
 
National Air And Space Museum Washington DC
National Air And Space Museum Washington DCNational Air And Space Museum Washington DC
National Air And Space Museum Washington DCShivakumar Patil
 
スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成TanUkkii
 
From Waterfall to Agile - A Product Manager Journey
From Waterfall to Agile - A Product Manager JourneyFrom Waterfall to Agile - A Product Manager Journey
From Waterfall to Agile - A Product Manager JourneyRamon Guiu
 
A Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to BluemixA Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to Bluemixibmwebspheresoftware
 
Auto handout unit 1 history
Auto handout unit 1 historyAuto handout unit 1 history
Auto handout unit 1 historykgmahesh123
 
Samsung presentation
Samsung presentationSamsung presentation
Samsung presentationMohd Tayyab
 

Viewers also liked (12)

New York City
New York CityNew York City
New York City
 
(Hashtag) Advertising Plans Book
(Hashtag) Advertising Plans Book(Hashtag) Advertising Plans Book
(Hashtag) Advertising Plans Book
 
Monika grgić
Monika grgićMonika grgić
Monika grgić
 
motionQR - Citi Mobile Challenge Finalist
motionQR - Citi Mobile Challenge FinalistmotionQR - Citi Mobile Challenge Finalist
motionQR - Citi Mobile Challenge Finalist
 
Advertising Plans Book Saint Joseph Funeral Home
Advertising Plans Book Saint Joseph Funeral HomeAdvertising Plans Book Saint Joseph Funeral Home
Advertising Plans Book Saint Joseph Funeral Home
 
National Air And Space Museum Washington DC
National Air And Space Museum Washington DCNational Air And Space Museum Washington DC
National Air And Space Museum Washington DC
 
スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成
 
From Waterfall to Agile - A Product Manager Journey
From Waterfall to Agile - A Product Manager JourneyFrom Waterfall to Agile - A Product Manager Journey
From Waterfall to Agile - A Product Manager Journey
 
A Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to BluemixA Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to Bluemix
 
Auto handout unit 1 history
Auto handout unit 1 historyAuto handout unit 1 history
Auto handout unit 1 history
 
Que es la web 3
Que es la web 3Que es la web 3
Que es la web 3
 
Samsung presentation
Samsung presentationSamsung presentation
Samsung presentation
 

Similar to Akka 2.4 plus commercial features in Typesafe Reactive Platform

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...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Lightbend
 
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...Athens Big Data
 
DataConf.TW2018: Develop Kafka Streams Application on Your Laptop
DataConf.TW2018: Develop Kafka Streams Application on Your LaptopDataConf.TW2018: Develop Kafka Streams Application on Your Laptop
DataConf.TW2018: Develop Kafka Streams Application on Your LaptopYu-Jhe Li
 
What's new in Apache Spark 2.4
What's new in Apache Spark 2.4What's new in Apache Spark 2.4
What's new in Apache Spark 2.4boxu42
 
What’s new in Apache Spark 2.3
What’s new in Apache Spark 2.3What’s new in Apache Spark 2.3
What’s new in Apache Spark 2.3DataWorks Summit
 
What is Apache Kafka and What is an Event Streaming Platform?
What is Apache Kafka and What is an Event Streaming Platform?What is Apache Kafka and What is an Event Streaming Platform?
What is Apache Kafka and What is an Event Streaming Platform?confluent
 
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...confluent
 
What is Apache Kafka®?
What is Apache Kafka®?What is Apache Kafka®?
What is Apache Kafka®?Eventador
 
What is apache Kafka?
What is apache Kafka?What is apache Kafka?
What is apache Kafka?Kenny Gorman
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarTimothy Spann
 
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...Big Data Spain
 
Apache spark 2.4 and beyond
Apache spark 2.4 and beyondApache spark 2.4 and beyond
Apache spark 2.4 and beyondXiao Li
 
Feeding Cassandra with Spark-Streaming and Kafka
Feeding Cassandra with Spark-Streaming and KafkaFeeding Cassandra with Spark-Streaming and Kafka
Feeding Cassandra with Spark-Streaming and KafkaDataStax Academy
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraSpark Summit
 
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)Helena Edelson
 
Westpac Bank Tech Talk 1: Dive into Apache Kafka
Westpac Bank Tech Talk 1: Dive into Apache KafkaWestpac Bank Tech Talk 1: Dive into Apache Kafka
Westpac Bank Tech Talk 1: Dive into Apache Kafkaconfluent
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Konrad Malawski
 
Stream Processing using Apache Spark and Apache Kafka
Stream Processing using Apache Spark and Apache KafkaStream Processing using Apache Spark and Apache Kafka
Stream Processing using Apache Spark and Apache KafkaAbhinav Singh
 

Similar to Akka 2.4 plus commercial features in Typesafe Reactive Platform (20)

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...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
 
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
14th Athens Big Data Meetup - Landoop Workshop - Apache Kafka Entering The St...
 
DataConf.TW2018: Develop Kafka Streams Application on Your Laptop
DataConf.TW2018: Develop Kafka Streams Application on Your LaptopDataConf.TW2018: Develop Kafka Streams Application on Your Laptop
DataConf.TW2018: Develop Kafka Streams Application on Your Laptop
 
What's new in Apache Spark 2.4
What's new in Apache Spark 2.4What's new in Apache Spark 2.4
What's new in Apache Spark 2.4
 
What’s new in Apache Spark 2.3
What’s new in Apache Spark 2.3What’s new in Apache Spark 2.3
What’s new in Apache Spark 2.3
 
What is Apache Kafka and What is an Event Streaming Platform?
What is Apache Kafka and What is an Event Streaming Platform?What is Apache Kafka and What is an Event Streaming Platform?
What is Apache Kafka and What is an Event Streaming Platform?
 
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
 
Kafka Explainaton
Kafka ExplainatonKafka Explainaton
Kafka Explainaton
 
What is Apache Kafka®?
What is Apache Kafka®?What is Apache Kafka®?
What is Apache Kafka®?
 
What is apache Kafka?
What is apache Kafka?What is apache Kafka?
What is apache Kafka?
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache Pulsar
 
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
Spark Streaming + Kafka 0.10: an integration story by Joan Viladrosa Riera at...
 
Apache spark 2.4 and beyond
Apache spark 2.4 and beyondApache spark 2.4 and beyond
Apache spark 2.4 and beyond
 
Feeding Cassandra with Spark-Streaming and Kafka
Feeding Cassandra with Spark-Streaming and KafkaFeeding Cassandra with Spark-Streaming and Kafka
Feeding Cassandra with Spark-Streaming and Kafka
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
 
Cassandra and Spark SQL
Cassandra and Spark SQLCassandra and Spark SQL
Cassandra and Spark SQL
 
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)
Streaming Big Data with Spark, Kafka, Cassandra, Akka & Scala (from webinar)
 
Westpac Bank Tech Talk 1: Dive into Apache Kafka
Westpac Bank Tech Talk 1: Dive into Apache KafkaWestpac Bank Tech Talk 1: Dive into Apache Kafka
Westpac Bank Tech Talk 1: Dive into Apache Kafka
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016
 
Stream Processing using Apache Spark and Apache Kafka
Stream Processing using Apache Spark and Apache KafkaStream Processing using Apache Spark and Apache Kafka
Stream Processing using Apache Spark and Apache Kafka
 

More from Legacy Typesafe (now Lightbend)

The How and Why of Fast Data Analytics with Apache Spark
The How and Why of Fast Data Analytics with Apache SparkThe How and Why of Fast Data Analytics with Apache Spark
The How and Why of Fast Data Analytics with Apache SparkLegacy Typesafe (now Lightbend)
 
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...Legacy Typesafe (now Lightbend)
 
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Legacy Typesafe (now Lightbend)
 
Microservices 101: Exploiting Reality's Constraints with Technology
Microservices 101: Exploiting Reality's Constraints with TechnologyMicroservices 101: Exploiting Reality's Constraints with Technology
Microservices 101: Exploiting Reality's Constraints with TechnologyLegacy Typesafe (now Lightbend)
 
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and DatabricksFour Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and DatabricksLegacy Typesafe (now Lightbend)
 
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0Legacy Typesafe (now Lightbend)
 
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...Legacy Typesafe (now Lightbend)
 
Reactive Streams 1.0.0 and Why You Should Care (webinar)
Reactive Streams 1.0.0 and Why You Should Care (webinar)Reactive Streams 1.0.0 and Why You Should Care (webinar)
Reactive Streams 1.0.0 and Why You Should Care (webinar)Legacy Typesafe (now Lightbend)
 
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big DataLegacy Typesafe (now Lightbend)
 

More from Legacy Typesafe (now Lightbend) (14)

The How and Why of Fast Data Analytics with Apache Spark
The How and Why of Fast Data Analytics with Apache SparkThe How and Why of Fast Data Analytics with Apache Spark
The How and Why of Fast Data Analytics with Apache Spark
 
Reactive Design Patterns
Reactive Design PatternsReactive Design Patterns
Reactive Design Patterns
 
Revitalizing Aging Architectures with Microservices
Revitalizing Aging Architectures with MicroservicesRevitalizing Aging Architectures with Microservices
Revitalizing Aging Architectures with Microservices
 
How to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOSHow to deploy Apache Spark 
to Mesos/DCOS
How to deploy Apache Spark 
to Mesos/DCOS
 
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...
Reactive Revealed Part 3 of 3: Resiliency, Failures vs Errors, Isolation, Del...
 
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
Reactive Revealed Part 2: Scalability, Elasticity and Location Transparency i...
 
Microservices 101: Exploiting Reality's Constraints with Technology
Microservices 101: Exploiting Reality's Constraints with TechnologyMicroservices 101: Exploiting Reality's Constraints with Technology
Microservices 101: Exploiting Reality's Constraints with Technology
 
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and DatabricksFour Things to Know About Reliable Spark Streaming with Typesafe and Databricks
Four Things to Know About Reliable Spark Streaming with Typesafe and Databricks
 
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
 
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...
Modernizing Your Aging Architecture: What Enterprise Architects Need To Know ...
 
Reactive Streams 1.0.0 and Why You Should Care (webinar)
Reactive Streams 1.0.0 and Why You Should Care (webinar)Reactive Streams 1.0.0 and Why You Should Care (webinar)
Reactive Streams 1.0.0 and Why You Should Care (webinar)
 
Going Reactive in Java with Typesafe Reactive Platform
Going Reactive in Java with Typesafe Reactive PlatformGoing Reactive in Java with Typesafe Reactive Platform
Going Reactive in Java with Typesafe Reactive Platform
 
Why Play Framework is fast
Why Play Framework is fastWhy Play Framework is fast
Why Play Framework is fast
 
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data
[Sneak Preview] Apache Spark: Preparing for the next wave of Reactive Big Data
 

Recently uploaded

Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 

Recently uploaded (20)

Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 

Akka 2.4 plus commercial features in Typesafe Reactive Platform

  • 1. Akka 2.4.x and Commercial Features 1 September 2015 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 2. Konrad `ktoso` Malawski Akka Team, Reactive Streams TCK Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 3. Reactive Platform: Akka • Reactive Platform: Versioning explained • Remoting / Cluster: Docker networking support • Cluster: Split Brain Resolver (beta) • Akka Persistence: Cross-Scala-version snapshot deseriali • Java 6: Extended LTS • Akka 2.4.x (currently in Release Candidate phase) • Cluster Tools promoted to stable! • Persistence promoted to stable! • Persistence Queries (experimental) • Akka Typed (experimental) • Distributed Data (experimental) • Akka Streams (currently 1.0, will be included in 2.4.x eventually) • Q / A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 4. Reactive Platform Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 5. Reactive Platform Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski https://together.typesafe.com/products/reactivePlatform
  • 6. Reactive Platform Versioning 15v05p01 year month patch = Scala 2.10.x Akka 2.3.x … Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski https://together.typesafe.com/products/reactivePlatform
  • 7. Reactive Platform Versioning https://together.typesafe.com/products/reactivePlatform 15v05p01 year month patch = Scala 2.10.x Akka 2.3.x … 15v09p01 = Scala 2.11.x Akka 2.3.12 => 2.3.++ (binary compatible!) … Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 8. Reactive Platform Versioning https://together.typesafe.com/products/reactivePlatform How does this help? • Huge integration test suite before release • Certified to work well together • Priority updates / additional features • Back-ports, fixes, long-term support Life cycle of each release: 2 years Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 9. NAT Support Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 10. support (NAT support) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 11. support (NAT support) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Available in: RP 15v01p## (Akka 2.3.x), OSS only in Akka 2.4.x (work in progress)
  • 12. Docker / NAT support docker run -d -p 8000:2551 akka-app Akka App 172.17.0.11:2551 Outside world example.com:8000 doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 13. Docker / NAT support akka.remote { netty.tcp { hostname = example.com # external (logical) hostname port = 8000 # external (logical) port bind-hostname = 172.17.0.11 # internal (bind) hostname bind-port = 2552 # internal (bind) port } } Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski doc.akka.io/docs/akka/2.4.0-RC1/general/remoting.html#Peer-to-Peer_vs__Client-Server
  • 14. Split Brain Resolver Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 15. Split Brain Resolver (customer beta) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Installing the Reactive Platform with Split Brain Resolver
  • 16. Split Brain Resolver • Fundamental Problem in all distributed systems • SBR helps to make decisions, is not a magic wand • A set of pre-built strategies for when to down nodes in a cluster. • Strategies: • Static Quorum (like zoo-keeper) • Keep Majority • Keep Oldest • Keep Referee Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
  • 17. Split Brain Resolver • The default behaviour of Akka Cluster is “Manual Downing”: • A node needs to issue cluster.down(address) • This decision can be powered by external monitoring, or DevOps teams observing the cluster. • It is Safe. however involves the most human/automated work • A naive implementation exists called “auto-downing” • It is not very safe to be used in real clusters • Definitely not a good choice for apps using Persistence • It is not recommended for production deployments. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski http://doc.akka.io/docs/akka/rp-15v09p01/scala/split-brain-resolver.html
  • 18. Heartbeats A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 19. Heartbeats A everyone is down! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 20. Heartbeats A `n-1` is down! I’ll take over `A`! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 21. Heartbeats A `n-1` is down! I’ll take over `A`! A good if: n-1 really is down. bad: if n-1 is just very unresponsive Fundamentally, it is hard to distinguish the two states in distributed systems. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 22. Static Quorum (3 (> (n/2 +1)) A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 23. Static Quorum (3 (> (n/2 +1)) we need to down ourselves A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 24. Keep Majority (aka. dynamic quorum) A Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 25. Keep Majority (aka. dynamic quorum) A we need to down ourselves Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 27. referee node Keep Referee A can’t see referee node! down-all-if-less-than-nodes
  • 28. oldest node Keep Oldest A can’t see oldest node! down-if-alone oldest node can change, if “up until now oldest node” leaves the cluster. This is more dynamic than keep-referee.
  • 29. Persistence Cross-scala-version compatibility for snapshots Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 30. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.)
  • 31. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.) • Scala 2.10 is not binary compatible with 2.11 • 10 => 11 is “major update” by design
  • 32. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Enhanced compatibility for persistent snapshot envelope. (Payload compatibility depends on application.) • More compatible deserialisation than the language itself! • Eases migration to latest Scala versions • (Your journal may actually not be affected and be compatible anyway.) • Scala 2.10 is not binary compatible with 2.11 • 10 => 11 is “major update” by design
  • 33. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski saveSnapshot( ) Akka 2.3 + Scala 2.10
  • 34. Persistence: Cross-scala-version compat Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski saveSnapshot( ) Akka 2.3 + Scala 2.10 Akka 2.3 + Scala 2.11 loadSnapshot
  • 35. Java 6 Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 36. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility
  • 37. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility • Akka Streams & Http currently work with 1.6 • will be merged into Akka 2.4 (likely after 1.1) • we can back-port and support for RP (Akka 2.3)
  • 38. Java 6: Extended LTS Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Existing RP releases keep Java 1.6 compatibility • Akka Streams & Http currently work with 1.6 • will be merged into Akka 2.4 (likely after 1.1) • we can back-port and support for RP (Akka 2.3) • Akka 2.4 does require Java 8 • Scala 2.11 + Scala 2.12 (once released) • it will enter RP once released
  • 39. Akka 2.4 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 40. Akka 2.4 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • 2.3 => 2.4 is a major update • additional effort made it binary compatible! • it does require Java 1.8 • i.e. update your JDK, same sources “just work” • Future: • Version bump to 3.0 if binary incompatible
  • 41. Cluster Tools Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Now Stable!
  • 42. Akka 2.4 Cluster Tools (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski • Distributed Pub Sub • Smart message batching (1 send per node) • Cluster Singleton • useful for “master” or coordinator Actors • Cluster Sharding • useful for sharding load onto the cluster • graceful shut-down • balancing load across cluster
  • 43. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html class Subscriber extends Actor with ActorLogging { import DistributedPubSubMediator.{ Subscribe, SubscribeAck } val mediator = DistributedPubSub(context.system).mediator // subscribe to the topic named "content" mediator ! Subscribe("content", self) def receive = { case SubscribeAck(Subscribe("content", None, `self`)) ⇒ context become ready } def ready: Actor.Receive = { case s: String ⇒ log.info("Got {}", s) } } Akka 2.4 Cluster Tools - PubSub (Now Stable!)
  • 44. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski class Publisher extends Actor { import DistributedPubSubMediator.Publish // activate the extension val mediator = DistributedPubSub(context.system).mediator def receive = { case in: String ⇒ val out = in.toUpperCase mediator ! Publish("content", out) } } doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-pub-sub.html Akka 2.4 Cluster Tools - PubSub (Now Stable!)
  • 45. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
  • 46. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D role: backend-2 role: backend-2 http://doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-singleton.html Akka 2.4 Cluster Tools - Cluster Singleton (Now Stable!)
  • 47. Akka 2.4 Cluster Tools - Sharding (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski A B C D doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
  • 48. Akka 2.4 Cluster Tools - Sharding (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski val counterRegion: ActorRef = ClusterSharding(system).start( typeName = "Counter", entityProps = Props[Counter], settings = ClusterShardingSettings(system), extractEntityId = extractEntityId, extractShardId = extractShardId) val counterRegion: ActorRef = ClusterSharding(system).shardRegion("Counter") counterRegion ! Get(123) expectMsg(0) Start a shard region: Other nodes in cluster send messages to it: doc.akka.io/docs/akka/2.4.0-RC1/scala/cluster-sharding.html
  • 49. Persistence Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Now Stable!
  • 50. var state = S0 persistenceId = “a” Command Journal Akka 2.4 Persistence (Now Stable!) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 51. var state = S0 persistenceId = “a” Journal Generate Events Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 52. var state = S0 persistenceId = “a” Journal Generate Events E1 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 53. ACK “persisted” Journal E1 var state = S0 persistenceId = “a” Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 54. “Apply” event Journal E1 var state = S0 persistenceId = “a” E1 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 55. Journal E1 var state = S0 persistenceId = “a” E1 Okey! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 56. Journal E1 var state = S0 persistenceId = “a” E1 Okey! Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 57. Journal E1 var state = S0 persistenceId = “a” E1 Ok, he got my $. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 58. …sum of states… Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 59. Snapshot Store snapshot! state until [E5] S5Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 60. Snapshot Store state until [E8] S8Journal E1 E2 E3 E4 E5 E6 E7 E8 S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 61. state until [E8] S8 Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 crash! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 62. Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 crash! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 63. “bring me up-to-date!” Snapshot Store Journal E1 E2 E3 E4 E5 E6 E7 E8 restart! replay! S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 64. “bring me up-to-date!” Snapshot Store restart! replay! S5 Journal E1 E2 E3 E4 E5 E6 E7 E8 S5 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 65. state until [E8] Snapshot Store S5 restart! replay! S8 Journal E1 E2 E3 E4 E5 E6 E7 E8 Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka 2.4 Persistence (Now Stable!)
  • 66. Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Advanced support for long-term schema evolution. EventAdapters & StringManifestSerializers Akka 2.4 Persistence (Now Stable!)
  • 67. Persistence Query Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  • 68. Akka 2.4 Persistence Queries (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski API still work in progress, should be polished very soon. val query: Source[RichEvent, QueryStats] = readJournal.query(ByTagsWithStats(Set("red", "blue"))) query .map { event => s"Event payload: ${event.payload}" } .runWith(Sink.ignore)
  • 69. Akka 2.4 Persistence Queries (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski API still work in progress, should be polished very soon. val query: Source[RichEvent, QueryStats] = readJournal.query(ByTagsWithStats(Set("red", "blue"))) query .map { event => s"Event payload: ${event.payload}" } .runWith(Sink.ignore) Journalwrite-side query-side Query Optimised Journal Simple view / result
  • 70. Akka Typed Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  • 71. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka 2.4 Typed (experimental)
  • 72. Akka 2.4 Typed (experimental) val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html
  • 73. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed The main concept is Behaviour[T] Explicit protocols for the win! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 74. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed Since Behaviour[Greet] is typed, msgis-a Greet. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 75. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed The Behaviour[T]is the receive. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 76. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed sender()is no more. Explicit protocols for the win! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 77. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed sender()is no more. Explicit protocols for the win! final case class Greet(whom: String, replyTo: ActorRef[Greeted]) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 78. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed ActorRef[T]is now typed! doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 79. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 80. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] On a conceptual level at least, we provide Static[T]if you don’t need become. // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 81. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed become()is required. And replaced by returning the “next” Behaviour[T] Special behaviors: Same / Unhandled / Empty / Stopped / Ignore // context.become(receive) doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 82. val greeter = Total[Greet] { msg ⇒ println(s"Hello ${msg.whom}!") msg.replyTo ! Greeted(msg.whom) Same } val system: ActorSystem[Greet] = ActorSystem(“typed", Props(totalGreeter)) system ! Greet("kapi", system.deadLetters) class Greeter extends Actor { def receive = { case msg: Greet ⇒ println(s"Hello ${msg.whom}!") sender() ! Greeted(msg.whom) } } val system: ActorSystem = ActorSystem(“akka-actor-system“) val greeter = system.actorOf(Props[Greeter]) system ! Greet("kapi", system.deadLetters) Akka Actor Akka Typed “Root actor” is not user-defined for ActorSystem[T] Encourages thinking about supervision. doc.akka.io/docs/akka/2.4.0-RC1/scala/typed-actors.html Akka 2.4 Typed (experimental)
  • 83. Akka Distributed Data Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski New module, experimental!
  • 84. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski for “small, fast data” Implements various CRDTs and gossips changes through the Cluster. CRDTs = Conflict-free Replicated Data Types Data structures that can be concurrently updated and always eventually converge on the same value. doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 85. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski for “small, fast data” Implements various CRDTs and gossips changes through the Cluster. CRDTs = Conflict-free Replicated Data Types Data structures that can be concurrently updated and always eventually converge on the same value. doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 86. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski value = 5 n1: 2 n2: 0 n3: 3 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 5 n1: 2 n2: 0 n3: 3 node-1 node-2 node-3 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 87. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski value = 6 n1: 2+1 n2: 0 n3: 3 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 6 n1: 2 n2: 0 n3: 3+1 node-1 node-2 node-3 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 88. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski node-1 node-2 node-3 value = 7 n1: 2+1 n2: 0 n3: 3+1 Akka Cluster (gossip) GCounter example: value = 5 n1: 2 n2: 0 n3: 3 value = 6 n1: 2 n2: 0 n3: 3+1 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 89. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski node-1 node-2 node-3 value = 7 n1: 2+1 n2: 0 n3: 3+1 Akka Cluster (gossip) GCounter example: value = 7 n1: 2+1 n2: 0 n3: 3+1 value = 7 n1: 2+1 n2: 0 n3: 3+1 doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 90. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski implicit val node = Cluster(system) val replicator = DistributedData(system).replicator val Counter1Key = PNCounterKey("counter1") replicator ! Update(Counter1Key, PNCounter(), WriteLocal)(_ + 1) doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 91. Akka 2.4 Distributed Data (experimental) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Provided data types: • Counters: GCounter, PNCounter • Sets: GSet, ORSet • Maps: ORMap, ORMultiMap, LWWMap, PNCounterMap • Registers: LWWRegister, Flag doc.akka.io/docs/akka/2.4.0-RC1/scala/distributed-data.html
  • 92. Akka Streams & Http Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski 1.0 (experimental) currently. will join the Akka 2.4.x release.
  • 93. Akka Streams & Http (experimental, to eventually join Akka 2.4.x) Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski Akka Streams Asynchronous Back-pressured Stream Processing An implementation of Reactive Streams. Reactive Streams an initiative co-lead by Typesafe, Netflix, Pivotal, RedHat), allowing for inter-op of asynchronous streaming libraries. Akka Http Superseeds Spray.io, the well known high-performance Http serv Fully based on Akka Streams. http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
  • 95. Akka Streams <-> Actors – Advanced val subscriber = ActorSubscriber( system.actorOf(Props[SubStreamParent], ”parent”) ) Source(1 to 100) .map(_.toString) .filter(_.length == 2) .drop(2) .conflate(seed => seed)((acc, i) => acc + i) .groupBy(_.last) .runWith(subscriber) All the usual ops available for Linear Flows. http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala.html
  • 96. Links • akka.io • reactive-streams.org • akka-user • https://www.typesafe.com/subscription • Streams and Http • http://doc.akka.io/docs/akka-stream-and-http- experimental/1.0/scala.html • http://doc.akka.io/docs/akka-stream-and-http- experimental/1.0/java.html • Akka 2.4 RC1 • http://doc.akka.io/docs/akka/2.4.0-RC1/scala.html • http://doc.akka.io/docs/akka/2.4.0-RC1/java.html Akka 2.4 and RP commercial features with Konrad `@ktosopl` Malawski
  • 97. Perhaps you’d also like… WEBINAR Introducing Typesafe ConductR WATCH NOW HAVE QUESTIONS? Get in touch with Typesafe today! CONTACT US ACTIVATOR TEMPLATE Akka Distributed Data Samples (Scala) CHECK IT OUT
  • 98. EXPERT TRAINING Delivered on-site for Akka, Spark, Scala and Play Help is just a click away. Get in touch with Typesafe about our training courses. • Intro Workshop to Apache Spark • Fast Track & Advanced Scala • Fast Track to Akka with Java or Scala • Fast Track to Play with Java or Scala • Advanced Akka with Java or Scala Ask us about local trainings available by 24 Typesafe partners in 14 countries around the world. CONTACT US Learn more about on-site training
  • 99. ©Typesafe 2015 – All Rights Reserved©Typesafe 2015 – All Rights Reserved

Editor's Notes

  1. The company soon to be previously known as Typesafe
  2. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  3. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  4. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  5. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  6. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  7. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  8. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  9. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  10. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  11. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  12. cluster sharding is the actual feature people want - “just balance this stuff on my cluster”. It works by consistent hashing.
  13. ADVANCED TOPIC: Here you can explain that if the actor crashes during processing of the command. The sender would not get the reply back, and IT should retry to send the transaction again afterwards. The PersistentActor should be able to de-duplicate incoming events - this is actually pretty easy, just sequence numbers or some kind of transaction ids.
  14. here we pick the latest snapshot, and then events later than it