web-dev-qa-db-ja.com

Apache SamzaとApache Stormは、ユースケースでどこが異なりますか?

私は偶然に遭遇しました この記事 コントラストを行うと主張しているSamza Stormとは異なりますが、実装の詳細に対処しているようです。

これらの2つの分散型計算エンジンのユースケースはどこが違うのですか?各ツールはどのような仕事に適していますか?

30
blz

Apache StormとApacheの最大の違いSamzaは、データをストリーミングして処理する方法に起因します。

Apache Stormはトポロジを使用してリアルタイムで計算を行い、マスターノードがコードを実行するワーカーノード間でコードを分散するクラスターにフィードを送ります。トポロジーでは、データはキーと値のペアの不変のセットとしてデータストリームを吐き出す噴出口間で渡されます。

Apache Stormのアーキテクチャは次のとおりです。 enter image description here

Apache Samzaメッセージは一度に1つずつ到着するときにメッセージを処理することによりストリームします。ストリームは、それぞれが一意のIDを持つ順序付けられたシーケンスであるパー​​ティションに分割されます。バッチ処理をサポートし、通常はHadoopのYARNおよびApache Kafka。

Apache Samzaのアーキテクチャは次のとおりです。 enter image description here

各システムが特定の機能を実行する具体的な方法については、以下をご覧ください。

ユースケース

Apache SamzaはLinkedInによって作成されました。

ソフトウェアエンジニアが書いた ポストサイト

LinkedInで数年間運用されており、現在、複数のデータセンターの数百台のマシンで稼働しています。最大のSamzaジョブは、トラフィックのピーク時に1秒あたり1,000,000を超えるメッセージを処理しています。

使用されるリソース:

嵐vs。Samza比較

StormとSamzaの有用なアーキテクチャリファレンス

21
mprithibi

ええと、私はこれらのシステムを数か月間調査してきましたが、それらのユースケースが大きく異なっているとは思いません。代わりにこれらの線に沿ってそれらを比較するのが最善だと思います:

  1. Age: Stormは古いプロジェクトであり、このスペースの元のプロジェクトであるため、一般的にはより成熟していて、テスト済みです。 Samzaは、Stormから学んだ教訓から情報を得たように思われる新しい第2世代プロジェクトです。
  2. Kafka: Samza Kafkaエコシステムから成長し、非常にカフカ中心です。たとえば、ドキュメントには、 Kafkaと同様の分割、順序付け、再生のセマンティクスを提供する限り、異なるメッセージングシステムのプラグインを許可します。古いシステムであるStormは、Kafkaでの作業に特化していません。 。
  3. 複雑さ: Samza、それはその環境についてより強力な仮定をしているため(「Kafkaのように機能する限り、好きなインフラストラクチャを持つことができます」)、そして一部はそれが新しいため、一般的にシンプルに感じますストームよりもいい意味で。しかし、おそらくSamzaの方が簡単な方法の1つとして、(意図的に?)Stormのトポロジ(複雑な実行グラフ。複雑なマルチステージプロセッサが必要な場合は、Kafkaを介して通信する独立したタスクとして実装する必要があります。これには利点と欠点がありますが、Samza Stormはより多くのオプションを提供しますが、.
  4. 状態管理:多くのStormアプリケーションは、着信タプルを処理するために大量の状態を維持する必要がある場合、Redisのような外部ストアを使用する必要があります。この状況は、Samzaのデザインの動機となった主なものの1つであるようです。 Samzaの最も特徴的な機能の1つは、必要な場合にこの目的で使用する独自のローカルディスクベースのキー/値ストアをタスクに提供することです。
42
Luis Casillas

Storm、SparkおよびSamzaの使用例(およびアーキテクチャ)の比較を提供するTony Sicilianiによる記事です。実際の使用例へのApache.orgリンクも以下に提供されています。

https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/

SamzaおよびStormの使用例に関して、彼は次のように書いています。

3つのフレームワークはすべて、連続した大量のリアルタイムデータを効率的に処理するのに特に適しています。どちらを使用するのですか?厳しいルールはなく、せいぜいいくつかの一般的なガイドラインです。

Apache Samza

処理する状態が大量にある場合(パーティションごとに数ギガバイトなど)、Samzaは同じマシン上でストレージと処理を同じ場所に配置するため、処理できない状態で効率的に作業できますこのフレームワークは、プラグイン可能なAPIによって柔軟性も提供します。デフォルトの実行、メッセージング、およびストレージエンジンはそれぞれ、選択した代替手段で置き換えることができます。さらに、異なるコードベースを持つ異なるチームからの多数のデータ処理段階がある場合、 Samzaの細粒度ジョブは、リップルの影響を最小限に抑えて追加/削除できるため、特に適しています。

Samzaを使用しているいくつかの企業:LinkedIn、Intuit、Metamarkets、Quantiply、Fortscale…

Samzaユースケースリスト: https://cwiki.Apache.org/confluence/display/SAMZA/Powered+By

Apache Storm

増分計算を可能にする高速イベント処理システムが必要な場合は、Stormで十分です。さらにクライアントが結果を同期的に待機している間にオンデマンドで分散計算を実行する必要がある場合は、すぐに使用できる分散RPC(DRPC)があります。最後に重要なことですが、StormはApache Thriftを使用しているため、トポロジを任意のプログラミング言語で記述できます。ただし、状態の永続化や正確に1回の配信が必要な場合は、マイクロバッチ処理も提供する高レベルのTrident APIを確認する必要があります。

Stormを使用しているいくつかの企業:Twitter、Yahoo!、Spotify、The Weather Channel…

ストームのユースケースリスト: http://storm.Apache.org/documentation/Powered-By.html

10
Grokify