我之前没有任何使用* MQ的经验,而且我希望通常能够构建有关JMS和消息队列的知识。这样,我想知道我是应该从ActiveMQ开始,还是只是“忽略”它,然后开始自学阿波罗。 Apollo是否像ActiveMQ一样功能齐全?它是否实现了JMS 2.0(我看到ActiveMQ卡在1.1中)?我会遗漏一些非常重要的东西吗?
另外,Kafka与这两种解决方案相比如何?
Apache ActiveMQ是一款功能强大且功能强大的强大工具。它不是最快的MQ软件,但对于大多数用例来说足够快。功能包括灵活的clustring,故障转移,与不同应用服务器的集成,安全性等。
Apache Apollo试图为ActiveMQ编写一个新的核心来处理大量的客户端和消息。它没有ActiveMQ的所有便利功能,但扩展性更好。当您为其提供大型多核服务器和数千个并发连接时,Apache Apollo是一个非常快速的MQ实现。它有一个漂亮,简单的用户界面,但不是一个“一刀切”的解决方案。
似乎正在尝试将名为ActiveMQ Artemis的名称与HornetQ合并许多ActiveMQ功能。 HornetQ支持JMS2.0,所以我的谦虚猜测是它很可能出现在ActiveMQ 6.x中。
卡夫卡是一个不同的野兽。它是一个非常简单的消息代理,旨在尽可能快地在多个服务器上扩展持久性发布订阅(主题)。对于中小型部署,Kafka可能不是最佳选择。它还具有实现高吞吐量的方法,因此您必须在灵活性方面进行大量交易以获得高分布式吞吐量。如果你是MQ和经纪人领域的新手,我想Kafka是矫枉过正的。另一方面 - 如果你有一个体面的服务器集群,并想知道如何通过它推送尽可能多的消息 - 给卡夫卡一个旋转!
这是一个较老的问题,但我会在这里提供更现代的答案。
编辑:2.3.0阿帕奇Artemis发布发生〜2017年9月5日。所以它似乎正在进行中。但是(link)更改日志似乎仍然太可怕了。
我是ActiveMQ,Apollo,HornetQ在非持续场景和持久场景下的性能基准测试,我认为这将有助于您选择应该使用哪一个,链接如下所示:http://hiramchirino.com/jms-benchmark/ubuntu-2600k/index.html
Apache Kafka可以被描述为“分布式流式传输平台”,其中作为MOM的ActiveMQ(面向消息传递的中间件)是“通用消息代理”。
Kafka做了一件事,有一点非常好:在发布/订阅(pub / sub)架构中,消息被写入主题(按分区分发的日志),然后消费者通过偏移消费。 Kafka,built for the cloud,具有非常高的吞吐量,专注于此,现在是异步消息传递的首选。
ActiveMQ支持pub / sub和point-to-point语义。在后者中,队列处理单个生产者和特定消费者之间的单个消息。这与pub / sub类似,是异步的,但工作方式略有不同:如果消费者在队列上获取消息但未能确认消息,则消息将被发送给另一个消费者。 ActiveMQ还支持多种消息传递协议,包括AMQP,STOMP,JMS,CAMEL和MQTT。
虽然Apache Kafka可能是简单异步通信的首选; ActiveMQ似乎更倾向于更复杂的路由模式,如企业模式,但是,许多人认为Kafka是对ActiveMQ的改进,原因包括更高的吞吐量,更有效的日志/主题分区管理以及更细粒度的消费主题的消费者的ACL。