2017-02-10 38 views
33

我被要求评估RabbitMQ而不是卡夫卡,但发现很难找到一个比卡夫卡更好的理由。有谁知道在吞吐量,耐用性,延迟或易用性方面是否真的更好?是否有任何理由使用RabbitMQ而非Kafka?

+0

一件事要考虑的是,在Java之外的本地(比如捆绑并正式支持)向kafka说话非常困难。 RabbitMQ似乎还有其他官方支持的语言。 – Guillaume

+0

主要基于观点,许多优秀的问题根据专家的经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实,参考或具体的专业知识。 – VedX

+0

@Guillaume这不一定是真的。有许多用于Kafka的语言的客户端:https://cwiki.apache.org/confluence/display/KAFKA/Clients此外,Confluent还提供许多其他语言的高性能开源Kafka客户端。查看“Confluent Open Source”优惠:https://www.confluent.io/product/compare/ –

回答

66

RabbitMQ的是固体时,通用,支持多种协议,如AMQP,MQTT,STOMP等,它可以处理高通量和常见的用例为它是处理后台作业或之间消息代理消息代理微服务。 Kafka是针对高入口数据流而优化的消息总线并重播。

可以将卡夫卡视为持久消息代理,其中应用程序可以处理和重新处理磁盘上的流式数据。卡夫卡有一个非常简单的路由方法。如果您需要以复杂的方式将消息发送给消费者,RabbitMQ有更好的选择。如果您需要支持可能处于脱机状态的批量使用者或需要低延迟消息的使用者,请使用Kafka。

RabbitMQ将保留有关消费/确认/未确认消息的所有状态,而Kafka则不会,它假定消费者保持跟踪已消费的消息。 RabbitMQ的队列空闲时速度最快,而Kafka保留大量数据并且开销很小 - 卡夫卡用于保存和分发大量消息。 (如果您计划在RabbitMQ中排队很长,您可以看看lazy queues。)

Kafka是从头开始考虑水平缩放,而 RabbitMQ主要是为垂直缩放设计的。

RabbitMQ有一个用户友好的界面,可以让您从网络浏览器监控并处理您的RabbitMQ服务器。除此之外,队列,连接,通道,交换,用户和用户权限可以被处理 - 创建,删除并在浏览器中列出,您可以手动监控消息速率和发送/接收消息。 Kafka经理还没有像RabbitMQ Management界面那样发达。我会说,对RabbitMQ有更好的理解会更容易/更快速。

更多的阅读和一些对比数据可以在这里找到:https://www.cloudkarafka.com/blog/2016-12-05-apachekafka-vs-rabbitmq.html

还建议行业纸:“卡夫卡与RabbitMQ的:两个行业基准的比较研究发布/订阅的实现”:http://dl.acm.org/citation.cfm?id=3093908

+1

“高入门”是什么意思? –

+2

在这种情况下,我想是'高吞吐量'。 – lawphotog

+3

高入口=高吞吐量摄取 – jbustamovej

相关问题