我以前没有使用* MQ的经验,并且希望在一般情况下建立有关JMS和消息队列的知识。这样,我想知道我应该从ActiveMQ开始还是完全“忽略”它,然后从教自己Apollo开始。Apollo是否与ActiveMQ一样功能完善?它是否实现了JMS 2.0(我看到ActiveMQ陷入了1.1)?我会错过一些非常重要的东西吗?
另外,Kafka与这两种解决方案相比如何?
Answers:
Apache ActiveMQ是功能强大且功能强大的强大工具。它不是最快的MQ软件,但对于大多数用例来说足够快。功能包括灵活的字符串,故障转移,与不同应用程序服务器的集成,安全性等。
Apache Apollo尝试为ActiveMQ编写新的内核,以应对大量的客户端和消息。它不具有ActiveMQ的所有便捷功能,但扩展性更好。当您为Apache Apollo提供大型多核服务器和数千个并发连接时,它是一种非常快速的MQ实现。它具有一个不错的,简单的用户界面,但不是“一刀切”的解决方案。
似乎正在尝试将许多ActiveMQ功能与HornetQ合并为ActiveMQ Artemis。HornetQ具有JMS2.0支持,所以我谦虚的猜测是它很可能会出现在ActiveMQ 6.x中。
卡夫卡是另一种野兽。这是一个非常简单的消息代理,旨在在多个服务器上尽可能快地扩展持久性发布订阅(主题)。对于中小型部署,Kafka可能不是最佳选择。它也有做事的方式来实现高吞吐量,因此您必须在灵活性方面进行大量交易才能获得高分布式吞吐量。如果您是MQ和代理领域的新手,我想Kafka太过分了。另一方面-如果您有一个大小合适的服务器集群,并且想知道如何通过它推送尽可能多的消息-试一下Kafka!
这是一个较旧的问题,但我将在此处提供更现代的答案。
编辑:2.3.0 Apache Artemis发布发生在2017年9月5日。因此,到目前为止它的确似乎还在进步。但是(链接)changelog仍然看起来太可怕了。
我确定了ActiveMQ,Apollo,HornetQ在非持久性场景和持久性场景下的性能基准,我认为这对您选择应该使用哪种性能有所帮助,链接如下所示:http : //hiramchirino.com/jms- Benchmark / ubuntu-2600k / index.html
Apache Kafka可以被描述为“分布式流平台”,其中ActiveMQ,MOM(面向消息的中间件)是“通用消息代理”。
Kafka做一件事情,一件做得很好:在发布/订阅(pub / sub)体系结构中,消息被写入主题(按分区分配的日志),然后消费者通过偏移量消费。专为云计算而设计的Kafka着眼于非常高的吞吐量,将重点放在了这一点上,如今,异步消息传递已成为主流。
ActiveMQ支持发布/订阅和点对点语义。在后者中,队列处理单个生产者和特定消费者之间的单个消息。就像pub / sub一样,它是异步的,但工作原理略有不同:如果使用者在队列中收到一条消息,但未能确认,则该消息将发送给另一个使用者。ActiveMQ还支持支持多种消息传递协议,包括AMQP,STOMP,JMS,CAMEL和MQTT。
虽然Apache Kafka可能是进行简单异步通信的理想选择;对于某些更复杂的路由模式(例如企业模式),ActiveMQ似乎是某些人的首选,但是,由于诸如更高的吞吐量,更有效的日志/主题分区管理以及更细粒度的原因,Kafka是对ActiveMQ的改进。消费主题的消费者的ACL。