1. ホーム
  2. stream

[解決済み] ストリーム処理とメッセージ処理の違い

2023-02-12 20:14:51

質問

ストリーム処理と従来のメッセージ処理の基本的な違いは何ですか?ストリーム処理にはkafkaが適していると言われますが、基本的にkafkaはActivMQやRabbitMQなどと同様のメッセージングフレームワークです。

なぜ一般的にActiveMQはストリーム処理にも適していると言わないのでしょうか。

コンシューマでメッセージが消費される速度が、ストリームかどうかを決めるのでしょうか?

どのように解決するのですか?

従来のメッセージ処理では、メッセージに対して簡単な計算を適用します -- ほとんどの場合、メッセージごとに個別に行います。

ストリーム処理では、複数の入力ストリームと複数のレコード(つまりメッセージ)に対して同時に複雑な処理を適用します(集約や結合のような)。

さらに、従来のメッセージングシステムは、quot;back in time"つまり、すべての購読した消費者に配信された後にメッセージを自動的に削除することができませんでした。これに対し、Kafkaはプルベースモデル(消費者がKafkaからデータを引き出す)を採用しているため、設定可能な時間内はメッセージを保持します。これにより、コンシューマはメッセージを何度も巻き戻して消費することができ、新しいコンシューマを追加すれば、履歴をすべて読み込むことができる。このように、ストリーム処理では、より複雑なアプリケーションを実現することが可能です。また、ストリーム処理は必ずしもリアルタイム処理ではなく、無限の入力ストリームを処理するものです(有限の入力に適用されるバッチ処理とは対照的です)。

そして、KafkaはKafka ConnectとStreams APIを提供しています -- つまり、単なるメッセージング/パブサブシステムではなく、ストリーム処理プラットフォームなのです(たとえコアでこれを使用していたとしても)。