ActiveMQ vs Apollo vs Kafka

Mar*_*tin 63 activemq-classic jms message-queue apache-kafka apollo

我之前没有任何使用*MQ的经验,而且我希望通常能够构建有关JMS和消息队列的知识.这样,我想知道我是应该从ActiveMQ开始,还是只是"忽略"它,然后开始自学阿波罗.Apollo是否像ActiveMQ一样功能齐全?它是否实现了JMS 2.0(我看到ActiveMQ卡在1.1中)?我会遗漏一些非常重要的东西吗?

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

Pet*_*der 100

Apache ActiveMQ是一款功能强大且功能强大的强大工具.它不是最快的MQ软件,但对于大多数用例来说足够快.功能包括灵活的clustring,故障转移,与不同应用服务器的集成,安全性等.

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

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

JIRA, Github

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

  • 在某种程度上,Apollo未能成为AMQ新的非阻塞核心,因为缺乏Scala程序员致力于这项工作.正如我所看到的,阿尔忒弥斯的愿景 - 我不是ActiveMQ的官员 - 就​​是做阿波罗未能做到的事情.使用主流语言(Java)编写的经过测试的产品(HornetQ)比从头开始编写的机会可能更大.两者都针对同一目标 - 非阻塞ActiveMQ来支持物联网和移动应用程序的新需求等等 (12认同)
  • ActiveMQ Artemis 1.0.0已发布:https://activemq.apache.org/artemis/ (4认同)

Mat*_* B. 26

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

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

编辑:2.3.0阿帕奇Artemis发布发生〜2017年9月5日.所以它似乎正在进行中.但是(链接)更改日志似乎仍然太可怕了.

  • 您有RabbitMQ的更新吗? (2认同)
  • FWIW,ActiveMQ Artemis 上的开发现在比 Apollo 更加活跃。事实上,至少根据 GitHub 的数据,Artemis 的贡献者数量已经超过了 ActiveMQ。Artemis 也已经作为 [Red Hat JBoss AMQ 7](https://www.redhat.com/en/technologies/jboss-middleware/amq) 的一部分商业化。 (2认同)

Joh*_*ink 5

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

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

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

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