繁体   English   中英

RabbitMQ 和 kafka 有什么区别?

[英]What's the difference between RabbitMQ and kafka?

在不同的情况下哪个会更好?

我知道 RabbitMQ 是基于 AMQP 协议的,并且为开发者提供了可视化。

正如您所指出的,RabbitMQ 是 AMQP 的一种实现。 AMQP 是一种起源于金融行业的消息传递协议。 它的核心隐喻是消息、交换和队列。

Kafka 被设计为一个日志结构的分布式数据存储。 它具有使其适合用作消息传递系统的一部分的功能,但它也可以适应其他用例,例如流处理。 它起源于 LinkedIn,其核心隐喻是消息、主题和分区。

主观上,我发现 RabbitMQ 使用起来更愉快:它基于 Web 的管理工具很好; 在创建、删除和配置队列和交换方面几乎没有摩擦。 许多语言的库支持都很好。 在其默认配置中,Rabbit 仅将消息存储在内存中,延迟很低。

Kafka 更年轻,工具感觉更笨重,并且它对非 JVM 语言的支持相对较差,尽管这正在变得更好。 另一方面,它在面对网络分区和broker丢失时有更强的保证,并且由于它被设计为尽快将消息移动到磁盘,它可以在典型的部署中容纳更大的数据集。 (Rabbit 可以将消息分页到磁盘,但有时性能不佳)。

在任何一种情况下,您都可以设计直接(一:一)、扇出(一:多)和发布-订阅(多:多)通信模式。

如果我正在构建一个需要缓冲大量传入数据并具有强大持久性保证的系统,我肯定会选择 Kafka。 如果我正在使用 JVM 语言或需要对数据进行一些流处理,那只会加强选择。

另一方面,如果我有一个用例,我重视延迟而不是吞吐量,并且可以处理瞬态消息的丢失,我会选择 Rabbit。

卡夫卡:

  • 消息将永远存在。 您可以通过指定消息保留策略来管理它。
  • 它是分布式事件流平台。
  • 我们可以将其用作日志
  • Kafka 流式传输,您可以自动更改和处理消息。
  • 我们不能设置消息优先级
  • 仅在分区内保持顺序。 在一个分区中,Kafka 保证整批消息要么失败,要么通过。
  • 像 RMQ(Scala 和 Java)这样的成熟平台并不多

兔MQ:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM