我之前没有与*MQ打过交道,现在希望了解JMS和消息队列等相关知识。因此,我想知道是否应该从ActiveMQ开始学习,还是干脆“忽略”它,直接自学Apollo。Apollo是否像ActiveMQ一样功能齐全?它是否实现了JMS 2.0(我看到ActiveMQ卡在了1.1上)?我会错过一些非常重要的东西吗?
另外,Kafka与这两个解决方案相比如何?
我之前没有与*MQ打过交道,现在希望了解JMS和消息队列等相关知识。因此,我想知道是否应该从ActiveMQ开始学习,还是干脆“忽略”它,直接自学Apollo。Apollo是否像ActiveMQ一样功能齐全?它是否实现了JMS 2.0(我看到ActiveMQ卡在了1.1上)?我会错过一些非常重要的东西吗?
另外,Kafka与这两个解决方案相比如何?
Apache ActiveMQ 是一个功能齐全的强力工具,虽然不是最快的消息队列软件,但对于大多数用例来说已足够快。它具有灵活的群集、故障转移、与不同应用服务器的集成、安全等特性。
Apache Apollo 旨在编写一个新的核心来处理大量客户端和消息,它不具备 ActiveMQ 所有方便的功能但可以更好地扩展。当你给它一个大型多核服务器和数千个并发连接时,Apache Apollo 是一种非常快速的消息队列实现。它有一个简单漂亮的界面,但不是“一刀切”的解决方案。
似乎正在尝试将一些 ActiveMQ 特性与 HornetQ 合并为 ActiveMQ Artemis。HornetQ 具有 JMS2.0 支持,因此我的猜测是它可能出现在 ActiveMQ 6.x 中。
Kafka 是一个不同的系统。它是一个非常简单的消息代理,旨在通过多台服务器快速扩展持久发布订阅(主题)。对于中小型部署,Kafka 可能不是最佳选择。它有自己的方式来实现高吞吐量,因此你必须在灵活性方面做出很多让步才能获得高分布式吞吐量。如果您对消息队列和代理领域不熟悉,我猜 Kafka 会显得有些“太过”的。另一方面,如果您拥有一个相当大的服务器集群,并且想知道如何尽可能推送更多的消息,则可以试试 Kafka!
这是一个较早的问题,但我会在此提供一个更现代的答案。
编辑:Apache Artemis 2.3.0发布于2017年9月5日左右。因此,目前它似乎正在进展中。(链接)但仍然需要注意变更日志。
Kafka 只做一件事,并且做得非常好:在发布/订阅(pub/sub)架构中,消息被写入主题(由分区分布的日志),然后由消费者按偏移量进行消耗。Kafka 是 为云构建的,并且专注于高吞吐量,这些天成为异步消息传递的首选。
ActiveMQ 支持发布/订阅和点对点语义。在后者中,队列处理单个生产者和特定消费者之间的单个消息。这与发布/订阅类似,但工作方式略有不同:如果消费者在队列上接收到消息但未确认,则该消息将发送给另一个消费者。ActiveMQ 还支持多种消息协议,包括 AMQP、STOMP、JMS、CAMEL 和 MQTT。
尽管Apache Kafka可能是简单异步通信的首选,但对于更复杂的路由模式(如企业模式),一些人似乎更喜欢ActiveMQ。然而,许多人认为Kafka比ActiveMQ更优秀,原因包括更高的吞吐量、更有效的日志/主题分区管理以及消费者消费主题时更精细的ACL。我对ActiveMQ、Apollo和HornetQ进行了非持久化和持久化场景下的性能基准测试,我认为这些数据将有助于您选择应该使用哪个,如下面链接所示: http://hiramchirino.com/jms-benchmark/ubuntu-2600k/index.html