我被要求评估RabbitMQ而不是卡夫卡,但发现很难找到一个比卡夫卡更好的理由。有谁知道在吞吐量,耐用性,延迟或易用性方面是否真的更好?是否有任何理由使用RabbitMQ而非Kafka?
回答
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. C++:是否有任何理由使用uint64_t,而不是size_t
- 2. 是否有任何理由使用SGML而不是XML?
- 3. 是否有任何理由使用Apache HashCodeBuilder而不是Objects.hash?
- 4. 是否有任何理由使用[:over @:?
- 5. 是否有任何理由使用isset()?
- 6. 是否有任何理由使用System.Uri?
- 7. 是否有任何理由使用按钮元素而不是span元素?
- 8. 是否有任何充分的理由使用Json而不是obj for Three.js
- 9. 是否有任何理由在C++ 1z中使用std :: map :: emplace()而不是try_emplace()?
- 10. 是否有任何理由使用这个Regex方法而不是String.IsNullOrEmpty()?
- 11. 是否有任何理由使用CSS阴影而不是阴影?
- 12. 是否有任何理由使用一个DataContext实例,而不是几个?
- 13. 是否有任何理由Object.freeze函数?
- 14. 是否有任何理由在C#中使用私有属性?
- 15. 是否有理由总是使用对象而不是基元?
- 16. 是否有任何理由不使用INLINABLE pragma作为函数?
- 17. 是否有任何理由通过PyMem_Malloc使用malloc?
- 18. 程序员是否有任何理由使用System.in.read()中的char?
- 19. 是否有任何理由不使用Boost :: shared_ptrs?
- 20. 是否有任何理由在JavaScript中使用Object.create()或new?
- 21. 是否有任何理由在Android中使用support.v4库?
- 22. 是否有任何理由在vb6中使用DHTML或IIS?
- 23. 是否有任何理由对群集使用锁文件?
- 24. 是否有任何理由使用self关键字?
- 25. 是否有任何理由在'.class'上使用selector'* .class'?
- 26. 是否有任何理由通过fgets + sscanf使用scanf或fscanf
- 27. 是否有任何理由使用jpg文件扩展名?
- 28. 是否有任何理由不使用resource.getInputStream()?
- 29. 是否有任何理由在VBA中使用ENUM?
- 30. 是否有任何理由使用threading.Lock over multiprocessing.Lock?
一件事要考虑的是,在Java之外的本地(比如捆绑并正式支持)向kafka说话非常困难。 RabbitMQ似乎还有其他官方支持的语言。 – Guillaume
主要基于观点,许多优秀的问题根据专家的经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实,参考或具体的专业知识。 – VedX
@Guillaume这不一定是真的。有许多用于Kafka的语言的客户端:https://cwiki.apache.org/confluence/display/KAFKA/Clients此外,Confluent还提供许多其他语言的高性能开源Kafka客户端。查看“Confluent Open Source”优惠:https://www.confluent.io/product/compare/ –