RabbitMQ和Kafka有什么区别?

e5nszbig  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(190)

在不同的情景下,哪一种更公平?
我知道RabbitMQ是基于AMQP协议的,并且对开发人员具有可视化。

vx6bjr1n

vx6bjr1n1#

RabbitMQ是AMQP的一个实现,AMQP是一个起源于金融行业的消息传递协议,它的核心隐喻是消息、交换和队列。
Kafka被设计成一个日志结构的分布式数据库,它的特性使它适合作为消息系统的一部分,但它也可以适应其他用例,如流处理。它起源于LinkedIn,其核心隐喻是消息、主题和分区。
主观上,我觉得RabbitMQ更易于使用:它基于网络的管理工具很好;在创建、删除和配置队列和交换时几乎没有冲突。2库支持在许多语言中都很好。3因为在它的默认配置中Rabbit只在内存中存储消息,所以延迟很低。
Kafka更年轻,工具感觉更笨重,而且它在非JVM语言中的支持相对较差,尽管这一点正在变得更好。另一方面,它在面对网络分区和代理丢失时有更强的保证,而且由于它的设计是为了尽快将消息移动到磁盘,它可以在典型的部署中容纳更大的数据集。(Rabbit可以将消息分页到磁盘,但有时它的性能并不好)。
在这两种模式中,您都可以设计直接(一对一)、扇出(一对多)和发布-订阅(多对多)通信模式。
如果我正在构建一个需要缓冲大量传入数据并具有强大持久性保证的系统,我肯定会选择Kafka。如果我正在使用JVM语言或需要对数据进行一些流处理,这只会加强我的选择。
另一方面,如果我有一个用例,其中我重视延迟而不是吞吐量,并且可以处理瞬时消息的丢失,那么我会选择Rabbit。

vfhzx4xs

vfhzx4xs2#

Kafka:

  • 邮件将始终保留在那里。您可以通过指定邮件保留策略来管理这一点。
  • 它是一个分布式事件流平台。
  • 我们可以把它当作日志
  • Kafka流,你可以改变和处理自动消息。
  • 无法设置消息优先级
  • 在一个分区中,Kafka保证整批消息要么失败要么通过。
  • 像RMQ(Scala和Java)这样的成熟平台不多

兔子MQ:

  • RabbitMQ是一个队列系统,因此消息在使用后立即被删除。
  • 它是由消息代理分发的。
  • 不能这样使用
  • RMQ中不支持流
  • 我们可以设置消息的优先级,并可以在此基础上进行消费。
  • 不支持保证自动性,即使与涉及单个队列的事务相关。
  • 成熟的平台(与所有语言都有最佳的兼容性)

相关问题