web-dev-qa-db-ja.com

KafkaまたはSNSまたは他の何か?

初心者からの質問であれば申し訳ありません。しかし、私は何を使うべきかを理解しようとしています。私の知る限りKafkaは:

Apache Kafkaは分散パブリッシュ/サブスクライブメッセージングシステムです。

また、SNSはpub/subシステムでもあります。

私の目標は、いくつかのサーバーに分散されるアプリケーションで、AWS上のキューメッセージングシステムを使用することです。ところで(主な言語はPythonです)。また、Amazonにあるため、最初に考えたのはSNSとSQSを使用することでした。しかし、AWSで多くの人がKafkaを使用しているのを見ました。他の利点とは何ですか?

43
Vor

KafkaAmazon SQS / Amazon SNS のユースケースはまったく異なります。

あなたが書いたように、Kafkaは分散パブリッシュ/サブスクライブシステムです。非常に高いスループットを実現するように設計されており、1秒あたり数千のメッセージを処理します。もちろん、自分でセットアップしてクラスタ化する必要があります。複数のリーダーをサポートしており、任意の時点でメッセージのストリームに「追いつく」ことができます(メッセージがまだディスク上にある限り)。キュー(コンシューマグループを使用)とトピックの両方として使用できます。

重要な特徴は、メッセージを「処理済み」として選択的に確認できないことです。唯一のオプションは、特定のオフセットまでのすべてのメッセージを確認することです。

一方、SQS/SNS:

  • セットアップなし/メンテナンスなし
  • キュー(SQS)またはトピック(SNS)のいずれか
  • さまざまな制限(サイズ、メッセージの有効期間など)
  • スループットの制限:バッチおよび同時要求を行うことができますが、それでも高いスループットを達成するには費用がかかります
  • メッセージが複製されるかどうかはわかりません。ただし、SQSでの少なくとも1回の保証配信では、
  • SNSには、電子メール、SMS、SQS、HTTP組み込みの通知があります。 Kafkaでは、おそらく自分でコーディングする必要があります。
  • 「メッセージストリーム」の概念はありません

全体として、SQS/SNSは、メッセージの量が少ない単純なタスクとワークロードに適しています。

59
adamw

これは古典的なトレードオフです。

AWSツール(SQS、SNS)

これらはセットアップが簡単で、アーキテクチャの残りの部分と統合できます。特に、そのほとんどが既にAWSで実行されている場合はそうです。また、最初はモデルが進むにつれて良い給料が支払われるので、おそらくより安くなりますが、コストも同様にスケーリングしないので、それについて考える必要があります。

アパッチカフカ

ここでは、非常に人気のある(トレンディではない)分散型(多くのスケーリングを行うと思われる場合に重要です)PUB/SUBモデルを使用しています。パイプを通過するデータの分析を実行することは非常に一般的であり、通常はSOAアーキテクチャを使用すると、メッセージを消費する多数の小さなサービスを使用できるため、また、キューからデータを削除せずにそれらを実行します。また、構成オプションのlotを取得できるため、ユースケースに応じて、ニーズに合わせて微調整できます。 、しかし今後最適化されたサービス。

概要

これは、開発の速度と開発の容易さに対する古典的なトレードオフであり、最高の非常にモジュール化されたパーソナライズされたソリューションです。

個人的なアドバイス

何かをプロトタイピングする場合は、開発の速度を優先して、AWSツールを使用してください。要件が凍結されており、かなりの規模が必要な場合は、間違いなくkafkaを使用してください。また、私は世界をより良くするオープンソースを使用することを大いに信じていますが、それは使用する最大の議論ではありません。

26
nichochar