本节开始将和大家一起学习消息队列的相关知识点,最近参加了字节的青训营,其中涉及到中间件的设计,这部分需要设计到消息队列的选型,所以本节主要向大家介绍一些主流的消息队列,同时分析他们的利弊帮助大家在设计的时候根据业务场景选出更合适的消息队列。
我们需要记住消息队列的衡量指标有三:服务性能、数据存储、集群架构
ActiveMQ
第一个登场的是ActiveMQ,他是Apache出品比较流行的开源消息队列总线,是一个完全支持JMS规范的消息中间件,他的优点在于丰富的API,所以他在中小型企业中的应用非常广泛,ActiveMQ的集群架构图如下:
Kafka
第二种是大家最熟悉的Kafka,他是开源的发布订阅模式的消息队列,主要的特点是基于Pull的模式处理消息消费,追求高吞吐,最初的目的是收集日志和传输,最初的版本中不支持事务,同时对于消息的重复、丢失、错误没有严格的要求,适合高吞吐的互联网服务手机业务。
RocketMQ
RocketMQ是阿里开源的消息队列,是Java开发具备高吞吐、高可用性,适合大规模分布式系统应用的特点,RocketMQ借鉴了Kafka设计的,其中最初同样使用了zookeeper来管理集权,但是后续根据自己的方式由name server来管理集群,对于消息的可靠传输和事务都做了优化,广泛应用于交易,流计算,消息推送,日志流处理,binglog分发等场景,缺点是商业版收费。
RabbitMQ
最后和大家介绍的是选择的RabbitMQ,是使用Erlang语言开发的开源消息队列,基于AMQP协议实现,主要特点是面向消息、路由、队列、可靠性、安全,比较适合在对数据一致性要求比较高、稳定性高、可靠性高,但是性能和吞吐其次的场景中使用。