  Distributed messaging systems form the core of big data streaming, cloud
native applications and microservice architecture. With real-time critical
applications there is a growing need for well-built messaging platform that is
scalable, fault tolerant and has low latency. There are multiple modern
messaging systems that have come up in the recent past, all with their own pros
and cons. This has become problematic for the industry to decide which
messaging system is the most suitable for a specific application. An in-depth
study is required to decide which features of a messaging system meet the needs
of the application. This survey paper outlines the modern messaging
technologies and delves deep on three popular publisher/subscriber systems-
Apache Kafka, RabbitMQ and NATS Streaming. The paper provides information about
messaging systems, the use cases, similarities and differences of features to
facilitate users to make an informed decision and also pave way for future
research and development.
