RabbitMQ:采用Erlang语言实现的AMQP协议的消息中间件,最初起源于金融系统,用于在分布式系统中存储转发消息,它在可靠性、可用性、扩展性、功能丰富等方面表现良好
Kafka:采用Scala语言开发的一个分布式、多分区、多副本且基于zookeeper协调的分布式消息系统,它是一种高吞吐量的分布式发布订阅消息系统,以可水平扩展和高吞吐率而被广泛使用
RocketMQ:是阿里开源的消息中间件,它是由Java语言开发的,具备高吞吐量、高可用性、适合大规模分布式系统应用等特点
消息选型因素:
功能维度:优先级队列、延迟队列、重试队列、消费模式、消息堆积+持久化、消息过滤、跨语言支持等,功能维度是消息中间件选型中的一个重要的参考维度
性能:消息中间件的性能一般是指其吞吐量,虽然从功能维度上来说RabbitMQ的优势要大于Kafka,但是Kafka的吞吐量要比RabbitMQ高,一般RabbitMQ的单机QPS在万级别之内,而Kafka的单机QPS可以维持在十万级别
可靠性+可用性:消息丢失是使用消息中间件时所不得不面对的一个同点,其背后消息可靠性也是衡量消息中间件好坏的一个关键因素,对于Kafka而言,其采用的是类似PacificA的一致性协议,通过ISR来保证多副本之间的同步,并且支持强一致性语义,RabbitMQ是通过镜像环形队列实现多副本及强一致性语义的,多副本可以保证在master节点宕机异常之后可以提升slave作为新的master而继续提供服务来保障可用性