Kafka与Rabbit MQ的利弊

时间:2016-12-14 01:55:03

标签: rabbitmq apache-kafka messagebroker spring-rabbit spring-cloud-stream

Kafka和RabbitMQ是众所周知的消息经纪人。我想用Spring Boot构建一个微服务,看起来Spring Cloud为它们提供了现成的解决方案作为事实上的选择。我知道RabbitMQ的一些托盘,它有很多支持。 Kafka属于Apache,所以它应该是好的。那么RabbitMQ和Kafka之间的主要目标差异是什么?考虑到这将与Spring Cloud一起使用。请分享您的经验和标准。提前谢谢。

5 个答案:

答案 0 :(得分:4)

我当然不认为Kafka是轻量级的。 Kafka依赖于ZooKeeper,所以你也需要将ZooKeeper扔到你的堆栈中。

Kafka是pubsub但您可以重新阅读消息。如果您需要处理大量数据,Kafka的表现要好得多,并且与其他大数据工具的协同作用要好得多。它专门针对大数据。

答案 1 :(得分:1)

三个应用程序级别的区别是:

  1. Kafka支持在RabbitMQ时重读消耗的消息 不

  2. Kafka支持在RabbitMQ中对分区中的消息进行排序 支持它有一些约束,如一个交换路由 到队列,一个队列,一个消费者要排队。

  3. Kafka用于快速发布数据以进行分区而不是rabbitMQ。

答案 2 :(得分:1)

Kafka不仅仅是一个发布/订阅消息传递平台。它还包括用于数据集成(Kafka Connect)和流处理(Kafka Streams)的API。与仅使用较低级别的发布/订阅消息传递API相比,这些更高级别的API使开发人员的工作效率更高。

Kafka刚刚在2017年6月添加了Exactly Once Semantics,这是另一个差异化因素。

答案 3 :(得分:0)

从Kafka入手要比RabbitMQ做得更多。消息代理只是Kafka的一个子集,但Kafka也可以充当消息存储和流处理。仅比较消息代理部分,Kafka再次比RabbitMQ健壮,因为它支持复制(用于可用性)和分区(用于可伸缩性),消息重放(如果需要重新处理)并且基于Pull。 RabbitMQ可以通过在给定队列中使用多个使用者来进行扩展,但是同样基于推送,您会失去多个使用者之间的顺序。

这一切都取决于用例,您的问题没有提供用例和性能要求,无法一一提出。

答案 4 :(得分:0)

我在这个youtube视频Apache Kafka Explained (Comprehensive Overview)中找到了一个不错的答案。 基本上说,Kafka与标准JMS系统(例如RabbitMQ或ActiveMQ)之间的区别在于

  • Kafka使用者从代理中提取消息,这样就可以在保留期限内对消息进行缓冲。尽管在大多数JMS系统中,消息都是被发送给消费者的,这使得诸如back-pressure之类的策略难以实现。
  • Kafka还通过将事件存储在磁盘上来简化事件的替换,因此可以随时替换它们。
  • Kafka保证分区内消息的顺序。
  • Kafka总体而言为构建可扩展且容错的系统提供了简便的方法。
  • 与JMS系统相比,Kafka所需的条件更加复杂且难以理解。