71

我以前没有任何使用 *MQs 的经验,我正在寻求建立关于 JMS 和消息队列的一般知识。那样的话,我想知道我是应该从 ActiveMQ 开始还是完全“忽略”它并从自学 Apollo 开始。Apollo 和 ActiveMQ 一样功能齐全吗?它是否实现了 JMS 2.0(我看到 ActiveMQ 被 1.1 卡住了)?我会错过一些非常重要的东西吗?

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

4

4 回答 4

106

Apache ActiveMQ 是一个很棒的主力,充满了功能和好东西。它不是最快的 MQ 软件,但对于大多数用例来说已经足够快了。其中的功能包括灵活的集群、故障转移、与不同应用程序服务器的集成、安全性等。

Apache Apollo 是尝试为 ActiveMQ 编写一个新的核心来处理大量的客户端和消息。它没有 ActiveMQ 的所有漂亮和方便的功能,但可扩展性更好。当您为其提供大型多核服务器和数千个并发连接时,Apache Apollo 是一个非常快速的 MQ 实现。它有一个漂亮、简单的 UI,但不是“一刀切”的解决方案。

似乎正在尝试以 ActiveMQ Artemis 的名称将一些 ActiveMQ 功能与 HornetQ 合并。HornetQ 支持 JMS2.0,所以我猜测它很可能出现在 ActiveMQ 6.x 中。

JIRA , Github

卡夫卡是一个不同的野兽。这是一个非常简单的消息代理,旨在在多个服务器上尽可能快地扩展持久发布订阅(主题)。对于中小型部署,Kafka 可能不是最佳选择。它也有自己的方式来实现高吞吐量,因此您必须在灵活性方面进行大量交易才能获得高分布式吞吐量。如果您是 MQ 和代理领域的新手,我猜 Kafka 有点矫枉过正。另一方面——如果你有一个相当大的服务器集群并且想知道如何通过它推送尽可能多的消息——给 Kafka 一个旋转!

于 2014-12-27T18:04:33.000 回答
29

这是一个较老的问题,但我将在这里提供一个更现代的答案。

  • 阿波罗计划非正式地死了,他们认为阿尔忒弥斯是新的热点。(链接) Apollo 的(看似)停滞的发展并没有让我对 Artemis 的未来充满信心。
  • 我的经验与 Petter 的回答类似,因为 ActiveMQ 功能丰富且功能强大。但是,似乎每个版本都修复了随机崩溃和内存泄漏,这并不能激发信心。它对我的项目(使用集群)来说是稳定的,但我们在最近十几个版本(目前使用 5.14.3)中看到了代理中的奇怪行为和崩溃
  • 我没有使用过 RabbitMQ(我当前的项目致力于 ActiveMQ),但我将在下一个需要消息传递总线的项目上进行尝试。没有支持功能的厨房水槽有望意味着它更稳定。

编辑:2.3.0 Apache Artemis 版本于 2017 年 9 月 5 日发布。所以它似乎目前正在取得进展。但是(链接)更新日志似乎仍然太可怕了。

于 2016-08-23T16:34:45.277 回答
4

我做了一个ActiveMQ、Apollo、HornetQ在非持久化场景和持久化场景下的性能基准测试,我认为这对你选择应该使用哪一个会有帮助,链接如下: http ://hiramchirino.com/jms-基准/ubuntu-2600k/index.html

于 2017-03-21T10:03:53.820 回答
3

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

Kafka做了一件事,而且做得非常好:在发布/订阅(pub/sub) 架构中,消息被写入主题(按分区分布的日志),然后消费者通过偏移量从主题中消费。Kafka 是为云构建的,考虑到了非常高的吞吐量,它专注于这一点,而这些天是异步消息传递的首选。

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

虽然 Apache Kafka 可能是简单异步通信的首选;对于更复杂的路由模式(如企业模式),ActiveMQ 似乎更受某些人的青睐,但是,许多人认为 Kafka 是对 ActiveMQ 的改进,原因包括更高的吞吐量、更有效的日志/主题分区管理以及更细粒度消费主题的消费者的ACL 。

于 2019-04-17T21:21:07.397 回答