Apache-storm-core-concepts

提供:Dev Guides
移動先:案内検索

Apache Storm-コアコンセプト

Apache Stormは、リアルタイムデータの生ストリームを一方の端から読み取り、それを一連の小さな処理ユニットに渡し、もう一方の端で処理済み/有用な情報を出力します。

次の図は、Apache Stormのコアコンセプトを示しています。

コアコンセプト

Apache Stormのコンポーネントを詳しく見てみましょう-

Components Description
Tuple Tuple is the main data structure in Storm. It is a list of ordered elements. By default, a Tuple supports all data types. Generally, it is modelled as a set of comma separated values and passed to a Storm cluster.
Stream Stream is an unordered sequence of tuples.
Spouts Source of stream. Generally, Storm accepts input data from raw data sources like Twitter Streaming API, Apache Kafka queue, Kestrel queue, etc. Otherwise you can write spouts to read data from datasources. “ISpout" is the core interface for implementing spouts. Some of the specific interfaces are IRichSpout, BaseRichSpout, KafkaSpout, etc.
Bolts Bolts are logical processing units. Spouts pass data to bolts and bolts process and produce a new output stream. Bolts can perform the operations of filtering, aggregation, joining, interacting with data sources and databases. Bolt receives data and emits to one or more bolts. “IBolt” is the core interface for implementing bolts. Some of the common interfaces are IRichBolt, IBasicBolt, etc.

「Twitter分析」のリアルタイムの例を取り上げて、Apache Stormでどのようにモデル化できるかを見てみましょう。 次の図は、構造を示しています。

Twitter分析

「Twitter分析」への入力は、Twitter Streaming APIからのものです。 Spoutは、Twitter Streaming APIを使用してユーザーのツイートを読み取り、タプルのストリームとして出力します。 注ぎ口からの1つのタプルには、twitterユーザー名と、カンマ区切りの値としての1つのツイートがあります。 次に、このタプルのスチームがBoltに転送され、Boltはツイートを個々の単語に分割し、単語数を計算し、構成されたデータソースに情報を保持します。 これで、データソースをクエリすることで簡単に結果を取得できます。

トポロジー

注ぎ口とボルトは互いに接続され、トポロジーを形成します。 リアルタイムアプリケーションロジックは、Stormトポロジ内で指定されます。 簡単に言えば、トポロジは、頂点が計算であり、エッジがデータのストリームである有向グラフです。

単純なトポロジは、スパウトから始まります。 Spoutは、データを1つ以上のボルトに放出します。 ボルトは、最小の処理ロジックを持つトポロジ内のノードを表し、ボルトの出力は入力として別のボルトに出力できます。

Stormは、トポロジを強制終了するまで、常にトポロジを実行し続けます。 Apache Stormの主な仕事は、トポロジーを実行することであり、特定の時間に任意の数のトポロジーを実行します。

タスク

これで、スパウトとボルトの基本的な考え方ができました。 それらはトポロジーの最小の論理ユニットであり、トポロジーは単一のスパウトとボルトの配列を使用して構築されます。 トポロジを正常に実行するには、特定の順序で適切に実行する必要があります。 Stormによるすべてのスパウトとボルトの実行は、「タスク」と呼ばれます。 簡単に言えば、タスクはスパウトまたはボルトの実行です。 所定の時間に、各スパウトとボルトは、複数の個別のスレッドで実行される複数のインスタンスを持つことができます。

労働者

トポロジは、複数のワーカーノードで分散して実行されます。 Stormは、すべてのワーカーノードでタスクを均等に分散します。 ワーカーノードの役割は、ジョブをリッスンし、新しいジョブが到着するたびにプロセスを開始または停止することです。

ストリームのグループ化

データの流れは、スパウトからボルト、またはあるボルトから別のボルトに流れます。 ストリームのグループ化は、トポロジ内でのタプルのルーティング方法を制御し、トポロジ内のタプルフローを理解するのに役立ちます。 以下に説明するように、4つの組み込みグループがあります。

シャッフルグループ

シャッフルグループでは、ボルトを実行するすべてのワーカーに均等な数のタプルがランダムに分散されます。 次の図は、構造を示しています。

シャッフルグループ化

フィールドのグループ化

タプル内の同じ値を持つフィールドはグループ化され、残りのタプルは外部に保持されます。 次に、同じフィールド値を持つタプルが、ボルトを実行している同じワーカーに転送されます。 たとえば、ストリームがフィールド「word」でグループ化されている場合、同じ文字列「Hello」を持つタプルは同じワーカーに移動します。 次の図は、フィールドのグループ化の仕組みを示しています。

フィールドのグループ化

グローバルなグループ化

すべてのストリームをグループ化し、1つのボルトに転送できます。 このグループ化は、ソースのすべてのインスタンスによって生成されたタプルを単一のターゲットインスタンスに送信します(具体的には、IDが最も小さいワーカーを選択します)。

グローバルグループ

すべてのグループ化

すべてのグループ化は、各タプルの単一のコピーを受信ボルトのすべてのインスタンスに送信します。 この種類のグループ化は、ボルトに信号を送信するために使用されます。 すべてのグループ化は、結合操作に役立ちます。

すべてのグループ化