初心者からの質問であれば申し訳ありません。しかし、私は何を使うべきかを理解しようとしています。私の知る限りKafkaは:
Apache Kafkaは分散パブリッシュ/サブスクライブメッセージングシステムです。
また、SNSはpub/subシステムでもあります。
私の目標は、いくつかのサーバーに分散されるアプリケーションで、AWS上のキューメッセージングシステムを使用することです。ところで(主な言語はPythonです)。また、Amazonにあるため、最初に考えたのはSNSとSQSを使用することでした。しかし、AWSで多くの人がKafkaを使用しているのを見ました。他の利点とは何ですか?
Kafka と Amazon SQS / Amazon SNS のユースケースはまったく異なります。
あなたが書いたように、Kafkaは分散パブリッシュ/サブスクライブシステムです。非常に高いスループットを実現するように設計されており、1秒あたり数千のメッセージを処理します。もちろん、自分でセットアップしてクラスタ化する必要があります。複数のリーダーをサポートしており、任意の時点でメッセージのストリームに「追いつく」ことができます(メッセージがまだディスク上にある限り)。キュー(コンシューマグループを使用)とトピックの両方として使用できます。
重要な特徴は、メッセージを「処理済み」として選択的に確認できないことです。唯一のオプションは、特定のオフセットまでのすべてのメッセージを確認することです。
一方、SQS/SNS:
全体として、SQS/SNSは、メッセージの量が少ない単純なタスクとワークロードに適しています。
これは古典的なトレードオフです。
これらはセットアップが簡単で、アーキテクチャの残りの部分と統合できます。特に、そのほとんどが既にAWSで実行されている場合はそうです。また、最初はモデルが進むにつれて良い給料が支払われるので、おそらくより安くなりますが、コストも同様にスケーリングしないので、それについて考える必要があります。
ここでは、非常に人気のある(トレンディではない)分散型(多くのスケーリングを行うと思われる場合に重要です)PUB/SUBモデルを使用しています。パイプを通過するデータの分析を実行することは非常に一般的であり、通常はSOAアーキテクチャを使用すると、メッセージを消費する多数の小さなサービスを使用できるため、また、キューからデータを削除せずにそれらを実行します。また、構成オプションのlotを取得できるため、ユースケースに応じて、ニーズに合わせて微調整できます。 、しかし今後最適化されたサービス。
これは、開発の速度と開発の容易さに対する古典的なトレードオフであり、最高の非常にモジュール化されたパーソナライズされたソリューションです。
何かをプロトタイピングする場合は、開発の速度を優先して、AWSツールを使用してください。要件が凍結されており、かなりの規模が必要な場合は、間違いなくkafkaを使用してください。また、私は世界をより良くするオープンソースを使用することを大いに信じていますが、それは使用する最大の議論ではありません。