消息队列:RabbitMQ、RocketMQ和Kafka

  • 三个作用:解耦、异步化、削峰填谷
  • 异步化的好处:更快返回结果、减少等待,自然实现了步骤间的并发,提升系统总体性能。
  • 解耦说明:生产者不用再一个个通知消费者,而是将消息写入一个主题就行了。以后再增加消费者,生产者也不需要关心。
  • 消息队列可以配合令牌桶算法使用,达到控制流量的目的。

选择消息队列产品的基本标准

  • 必须开源、必须是比较流行且有一定社区活跃度。
  • 必须具备以下几个特性:
  • 消息的可靠性:确保不丢消息。
  • Cluster:支持集群,确保不会因为某个节点宕机而导致服务不可用
  • 性能:具备足够好的性能,能满足绝大多数场景的性能要求。

可供选择的消息队列产品

RabbitMQ

  • 最早是为电信行业系统之间的可靠通信设计的,也是少数几个支持 AMQP 协议的消息队列之一
  • Erlang 语言编写,轻量级。支持非常灵活的路由配置。
  • 生产者和消费者之间有一个Exchange模块,可以配置路由规则将消息分发到不同队列中。
  • 客户端支持的语言大概是最多的。
  • 缺点:
  • 对消息堆积的支持不好,在它的设计理念里,消息队列是一个管道,而不是存储。大量消息积压时会导致性能急剧下降。
  • 性能一般,大概支持几万到十几万QPS。
  • 使用的Erlang语言冷门,并且学习曲线陡峭,导致不容易扩展或者二次开发

RocketMQ

  • 阿里巴巴2012年开源,后来捐赠给Apache软件基金会,2017年成为Apache的顶级项目。
  • 有着不错的性能,稳定性和可靠性。具备一个现代的消息队列应该有的几乎全部的功能和特性。
  • 有非常活跃的中文社区,使用JAVA语言开发,很容易扩展。
  • 对在线业务的响应时延做了很多优化,大多数情况下可以做到毫秒级响应。如果应用场景很在意响应时延,应当选择RocketMQ
  • 支持几十万QPS。
  • 劣势:在国际上还不是特别流行,与周边生态系统的集成和兼容程度要差一些。

Kafka

  • 最早由Linkedin开发,也是Apache顶级项目,最初的设计目的是用于处理海量日志。
  • 在早期版本,为了获得极致性能,做了很多牺牲,比如不保证可靠性,不支持集群等等。
  • 随后几年逐步补齐这些短板,目前已经非常成熟。
  • 与周边的生态系统兼容性是最好的,尤其是在大数据和流计算领域,几乎所有相关的开源软件都会优先支持。
  • 使用Scala和Java开发,大量使用了批量和异步的思想。尤其是异步收发的性能是三者中最好的,但是和RocketMQ并没有数量级上的差距,大约每秒钟可以处理几十万消息。
  • 同步收发响应时延比较高,因为客户端发送一条消息时。kafka不会立马发送出去,而是要等一会攒一批再发。所以当每秒钟消息数量不多时,延迟反而会有点高,所以kafka不太适合在线业务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值