RabbitMQ 是一个可靠的、通用的消息代理支持AMQP、MQTT、STOMP等多种协议,可以处理高吞吐量。 RabbitMQ 的一个常见用例是处理后台作业或长时间运行的任务,例如文件扫描 https://www.cloudamqp.com/blog/2019-01-18-softonic-userstory-rabbitmq-eventbased-communication.html、图像缩放或 PDF 转换。 RabbitMQ 还用于微服务之间,作为应用程序之间通信的手段,避免传递消息的瓶颈。
Kafka 是一种优化的消息总线高吞吐量摄取数据流并重播。当您需要移动大量数据、实时处理数据或分析一段时间内的数据时,请使用 Kafka。换句话说,需要收集、存储和处理数据的地方。一个例子是当您想要跟踪网上商店上的用户活动并生成建议的购买商品时。另一个例子是用于跟踪、摄取、记录或安全的数据分析。
卡夫卡可以看作是持久消息代理应用程序可以在其中处理和重新处理磁盘上的流数据。 Kafka 有一个非常简单的路由方法。如果您需要以复杂的方式将消息路由到消费者,RabbitMQ 有更好的选择。如果您需要支持可能离线的批量消费者或需要低延迟消息的消费者,请使用 Kafka。
为了了解如何从Kafka读取数据,我们首先需要了解它的消费者和消费者群体。分区允许您通过将数据拆分到多个节点来并行化主题。分区中的每条记录都通过其唯一的偏移量进行分配和标识。该偏移量指向分区中的记录。在最新版本的 Kafka 中,Kafka 为分区中的每条记录维护一个数字偏移量。 Kafka 中的消费者可以定期自动提交偏移量,也可以选择手动控制此提交位置。 RabbitMQ 将保留有关已消费/已确认/未确认消息的所有状态。我发现 Kafka 比 RabbitMQ 的情况更难理解,在 RabbitMQ 中,消息一旦被确认就会从队列中删除。
RabbitMQ 的队列在空时速度最快,而 Kafka 以很少的开销保留大量数据 - Kafka 专为保存和分发大量消息而设计。 (如果你打算在 RabbitMQ 中排很长的队列,你可以看看惰性队列 https://www.rabbitmq.com/lazy-queues.html.)
Kafka 是从头开始构建的,考虑到了水平扩展(通过添加更多机器进行扩展),而 RabbitMQ 主要是为垂直扩展(通过添加更多功能进行扩展)而设计的。
RabbitMQ 具有内置的用户友好界面,可让您从 Web 浏览器监控和处理 RabbitMQ 服务器。除此之外,还可以处理队列、连接、通道、交换、用户和用户权限 - 在浏览器中创建、删除和列出,您可以监控消息速率并手动发送/接收消息。卡夫卡有很多开源工具,还有一些商业工具 https://medium.com/@giorgosmyrianthous/overview-of-ui-monitoring-tools-for-apache-kafka-clusters-9ca516c165bd,提供管理和监控功能。我想说的是,更好地理解 RabbitMQ 会更容易/更快。
一般来说,如果您想要一个简单/传统的发布-订阅消息代理,那么显而易见的选择是 RabbitMQ,因为它的扩展能力很可能超出您需要的扩展能力。如果我的需求足够简单,可以通过通道/队列处理系统通信,并且不需要保留和流式传输,我会选择 RabbitMQ。
主要有两种情况我会选择RabbitMQ;对于长时间运行的任务,当我需要运行可靠的后台作业时。用于应用程序内部和应用程序之间的通信和集成,即作为微服务之间的中间人;其中系统只需要通知系统的另一部分开始执行任务,例如网上商店中的订单处理(下订单、更新订单状态、发送订单、付款等)。
一般来说,如果您想要一个用于存储、读取(重读)和分析流数据的框架,请使用 Apache Kafka。它非常适合经过审核的系统或需要永久存储消息的系统。这些也可以分为两个主要用例,用于分析数据(跟踪、摄取、日志记录、安全性等)或实时处理。
更多阅读、用例和一些比较数据可以在这里找到:https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html
另外推荐行业论文:《Kafka vs RabbitMQ:两种行业参考发布/订阅实现的比较研究》:http://dl.acm.org/itation.cfm?id=3093908 http://dl.acm.org/citation.cfm?id=3093908
我在一家提供 Apache Kafka 和 RabbitMQ 即服务的公司工作。