RabbitMQ是一个坚实的通用目的 的 消息经纪人 强> 它支持多种协议,如AMQP,MQTT,STOMP等。它可以处理高吞吐量和常见用例,因为它可以处理后台作业或作为微服务之间的消息代理。 Kafka是一个优化的消息总线 的 高入口数据流 强> 并重播。
卡夫卡可以被视为一个 的 持久的消息经纪人 强> 应用程序可以在磁盘上处理和重新处理流数据。 Kafka有一种非常简单的路由方法。如果您需要以复杂的方式将消息路由到您的消费者,RabbitMQ有更好的选择。如果您需要支持可能处于脱机状态的批量消费者,或者需要支持低延迟消息的消费者,请使用Kafka
RabbitMQ将保留关于消费/已确认/未确认消息的所有状态,而Kafka则不会,它假设消费者记录已消费的内容。 RabbitMQ的队列在空闲时排队最快,而Kafka保留大量数据且开销很小--Kafka用于保存和分发大量消息。 (如果你计划在RabbitMQ中拥有很长的队列,你可以看看 懒惰的队列 。)
Kafka是从头开始构建的,同时考虑到水平缩放(通过添加更多机器进行扩展) RabbitMQ主要用于垂直缩放(通过增加更多功率来扩展)。
RabbitMQ具有用户友好的界面,可让您从Web浏览器监控和处理RabbitMQ服务器。除此之外,还可以处理队列,连接,通道,交换,用户和用户权限 - 在浏览器中创建,删除和列出,您可以手动监控消息速率和发送/接收消息。 Kafka经理尚未像RabbitMQ Management界面那样发达。我会说,对RabbitMQ有一个很好的了解会更容易/更快。
更多阅读和一些比较数据可以在这里找到: https://www.cloudkarafka.com/blog/2016-12-05-apachekafka-vs-rabbitmq.html
同时推荐行业论文:“Kafka与RabbitMQ:两个行业参考发布/订阅实施的比较研究”: http://dl.acm.org/citation.cfm?id=3093908
我在一家提供Apache Kafka和RabbitMQ即服务的公司工作。
我能想到的唯一好处是交易功能,休息都可以通过使用Kafka来完成
我每周都会听到这个问题......虽然RabbitMQ(如IBM MQ或JMS或其他一般的消息传递解决方案)用于传统消息传递,但Apache Kafka被用作流媒体平台(消息传递+分布式存储+数据处理)。两者都是针对不同的用例而构建的。
您可以将Kafka用于“传统消息传递”,但不能将MQ用于特定于Kafka的方案。
文章“浅r 的 Apache Kafka vs.企业服务总线(ESB) - r r riends,Enemies还是Frenemies? 强> ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ )讨论了为什么Kafka没有竞争力但是对集成和消息传递解决方案(包括RabbitMQ)的补充以及如何集成两者。