Difference in message-passing model of Akka and Vert.x

Am a Scala programmer and understand Akka from a developer point of view. I have not looked into Akka library's code. Have read about the two types of actors in the Akka model - thread-based and event-based - but not having run Akka at large scale I dont have experience of configuring Akka for production. And am completely new to Vert.x. So, from the choices perspective to build a reactive application stack I want to know -

  1. Is the message-passing model of Akka and Vert.x very different? How?
  2. Are the data-structures behind Akka's actors and Vert.x's verticles to buffer messages very different?

In a superficial view they're really similar, although I personally consider more similar Vert.x ideas to some MQ system than to Akka... the Vert.x topology is more flat: A verticle share a message with other verticle and receive a response... instead Akka is more like a tree, where you've several actors, but you can supervise actors using other actor,..for simple projects maybe they're not so big deal, but for big projects you could appreciate a more "hierarchic system"...

Vert.x on the other hand, offer a better Interoperability between very popular languages*. For me that is a big point, where you would need to mix actors with a MQ system and dealing with more complexity, Vert.x makes it simple and elegant..so the answer, which is better?...depend, if your system will be constructed only over Scala, then Akka could be the best way...if you need communication with JavaScript, Ruby, Python, Java, etc... and don't need a complex hierarchy, then Vert.x is the way to go..

*(using JSON, which could be an advantage or disadvantage compared to)

Also you must consider that Vert.x is a full solution, TCP, HTTP server, routing, even WebSocket!!! That is pretty amazing because they offer a full stack and the API is very clean. If you choose Akka you would need use a framework like Play, Xitrum Ospray. Personally I don't like any of them.

Also remember that Vert.x is a not opinionated platform, you can use Akka or Kafka with it, for example, without almost any overhead. The way how every part of the system is decouple inside a verticle makes it so simple.

Vert.x is a big project with an amazing perspective but really new, if you need a solution now maybe it would not be the better option, fortunately you can learn both and use both in the same project.


After doing a bit of google search I have figured that at detailed comparison of Akka vs Vert.x has not yet been done ( atleast I cound't find it ).

Computation model:

  • Vert.x is based on Event Driven model.
  • Akka is based on Actor Model of concurrency,

Reactive Streams:

  • Vert.x has Reactive Streams builtin
  • Akka supports Reactive Streams via Akka Streaming. Akka has stream operators ( via Scala DSL ) that is very concise and clean.

HTTP Support

  • Vert.x has builtin support of creating network services ( HTTP, TCP etc )
  • Akka has Akka HTTP for that

Scala support

  • Vert.x is written in Java
  • Akka is written in Scala and its fun to work on

Remote services

  • Vert.x supports services, so we need to explicitly create services
  • Akka has Actors which can be deployed anywhere on the network, with support for clustering, replication, load-balancing, supervision etc.

References:

  • https://groups.google.com/forum/#!topic/vertx/ppSKmBoOAoQ
  • https://blog.openshift.com/building-distributed-and-event-driven-applications-in-java-or-scala-with-akka-on-openshift/
  • https://en.wikipedia.org/wiki/Vert.x
  • http://akka.io/