【问题标题】:ActiveMQ vs Apollo vs Kafka
【发布时间】:2015-02-24 08:16:57
【问题描述】:

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

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

【问题讨论】:

标签: jms activemq message-queue apache-kafka apollo


【解决方案1】:

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

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

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

JIRA, Github

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

【讨论】:

  • 谢谢!我想 Apache Apollo 是我的最佳选择。
  • 如果我(部分)了解 ActiveMQ 与 Apollo 的关系(基于以往经验的新实现等),Artemis 的总体愿景(目标、动机)是什么?
  • Apollo 在某种程度上未能成为 AMQ 的新非阻塞核心,因为缺乏专门从事这项工作的 Scala 程序员。在我看来,Artemis 的愿景——我不是 ActiveMQ 的官员——是做 Apollo 未能做到的事情。使用主流语言 (Java) 编写的经过实战测试的产品 (HornetQ) 可能比从头开始编写的机会更大。两者都针对相同的目标 - 非阻塞 ActiveMQ 以支持物联网和移动应用程序的新需求等
【解决方案2】:

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

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

编辑:2.3.0 Apache Artemis 版本于 2017 年 9 月 5 日左右发布。所以它似乎目前正在取得进展。但是 (link) 更新日志看起来还是太吓人了。

【讨论】:

  • FWIW,ActiveMQ Artemis 上的开发现在比 Apollo 以往任何时候都更加活跃。实际上,至少根据 GitHub 的数据,Artemis 的贡献者数量已经超过了 ActiveMQ 本身。 Artemis 也已作为Red Hat JBoss AMQ 7 的一部分商业化。
【解决方案3】:

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

【讨论】:

  • 以下是使用更广泛的消息传递解决方案进行的最新基准测试:softwaremill.com/mqperf。不包括 Apollo,因为它不再处于积极开发中,但包括 ActiveMQ 5.x 和 ActiveMQ Artemis。
【解决方案4】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-04-04
    • 2011-10-03
    • 2019-05-12
    • 2018-04-02
    • 2017-12-23
    • 2017-12-28
    • 2018-01-19
    • 2017-07-19
    • 2021-04-06
    相关资源
    最近更新 更多