ActiveMQ、Apollo和Kafka之间的区别

70

我之前没有与*MQ打过交道,现在希望了解JMS和消息队列等相关知识。因此,我想知道是否应该从ActiveMQ开始学习,还是干脆“忽略”它,直接自学Apollo。Apollo是否像ActiveMQ一样功能齐全?它是否实现了JMS 2.0(我看到ActiveMQ卡在了1.1上)?我会错过一些非常重要的东西吗?

另外,Kafka与这两个解决方案相比如何?


3
请查看新的ActiveMQ Artemis: https://activemq.apache.org/artemis/ - mjn
4个回答

106

Apache ActiveMQ 是一个功能齐全的强力工具,虽然不是最快的消息队列软件,但对于大多数用例来说已足够快。它具有灵活的群集、故障转移、与不同应用服务器的集成、安全等特性。

Apache Apollo 旨在编写一个新的核心来处理大量客户端和消息,它不具备 ActiveMQ 所有方便的功能但可以更好地扩展。当你给它一个大型多核服务器和数千个并发连接时,Apache Apollo 是一种非常快速的消息队列实现。它有一个简单漂亮的界面,但不是“一刀切”的解决方案。

似乎正在尝试将一些 ActiveMQ 特性与 HornetQ 合并为 ActiveMQ Artemis。HornetQ 具有 JMS2.0 支持,因此我的猜测是它可能出现在 ActiveMQ 6.x 中。

JIRA, Github

Kafka 是一个不同的系统。它是一个非常简单的消息代理,旨在通过多台服务器快速扩展持久发布订阅(主题)。对于中小型部署,Kafka 可能不是最佳选择。它有自己的方式来实现高吞吐量,因此你必须在灵活性方面做出很多让步才能获得高分布式吞吐量。如果您对消息队列和代理领域不熟悉,我猜 Kafka 会显得有些“太过”的。另一方面,如果您拥有一个相当大的服务器集群,并且想知道如何尽可能推送更多的消息,则可以试试 Kafka!


谢谢!我想在我的情况下,Apache Apollo是正确的选择。 - Martin
如果我(部分地)理解ActiveMQ与Apollo的关系(基于以前的经验等),那么Artemis的一般愿景(目标,动机)是什么? - Jacek Cz
13
阿波罗在某种程度上未能成为 AMQ 的新非阻塞核心,因为缺乏专注于该工作的 Scala 程序员。据我所见,Artemis 的愿景是做到阿波罗未能做到的。使用一个经过实战检验的产品(HornetQ),用一种主流语言(Java)编写,可能会更有机会成功,而不是从头开始编写。两者的目标都是支持 IoT 和移动应用等新需求的非阻塞 ActiveMQ。 - Petter Nordlander

29

这是一个较早的问题,但我会在此提供一个更现代的答案。

  • Apollo项目已非官方支持,他们建议使用Artemis作为新的选择。(链接) Apollo项目的开发似乎已经停滞不前,这不会让人对Artemis的未来感到有信心。
  • 我的经验与Petter的回答类似,ActiveMQ功能丰富且功能强大。但是,每个版本发布后修复随机崩溃和内存泄漏的问题,这不能让人放心。虽然我的项目(使用集群)很稳定,但在过去的十几个版本中,我们在代理中看到了奇怪的行为和崩溃(目前使用5.14.3)。
  • 我没有使用RabbitMQ(我的当前项目已经使用了ActiveMQ),但我将在下一个需要消息总线的项目中尝试使用它。不必支持所有功能可能意味着它更加稳定。

编辑:Apache Artemis 2.3.0发布于2017年9月5日左右。因此,目前它似乎正在进展中。(链接)但仍然需要注意变更日志。


2
就目前而言,ActiveMQ Artemis的开发活跃度比Apollo要高得多。事实上,根据GitHub的数据,Artemis的贡献者数量已经超过了ActiveMQ本身。此外,Artemis已经作为Red Hat JBoss AMQ 7的一部分进行商业化。 - Justin Bertram

5
Apache Kafka 可以被描述为一个"分布式流媒体平台",而 ActiveMQ,作为一种面向消息的中间件(MOM),是一个"通用目的的消息代理"

Kafka 只做一件事,并且做得非常好:在发布/订阅(pub/sub)架构中,消息被写入主题(由分区分布的日志),然后由消费者按偏移量进行消耗。Kafka 是 为云构建的,并且专注于高吞吐量,这些天成为异步消息传递的首选。

ActiveMQ 支持发布/订阅点对点语义。在后者中,队列处理单个生产者和特定消费者之间的单个消息。这与发布/订阅类似,但工作方式略有不同:如果消费者在队列上接收到消息但未确认,则该消息将发送给另一个消费者。ActiveMQ 还支持多种消息协议,包括 AMQP、STOMP、JMS、CAMEL 和 MQTT。

尽管Apache Kafka可能是简单异步通信的首选,但对于更复杂的路由模式(如企业模式),一些人似乎更喜欢ActiveMQ。然而,许多人认为Kafka比ActiveMQ更优秀,原因包括更高的吞吐量、更有效的日志/主题分区管理以及消费者消费主题时更精细的ACL。

3

2
这里有一个更近期的基准测试,使用了更多种类的消息传递解决方案:https://softwaremill.com/mqperf/。Apollo未被包括在内,因为它已不再处于活跃开发状态,但ActiveMQ 5.x和ActiveMQ Artemis被包括在内。 - Justin Bertram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接