Kafka よりも RabbitMQ を使うべきなのはいつですか? [closed] 質問する

Kafka よりも RabbitMQ を使うべきなのはいつですか? [closed] 質問する

Kafka の代わりに RabbitMQ を評価するように依頼されましたが、メッセージ キューが Kafka よりも適している状況を見つけるのは困難でした。スループット、耐久性、レイテンシ、または使いやすさの点でメッセージ キューの方が適しているユースケースを知っている人はいますか?

ベストアンサー1

RabbitMQは、AMQP、MQTT、STOMPなどの複数のプロトコルをサポートする堅牢な汎用メッセージブローカーです。高いスループットを処理できます。RabbitMQの一般的な使用例は、次のようなバックグラウンドジョブや長時間実行されるタスクの処理です。ファイルスキャン、画像の拡大縮小、PDF 変換などにも使用できます。RabbitMQ はマイクロサービス間でも使用され、アプリケーション間の通信手段として機能し、メッセージを渡す際のボトルネックを回避します。

Kafka は、高スループットの取り込みデータ ストリームと再生に最適化されたメッセージ バスです。大量のデータを移動したり、リアルタイムでデータを処理したり、一定期間にわたってデータを分析したりする必要がある場合は、Kafka を使用します。つまり、データを収集、保存、処理する必要がある場合です。たとえば、Web ショップでのユーザー アクティビティを追跡し、購入を推奨するアイテムを生成する場合です。別の例としては、追跡、取り込み、ログ記録、セキュリティのためのデータ分析があります。

Kafka は、アプリケーションがディスク上のストリーム データを処理および再処理できる、耐久性のあるメッセージ ブローカーと見なすことができます。Kafka のルーティング アプローチは非常にシンプルです。メッセージを複雑な方法でコンシューマーにルーティングする必要がある場合は、RabbitMQ のほうが優れたオプションがあります。オフラインになる可能性のあるバッチ コンシューマーや、低レイテンシでメッセージを必要とするコンシューマーをサポートする必要がある場合は、Kafka を使用してください。 

Kafka からデータを読み取る方法を理解するには、まずそのコンシューマーとコンシューマー グループを理解する必要があります。パーティションを使用すると、データを複数のノードに分割してトピックを並列化できます。パーティション内の各レコードには、一意のオフセットが割り当てられ、識別されます。このオフセットは、パーティション内のレコードを指します。最新バージョンの Kafka では、パーティション内の各レコードの数値オフセットが維持されます。Kafka のコンシューマーは、オフセットを定期的に自動的にコミットするか、このコミットされた位置を手動で制御することができます。RabbitMQ は、消費済み/確認済み/未確認のメッセージに関するすべての状態を保持します。Kafka は、確認されるとメッセージがキューから単純に削除される RabbitMQ の場合よりも理解が複雑だと思います。

RabbitMQのキューは空のときに最も高速ですが、Kafkaは大量のデータを非常に少ないオーバーヘッドで保持します。Kafkaは大量のメッセージを保持および配信するように設計されています。(RabbitMQで非常に長いキューを作成する予定の場合は、遅延キュー

Kafka は水平スケーリング (マシンを追加することでスケーリング) を念頭に置いてゼロから構築されていますが、RabbitMQ は主に垂直スケーリング (パワーを追加することでスケーリング) を目的として設計されています。

RabbitMQには、WebブラウザからRabbitMQサーバを監視および操作できるユーザーフレンドリーなインターフェースが組み込まれています。キュー、接続、チャネル、交換、ユーザー、ユーザー権限を操作できます。ブラウザで作成、削除、一覧表示したり、メッセージレートを監視したり、手動でメッセージを送受信したりできます。Kafkaには、オープンソースツールと商用ツールもいくつかあります、管理機能と監視機能を提供します。RabbitMQ について理解を深めるのがより簡単かつ早くなると思います。

一般的に、シンプル/従来の pub-sub メッセージ ブローカーが必要な場合、RabbitMQ が当然の選択です。RabbitMQ は、おそらく、必要な拡張性よりも拡張性が高いからです。要件が、チャネル/キューを介したシステム通信を処理するのに十分単純で、保持とストリーミングが必須でない場合は、RabbitMQ を選択していたでしょう。

私が RabbitMQ を選択する主な状況は 2 つあります。信頼性の高いバックグラウンド ジョブを実行する必要がある場合の、長時間実行されるタスクの場合です。また、アプリケーション内およびアプリケーション間の通信と統合、つまりマイクロサービス間の仲介者としての場合です。この場合、システムは、Web ショップでの注文処理 (注文の確定、注文ステータスの更新、注文の送信、支払いなど) などのタスクの処理を開始するようにシステムの別の部分に通知するだけで済みます。

一般的に、ストリーミング データを保存、読み取り (再読み取り)、分析するためのフレームワークが必要な場合は、Apache Kafka を使用します。監査対象のシステムやメッセージを永続的に保存する必要があるシステムに最適です。これらは、データ分析 (追跡、取り込み、ログ記録、セキュリティなど) またはリアルタイム処理の 2 つの主なユース ケースに分類することもできます。

さらに詳しい情報、使用例、比較データについては、以下をご覧ください。https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html

また、業界の論文「Kafka と RabbitMQ: 2 つの業界リファレンス パブリッシュ/サブスクライブ実装の比較研究」も推奨されています。http://dl.acm.org/citation.cfm?id=3093908

私は Apache Kafka と RabbitMQ の両方をサービスとして提供している会社で働いています。

おすすめ記事