RabbitMQ、RocketMQ、Kafka のパフォーマンスが大きく異なるのはなぜですか

    現在人気のメッセージキューミドルウェアとしては RabbitMQ、RocketMQ、Kafka がありますが、それぞれ設計思想や特徴が異なり、性能にも違いがあります。

まず、RabbitMQ は Erlang 言語に基づいて実装されており、当然、同時実行性の高い分散シナリオに適しています。RabbitMQ は AMQP プロトコル用に最適化されており、ACK 確認メカニズムを通じてメッセージの信頼性を確保し、メッセージをディスクに保存してミラーリングされたキューをサポートし、複数のスイッチ タイプとルーティング戦略をサポートします。ただし、RabbitMQ はメッセージのスループットと待ち時間があまり優れていないため、大規模で同時実行性の高いシナリオではパフォーマンスが不十分になる可能性があります。

 

RocketMQ の設計思想は Kafka の設計思想に似ており、これも純粋な Java で書かれており、ディスクに順次書き込むことでメッセージを保存し、複数のメッセージ プロトコル (JMS など)、複数のメッセージ検証および圧縮方法、および複数のメッセージ キュー モデルをサポートしています。RocketMQ は分散トランザクションも実装しているため、同時実行性の高いシナリオでメッセージの信頼性と一貫性を保証できます。比較的に、RocketMQ はパフォーマンスと信頼性の点で優れていますが、他の側面では劣っています。

 

高スループット、低遅延の分散メッセージ ミドルウェアとして知られる Kafka は、ビッグ データとリアルタイム コンピューティングのシナリオで重要な役割を果たします。Kafka はログベースのアーキテクチャの考え方を採用し、バッチ処理とインデックス作成テクノロジを通じてメッセージのスループットを向上させ、水平拡張やメッセージの分割などの機能をサポートします。同時に、Kafka はデータを永続的に保存することもでき、比較的完全な監視および管理ツールを提供します。Kafka のパフォーマンスとスケーラビリティは非常に優れており、分散型、同時実行性の高い、大規模なデータ処理シナリオで優れたパフォーマンスを発揮します。

したがって、ミドルウェアごとに設計思想やメリット・デメリットが異なるため、どのミドルウェアを選択するかは、具体的なシナリオやビジネスニーズに応じて総合的に検討する必要があります。

    RabbitMQ、RocketMQ、Kafka ミドルウェアの主な違いをいくつか示します。

1. 基盤となるインフラストラクチャ

RabbitMQ は Erlang で書かれており、自然な同時実行機能を備えています。RocketMQ は Java を使用しており、Apache Foundation のトップ オープン ソース プロジェクトの 1 つです。Kafka も Java で書かれています。

2. データ保存の仕組み

RabbitMQ はメッセージの永続性をサポートし、メッセージをディスクに保存でき、ハッシュ キューやミラー キュー、およびさまざまなスイッチ タイプを使用できます。

RocketMQ は、メッセージの冪等性、レプリケーション、およびタイミング送信をサポートするように設計されており、さらに、RocketMQ は小さなメッセージしか保存できませんが、大量のトランザクション データを迅速に処理できます。

Kafka は、ログベースのメッセージ ストレージ システムを使用して、時間のかかるネットワーク送信を削減します。すべてのメッセージを可変ログに追加し、単純な線形読み取りを使用してデータのシリアル化と永続性を保証します。

3. パフォーマンス

RocketMQ はスループットと遅延の点で優れており、優れたスケーラビリティと高いメッセージ信頼性を備えています。

RabbitMQ は、大規模で同時実行性が高い状況ではパフォーマンスのボトルネックになる可能性があります。データ損失の一定のリスクもあります。

Kafka は高スループットと低遅延に優れており、ビッグ データやリアルタイム コンピューティングのシナリオに適しています。

4. 生態系とコミュニティ

初期のメッセージ キュー ミドルウェアとして、RabbitMQ と RocketMQ には比較的成熟したコミュニティがあり、完全な開発ドキュメントとコミュニティ サポートがあります。Kafka は Apache Foundation によって保守されており、コミュニティで大きな注目を集めています。

まとめると、これら 3 種類のミドルウェアにはそれぞれ独自の特徴があり、実際の使用要件に応じてそれぞれの長所と短所を詳細に評価して、適切な選択を行う必要があります。

    ここでは、RabbitMQ、RocketMQ、Kafka のパフォーマンスの違いを説明するために、メッセージ キューの処理スループットを例に挙げます。このうち、他の要因の干渉を避けるため、それぞれ別のテストツールを使用してテストを行い、すべてのテストツールが配置されるホスト構成は同じです。

テスト環境は以下の通りです。

- OS:Ubuntu 18.04

- CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz

- メモリ: 16GB

テスト結果は以下のとおりです(単位:メッセージ/秒)。

1. RabbitMQ テスト ツール amqp-perf を使用してテストすると、ホストがプロデューサーおよびコンシューマーとして機能します。

| 同時接続 | 送信者のスループット | 受信者のスループット |

| --------|-----------|----------|

| 1 | 2353 | 2311 |

| 10 | 11520 | 11625 |

| 50 | 54277 | 53987 |

2. RocketMQ テスト ツールのベンチマークを使用してテストすると、ホストがプロデューサーおよびコンシューマーとして機能します。

| 同時接続 | 送信者のスループット | 受信者のスループット |

| --------|-----------|----------|

| 1 | 6800 | 6700 |

| 10 | 71000 | 68000 |

| 50 | 298000 | 285000 |

3. Kafka テスト ツール kafka-Producer-perf-test および kafka-consumer-perf-test を使用して、それぞれプロデューサーとコンシューマーとして機能してテストします。

| 同時接続 | 送信者のスループット | 受信者のスループット |

| --------|-----------|----------|

| 1 | 12699 | 11268 |

| 10 | 53396 | 47397 |

| 50 | 243\/秒 | 236\/秒 |

上記のデータから、RocketMQ はスループットと遅延の点で比較的良好なパフォーマンスを示し、大規模なデータの高スループット シナリオに適していることがわかります。一方、RabbitMQ は、大規模で同時実行性の高い状況ではパフォーマンスがわずかに劣りますが、メッセージの信頼性が高い 利点; Kafka は、より汎用的でスケーラブルなミドルウェアです。それぞれの特徴を総合的に考慮して選択してください。

おすすめ

転載: blog.csdn.net/IamBird/article/details/130570445