Picking Messaging Systems
In order to build complex distributed systems, one needs to figure out how to deliver messages from point one-one or one-many scenarios.
Obviously there are so many messaging systems and vendors out there. Ones I have used are Kafaka, Kinesis and RabbitMQ. It is important to understand difference between message brokers(RabbitMQ for peer-peer messaging) Vs Kafka/Kinesis type realtime streaming systems which work on publish-subscribe model.
Apart from making sure these are high performing and highly available, it is also important to understand what are the use cases in the system you are building and use accordingly...In lot of existing systems, these choice have been made, so it could come down to how to migrate existing messaging services to one of these. If you are building new system from scratch, you may want to consider hosted cloud services like Apache Kinesis(if you don't want to get into hosting/managing systems..Obviously it all depends upon tech strategy for your business case(considering short/long term cost etc).
Following are some good articles
https://content.pivotal.io/blog/understanding-when-to-use-rabbitmq-or-apache-kafka
Using Spring and RabbitMQ.
https://spring.io/guides/gs/messaging-rabbitmq/
Kafka Use Cases
https://kafka.apache.org/uses
Amazon Kinesis
https://aws.amazon.com/kinesis/
If you are considering, whether to choose kafka or kinesis, you might want to read following article.
https://medium.com/aws-activate-startup-blog/the-tale-of-two-messaging-platforms-apache-kafka-and-amazon-kinesis-654963bdbf35
you can learn more,