0
点赞
收藏
分享

微信扫一扫

RabbitMQ与Kafka之间的差异

菜菜捞捞 2021-09-19 阅读 68

虽然在以往的项目开发过程中已经使用过RabbitMQ与Kafka,但还是不能准确并全面的总结出它们俩之间的差异。

在这之前很长一段时间一直都是把这两种技术当做等价的来看待,突然想到如果是我在某种特定业务下来做选型的话,我要怎么选呢?万一选错了,对于软件开发和后期的维护都会造成严重的影响。

所谓学而时习之,不亦说乎。温故而知新,可以为师矣。所以通过官网和参考了一些博客,做了以下整理:

宏观的差异,RabbitMQ与Kafka只是功能类似,并不是同类

RabbitMQ是消息中间件,Kafka是分布式流式系统。

RabbitMQ

被概括为“开源分布式消息代理”,用Erlang编写,有助于在复杂的路由方案中有效地传递消息,可以通过服务器上启用的插件进行扩展,高可用(队列可以在集群中的机器上进行镜像)

有队列

RabbitMQ的发布/订阅模式

Apache Kafka

被描述为“分布式事件流平台”,用Scala和Java编写,促进了原始吞吐量,基于“分布式仅追加日志”的思想,该消息将消息写入持久化到磁盘的日志末尾,客户端可以选择从该日志开始读取的位置,高可用(Kafka群集可以在多个服务器之间分布和群集)

无队列,按主题存储

Kafka的发布/订阅模式

微观差异,类似功能的不同特点

Kafka支持消息有序性,RabbitMQ不保证消息的顺序

RabbitMQ

Kafka

在消息路由和过滤方面,RabbitMQ提供了更好的支持

RabbitMQ

Kafka

消息时序

RabbitMQ

Kafka

Kafka支持消息留存,RabbitMQ不支持

RabbitMQ

Kafka

RabbitMQ的容错处理优于Kafka

RabbitMQ

Kafka

如果消费者阻塞在重试一个消息上,那么底部分区的消息就不会被处理

Kafka在伸缩方面更优并且能够获得比RabbitMQ更高的吞吐量

RabbitMQ

Kafka

RabbitMQ的消费者复杂度低于Kafka

RabbitMQ

Kafka

结论

首先是在不考虑一些非功能性限制(如运营成本,开发人员对两个平台的了解等)的情况下:

优先选择RabbitMQ的条件

  • 高级灵活的路由规则。
  • 消息时序控制(控制消息过期或者消息延迟)。
  • 高级的容错处理能力,在消费者更有可能处理消息不成功的情景中(瞬时或者持久)。
  • 更简单的消费者实现。

优先选择Kafka的条件

  • 严格的消息顺序。
  • 延长消息留存时间,包括过去消息重放的可能。
  • 传统解决方案无法满足的高伸缩能力。
举报

相关推荐

0 条评论