【问题标题】:Pros and Cons of Kafka vs Rabbit MQKafka 与 Rabbitmq 的优缺点
【发布时间】:2017-04-29 06:00:25
【问题描述】:
Kafka 和 RabbitMQ 是众所周知的消息代理。我想用 Spring Boot 构建一个微服务,Spring Cloud 似乎为他们提供了开箱即用的解决方案作为事实上的选择。我知道一些 RabbitMQ 的托盘目录,它有很多支持。 Kafka 属于 Apache,所以应该不错。那么 RabbitMQ 和 Kafka 的主要目标区别是什么?考虑到这将与 Spring Cloud 一起使用。请分享您的经验和标准。提前致谢。
【问题讨论】:
标签:
rabbitmq
apache-kafka
messagebroker
spring-rabbit
spring-cloud-stream
【解决方案1】:
我当然不会认为 Kafka 是轻量级的。 Kafka 依赖于 ZooKeeper,因此您也需要将 ZooKeeper 扔到您的堆栈中。
Kafka 是 pubsub,但您可以重新阅读消息。如果您需要处理大量数据,Kafka 的性能要好得多,并且它与其他大数据工具的协同作用要好得多。它专门针对大数据。
【解决方案2】:
三个应用级别的区别是:
Kafka 支持重读消费消息,而 rabbitMQ
不是。
Kafka 支持分区中的消息排序,而 rabbitMQ
通过一些约束来支持它,例如一个交换路由
到队列,一个队列,一个消费者队列。
- Kafka 用于将数据发布到分区的速度比 rabbitMQ 快。
【解决方案3】:
Kafka 不仅仅是一个发布/订阅消息传递平台。它还包括用于数据集成 (Kafka Connect) 和流处理 (Kafka Streams) 的 API。与仅使用较低级别的发布/订阅消息传递 API 相比,这些更高级别的 API 使开发人员的工作效率更高。
另外,Kafka 刚刚在 2017 年 6 月添加了 Exactly Once Semantics,这是另一个差异化因素。
【解决方案4】:
从 Kafka 开始,比 RabbitMQ 做得更多。消息代理只是 Kafka 的一个子集,但 Kafka 还可以充当消息存储和流处理。仅比较消息代理部分,Kafka 再次比 RabbitMQ 更健壮,因为它支持复制(可用性)和分区(可伸缩性)、消息重播(如果需要重新处理)并且它是基于拉的。 RabbitMQ 可以通过为给定队列使用多个消费者来进行扩展,但同样它是基于推送的,并且您会丢失多个消费者之间的排序。
这完全取决于用例,您的问题并未提供用例和性能要求来推荐一个。
【解决方案5】:
我在这个 youtube 视频 Apache Kafka Explained (Comprehensive Overview) 中找到了一个很好的答案。
它基本上说明了 Kafka 与标准 JMS 系统(如 RabbitMQ 或 ActiveMQ)之间的区别
- Kafka 消费者从代理中提取消息,这允许在保留期限保持期间缓冲消息。而在大多数 JMS 系统中,消息被推送给消费者,这使得像 back-pressure 这样的策略更难实现。
- Kafka 还通过将事件存储在磁盘上来简化事件的替换,因此可以随时替换它们。
- Kafka 保证分区内消息的顺序。
- Kafka 总体上为构建可扩展和容错系统提供了一种简单的方法。
- Kafka 要求比 JMS 系统更复杂,更难理解。