What's the difference between Akka.NET, Kafka, RabbitMQ, and other message-driven technologies? Can they work together?
A while back I created a thread on Twitter to attempt to explain the difference between Akka.NET and some other popular message-distribution and queuing technologies, such as Apache Kafka and RabbitMQ.
Common question I get from users who are just starting to look at @AkkaDotNET : why use something like Akka .NET and not Kafka / RabbitMQ? What's the differences between these two pieces of technology? Can they be used together? Or are they competing technologies?— Aaron Stannard (@Aaronontheweb) January 29, 2019
I’m going to cover that in some more detail in this post because it’s a common question asked by many developers who are just starting to look into Akka.NET.
Differences between Akka.NET, Kafka, RabbitMQ, and Other Messaging Systems
Message brokers, enterprise message buses, message queues, event hubs, and so on - for the sake of simplicity, which I’m certain will enrage developers in some corners of the Internet, I’m going to lump these technologies together into a single category: these are message distribution systems.
The manner in which they distribute messages varies and for our purposes those differences are totally immaterial (sorry, vendors.) The point is: producers write messages into these systems and the goal is, with varying degrees of reliability, concurrency, and asynchrony, to distribute these messages for processing to one or more downstream consumers.
Message distribution systems are transports - they aren’t involved in the act of creating or consuming messages. Only in delivering and routing these messages from their sources and to their destinations.
Where Akka.NET differs: Akka.NET actors are fundamentally message processing and message producing technologies.
Akka.NET actors are responsible for managing business state or executing commands, both of which occur when an actor receives a message.
Where the confusion occurs, however,...