RocketMQを選ぶ理由
RocketMQを選ぶ理由
アリババにおけるRocketMQの開発初期段階では、非同期通信、検索、ソーシャルネットワーキングのアクティビティフロー、データパイプライン、取引プロセスなど、さまざまな用途に使用していました。取引ビジネスの成長に伴い、メッセージングクラスタへの負荷が増加していることに気づきました。
ActiveMQ IOモジュールの性能を観察・分析した結果、キュー数と仮想トピック数の増加に伴いボトルネックが発生していることが判明しました。スロットリング、サーキットブレーカー、サービスのダウングレードなど、さまざまな方法でこの問題に対処しようと試みましたが、どれも満足のいく結果ではありませんでした。人気のメッセージングソリューションであるKafkaの使用も検討しましたが、後述する理由から、低遅延と高信頼性という私たちの要件を満たしませんでした。その結果、従来のPub/Subから高ボリューム、リアルタイム、ゼロエラーのトランザクションシステムまで、幅広いユースケースに対応できる新しいメッセージングエンジンの開発を決定しました。
Apache RocketMQは、そのシンプルなアーキテクチャ、豊富なビジネス機能、そして極めて高いスケーラビリティにより、企業開発者やクラウドベンダーに広く採用されています。10年以上にわたる幅広いシナリオでの磨き上げを経て、RocketMQは金融グレードの信頼性の高いビジネスメッセージの業界標準となり、インターネット、ビッグデータ、モバイルインターネット、IoTなどの分野で広く使用されています。
ヒント
次の表は、RocketMQ、ActiveMQ、Kafkaの比較を示しています。
RocketMQ vs. ActiveMQ vs. Kafka
メッセージング製品 | クライアントSDK | プロトコルと仕様 | 順序付きメッセージ | スケジュールされたメッセージ | バッチメッセージ | ブロードキャストメッセージ | メッセージフィルタ | サーバートリガーによる再配信 | メッセージストレージ | メッセージの遡及 | メッセージの優先順位 | 高可用性とフェイルオーバー | メッセージ追跡 | 設定 | 管理と運用ツール |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | Java、.NET、C++など | プッシュモデル、OpenWire、STOMP、AMQP、MQTT、JMSをサポート | 排他コンシューマまたは排他キューで順序を保証できます | サポート | サポートなし | サポート | サポート | サポートなし | JDBCを使用した高速な永続化と、高性能なジャーナル(levelDB、kahaDBなど)をサポート | サポート | サポート | ストレージに依存してサポート。levelDBを使用する場合はZooKeeperサーバが必要です | サポートなし | デフォルト設定は低レベルであるため、ユーザーは設定パラメータを最適化する必要があります | サポート |
Kafka | Java、Scalaなど | プルモデル、TCPをサポート | パーティション内のメッセージの順序を保証 | サポートなし | 非同期プロデューサーでサポート | サポートなし | サポート。Kafka Streamsを使用してメッセージをフィルタリングできます | サポートなし | 高性能ファイルストレージ | サポート。オフセットで示されます | サポートなし | サポート。ZooKeeperサーバが必要です | サポートなし | Kafkaは、設定にキーバリューペア形式を使用します。これらの値は、ファイルから、またはプログラムで提供できます。 | サポート。ターミナルコマンドを使用してコアメトリクスを公開します |
RocketMQ | Java、C++、Go | プルモデル、TCP、JMS、OpenMessagingをサポート | メッセージの厳密な順序を保証し、スケールアウトもスムーズに行えます | サポート | 同期モードでサポートし、メッセージの損失を防ぎます | サポート | サポート。SQL92に基づいたプロパティフィルタ式 | サポート | 高性能で低遅延のファイルストレージ | タイムスタンプとオフセットの2つの指標でサポート | サポートなし | マスタースレーブモデルでサポート。追加のキットは不要です | サポート | すぐに動作します。ユーザーはわずかな設定に注意するだけで済みます | サポート。豊富なWebとターミナルコマンドでコアメトリクスを公開します |