Kafka 与 Rabbitmq 的优缺点

Pros and Cons of Kafka vs Rabbit MQ

Kafka 和 RabbitMQ 是众所周知的消息代理。我想用 Spring Boot 构建一个微服务,似乎 Spring Cloud 为他们提供了开箱即用的解决方案作为事实上的选择。我知道一些 RabbitMQ 的 trayectory,它有很多支持。 Kafka属于Apache所以应该不错。那么 RabbitMQ 和 Kafka 之间的主要目标区别是什么?考虑到这将与 Spring Cloud 一起使用。请分享您的经验和标准。提前致谢。

我当然不会认为 Kafka 是轻量级的。 Kafka 依赖于 ZooKeeper,因此您也需要将 ZooKeeper 放入堆栈。

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

三个应用级别的区别是:

  1. Kafka支持重读消费消息,而rabbitMQ 不是。

  2. Kafka支持分区消息排序,rabbitMQ 支持它有一些约束,例如一个交换路由 到队列,一个队列,一个消费者排队。

  3. Kafka发布数据到分区比rabbitMQ快

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

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

首先,Kafka 比 RabbitMQ 做的更多。 Message broker 只是 Kafka 的一个子集,但 Kafka 还可以充当 Message 存储和 Stream 处理。仅比较消息代理部分,Kafka 再次比 RabbitMQ 更健壮,因为它支持复制(为了可用性)和分区(为了可伸缩性)、消息重放(如果需要重新处理)并且它是基于拉的。 RabbitMQ 可以通过为给定队列使用多个消费者来扩展,但同样它是基于推送的,并且您会失去多个消费者之间的排序。

这完全取决于用例,您的问题没有提供用例和性能要求来推荐一个。

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

  • Kafka 消费者从代理中提取消息,允许在保留期限内缓冲消息。虽然在大多数 JMS 系统中,消息被推送给消费者,这使得 back-pressure 这样的策略更难实现。
  • Kafka 还通过将事件存储在磁盘上来简化事件的替换,因此可以随时替换它们。
  • Kafka 保证分区内消息的顺序。
  • Kafka 总体上为构建可扩展的 fault-tolerant 系统提供了一种简单的方法。
  • Kafka 要求比 JMS 系统更复杂、更难理解。