web-dev-qa-db-ja.com

ActiveMQ対Apollo対Kafka

私はこれまでに* MQの経験がなく、JMSとメッセージキューに関する知識を一般的に構築したいと考えています。そうすれば、ActiveMQから始めるべきなのか、それとも単に「無視する」べきなのか、そして自分でApolloを教えるべきなのかと思います。 ApolloはActiveMQと同等の機能を完備していますか? JMS 2.0を実装していますか(ActiveMQが1.1で動けなくなったようです)。本当に重要なものを見逃すことはありますか?

また、Kafkaはこれら2つのソリューションとどのように比較されますか?

61
Martin

Apache ActiveMQは、機能とニースに満ちたすばらしい働き者です。最速のMQソフトウェアではありませんが、ほとんどのユースケースに十分な速度です。機能には、柔軟性の高い文字列、フェールオーバー、さまざまなアプリケーションサーバーとの統合、セキュリティなどがあります。

Apache Apolloは、ActiveMQの新しいコアを作成して、大量のクライアントとメッセージに対処する試みです。 ActiveMQの便利で便利な機能がすべて備わっているわけではありませんが、はるかに優れています。 Apache Apolloは、大規模なマルチコアサーバーと数千の同時接続を提供する場合、非常に高速なMQ実装です。素晴らしくシンプルなUIを備えていますが、「万能」ソリューションではありません。

ActiveMQ Artemisという名前で、多数のActiveMQ機能をHornetQとマージする試みが進行中のようです。 HornetQはJMS2.0をサポートしているため、私の控え目な推測は、ActiveMQ 6.xに登場する可能性が高いということです。

JIRAGithub

カフカは別の獣です。これは、複数のサーバーで可能な限り高速に永続的なパブリッシュサブスクライブ(トピック)をスケーリングすることを目的とした非常にシンプルなメッセージブローカーです。中小規模の展開では、Kafkaはおそらく最適なオプションではありません。また、高いスループットを達成するための方法があるため、高い分散スループットを得るために柔軟性の点で多くのことを交換する必要があります。 MQとブローカーの分野に慣れていない場合、Kafkaはやり過ぎだと思います。一方、適切なサイズのサーバークラスターがあり、それを介してできるだけ多くのメッセージをプッシュする方法を知りたい場合は、Kafkaを試してください!

99

これは古い質問ですが、ここでより現代的な答えを提供します。

  • Apolloプロジェクトは非公式に死んでおり、彼らはArtemisが新しい話題であることを示唆しています。 ( link )Apolloの(一見)停滞した開発は、Artemisの将来に自信を与えません。
  • ActiveMQは豊富な機能を備えているという点で、私の経験はPetterの答えに似ています。ただし、すべてのリリースでランダムなクラッシュとメモリリークが修正されているように見えますが、これは自信を刺激するものではありません。私のプロジェクト(クラスタリングを使用)では安定していますが、過去10数件のリリース(現在5.14.3を使用)でブローカーで奇妙な動作とクラッシュが発生しています。
  • RabbitMQは使用していません(現在のプロジェクトはActiveMQにコミットしています)が、メッセージングバスを必要とする次のプロジェクトで試してみます。サポートする機能のキッチンシンクがないことは、より安定していることを意味します。

編集:2.3.0のApache Artemisのリリースは2017年9月5日まで行われました。そのため、現在進行中のようです。しかし、( link )changelogはまだ怖いようです。

25
Matthew B.

ActiveMQ、Apollo、HornetQのパフォーマンスベンチマークを非永続的シナリオと永続的シナリオで使用しています。以下のリンクを使用して、どちらを使用するかを選択すると役立つと思います。 http:// hiramchirino。 com/jms-benchmark/ubuntu-2600k/index.html

3
Tommy

Apache Kafka "Distributed Streaming Platform"として特徴付けることができます。ここでActiveMQ、MOM、(メッセージング指向ミドルウェア)は「汎用メッセージブローカー」です。

Kafkaは1つのことを行い、1つのことは本当にうまくいきます。publish/subscribe(pub/sub)アーキテクチャでは、メッセージはトピック(ログ)に書き込まれますパーティションごとに分散されます)、消費者はその後、オフセットによって消費します。 クラウド用に構築 であるKafkaは、非常に高いスループットを念頭に置いてこれに焦点を当てており、最近では非同期メッセージングの主役となっています。

ActiveMQは、pub/subpoint-to-pointの両方のセマンティクスをサポートします。後者では、キューは単一のプロデューサーと特定のコンシューマー間の単一のメッセージを処理します。これは、pub/subと同様に非同期ですが、動作が少し異なります。コンシューマーがキューでメッセージを取得したが、確認に失敗した場合、メッセージは別のコンシューマーに送信されます。 ActiveMQは、AMQP、STOMP、JMS、CAMEL、MQTTなど、いくつかのメッセージングプロトコルもサポートしています。

Apache Kafkaは、単純な非同期通信の頼りになるかもしれません。 ActiveMQは、エンタープライズパターンなどのより複雑なルーティングパターンのために好まれているようですが、多くの人は、Kafkaは高スループットなどの理由でActiveMQよりも改善されていると主張しています。 ログ/トピックのパーティションのより効率的な管理、およびトピックを消費するコンシューマーの詳細なACL

0
John Hammink