嵐、SparkStreamingを越えて - FLINKどのようにステートフル・コンピューティング

ファイル

2例に流れステートレスと状態を計算しました。各個々のイベント状態観察のない計算は、ストーム・コンピューティング・フレームワークは、将来への状態、各メッセージではなく、前後いずれかであり、問​​題ではありません。例えば、我々のセンサの電力系統データ受信、電圧が240Vを超えたときに警報、ステートレスなデータです。我々は、このような三相回路として、我々は三相が一定値よりも高い決定し、複数の電圧を決定する必要がある場合は、状態が計算される保存する必要があります。3つのレコードを介して送信されたためです。

ファイル

嵐は、それらの計算の状態を達成するように決定された低遅延の場合を確実に、メモリ変数またはカスタムRedisのシステムを用いて、例えば、計算の状態で実装する必要があり、そのようなFLINKを必要とせず、ストリームの新世代として処理システム、非常に真剣にFLINK。

一貫性

実際には、メッセージパッシングは正しいです。ストリーム処理では、一貫性の3つのレベルに分けました。

  • で最大1回:最も一度、あなたが失われることがあります。

  • AT-少なくともワンス:少なくとも一回、繰り返してもよいし、複数の操作の計算が結果に影響を与える可能性がある場合。

  • まさにワンス:一度だけ確実にするために、このようにして得られた結果は、最も正確です。

最初の保証正確ワンスシステム(嵐トライデントとスパークストリーミング)が、これらの二つの側面のパフォーマンスと表現力の面で高い価格を支払いました。まさにワンス確保するために、これらのシステムはすべて、それぞれのバッチ処理を成功するか、すべて失敗のどちらかということを保証するために、各レコードのアプリケーションロジックに別々に適用されますが、同時にハンドル複数(バッチ)レコードにすることはできません。これは、結果を得るために前に、あなたは記録処理が終了するの数を待たなければなりませんつながります。したがって、ユーザは、多くの場合、2つのストリーム処理フレームを使用する必要があり、より複雑なインフラをもたらす、(正確ワンス保証するために、別のプロセスは、各要素のための待ち時間を作るために使用されます)。

しかし、FLINKは、この問題を解決します。

チェックポイントのメカニズム

それはFLINKが正確にワンス保証、およびパフォーマンスを犠牲にすることなくできることができますので、FLINKチェックポイントは、最も貴重な技術革新の一つです。

チェックポイントのFLINK中心的な役割をしても、顔中断されたプログラムで、適切な状態を確保するためですが、また正しいです。後に、この基本的なポイントを覚えて、私たちは、チェックポイントを見て実行する方法の一例です。FLINKは、状態を定義するためのツールをユーザに提供します。たとえば、このScalaのプログラムは、最初のフィールド(文字列)入力レコードのカウント状態によってグループ化され、2番目のフィールドを維持しています。

val stream: DataStream[(String, Int)] = ... 
 
val counts: DataStream[(String, Int)] = stream   
.keyBy(record => record._1)   
.mapWithState((in: (String, Int), count: Option[Int]) =>     
  count match {       
    case Some(c) => ( (in._1, c + in._2), Some(c + in._2) )       
    case None => ( (in._1, in._2), Some(in._2) )     
})

次いでkeyByの最初の要素(文字列)に応じてグループレコードを使用オペレータ、再パーティション・キーに基づいてデータ、及び次のオペレータに記録を送信:ステートフルプログラムは、2つの演算子を有しますマップ演算子(mapWithState)。各素子の受信時にオペレータ地図データは、第二の入力レコードのフィールドが更新要素が出射され、従来の合計に加えました。

ファイル

6入力ストリームが記録されたチェックポイントバリア(障壁のチェックポイントは)離れて、マップのオペレータ状態の全ては、(カウントがまだ開始されていない)0です。レコードのすべてのキーはトップマップハンドルオペレータとなり、全ての記録キーマップBは、中間層処理のオペレータになり、すべてのCキーレコードは、マップ演算処理の底であろう。

メッセージ送信システムカフカからの入力ストリームの場合、この単離された位置がオフセットされています。

ファイル

チェックポイントは、オペレータ間で流れに対するバリアとして通常通りに記録しました。地図オペレータ3は、チェックポイントの記録と時間の障壁を受信する前に処理すると、彼らは非同期的に安定したストレージに書き込まれた状態になります。

ファイル

何の障害が発生していない場合は、FLINKチェックポイントのオーバーヘッドは、チェックポイント安定したストレージの速度によって決定され、利用可能な帯域幅は極めて小さいです。

チェックポイント操作が失敗した場合、特定のチェックポイントの後に成功する可能性があるため、FLINKは、チェックポイントを破棄し、うまく実行していきます。

ファイル

この場合、FLINKは、(新しい実行リソースを得ることができます)再トポロジーますが、入力ストリームは、最後のチェックポイントに戻って注ぎ、その後、状態を復元値を計算し、そこから継続し始めました。

ファイル

状態値マップ演算子を復元中FLINK入力ストリームは、チェックポイントバリア位置に巻き戻します。その後、FLINKはここからプロセスを再起動します。そうするレコードが処理された後、一貫した確保すると、マップのオペレータの失敗のステータス値は発生しません。

チェックポイントバリアスナップショットアルゴリズムのFLINK正式名称は、非同期(非同期バリアスナップショット)です。

セーブポイント

ステータスバージョン管理

FLINKは、チェックポイントによって自動的にステータスを修正するための失敗した再記録する処理を生成しました。FLINKユーザーも意識的に別の機能によって状態のバージョンを管理することができ、この機能はセーブポイント(セーブポイント)と呼ばれています。

ポイントを保存し、自動的にFLINKによってトリガではなく、それはFLINKコマンドラインツールを介してユーザまたは手動でWebコンソールによってトリガされていること以外の点は、まったく同じように動作チェック、ユーザーではなく、ゼロから始めるよりも、セーブポイントからジョブを再開することができます。それは時間の節約、アプリケーションの状態の明確なバージョンであることを理解して保存するためのもう一つのポイント。

ファイル

図では、特定のアプリケーションがバージョンを実行しているV.0。私たちは、セーブポイントをトリガ、時間t1とt2でいました。したがって、これら2つの時間点を返すために、いつでも可能で、プログラムを再起動します。さらに重要なことは、あなたはセーブポイントからプログラムの修正されたバージョンを起動することができます。たとえば、(新しいバージョンV.1を想定して呼ばれる)アプリケーションのコードを変更して、時刻t1変更されたコードから実行し始めたことができます。

ファイル

アプリケーションのセーブポイントFLINK更新されたバージョンを使用してください。新しいバージョンが生成され、古いバージョンでセーブポイントから開始することができます。

エンドツーエンドの一貫性

ファイル

このアプリケーションのアーキテクチャでは、ステートフルなアプリケーションFLINK消費メッセージ・キューからのデータ、およびクエリのために、データ出力システムを書き込みます。

カフカからの入力データ、ストレージシステムの出力へのコンテンツ配信の状態の間に、どのようにそれを正確にワンス確保するには?これは、エンド一貫性と呼ばれています。出力ストレージシステムの要件、およびアプリケーションの種類に依存する方法で、達成するための二つの方法は基本的にあります。

(1)第一の方法は、シンク内の全ての出力リンクをバッファリングすることで、チェックポイント・レコード・シンクを受信すると、ストレージシステムに出力する「原子コミットメント」。この方法は、出力結果記憶システムのみ整合性を保証存在し、データの重複が発生しないことを保証します。本質的には、ストレージシステムの出力は、チェックポイントFLINKに関与することになります。これを行うには、出力ストレージシステムは、の「原子約束」する能力を持っている必要があります。

(2)第二の方法は、障害が発生した場合に再処理する必要性は、これらのデータが「ダーティ」であり得ることを念頭に、出力熱心ストレージシステムにデータを書き込むことである、と。障害が発生した場合は、「ダーティ」データカバレッジように、すべてのロールバック出力、入力とFLINKジョブに必要な、そしてすでに「汚い」データの出力に書き込まれ、削除します。なお、多くの場合、削除は実際には起こりませんでした。新しいレコードが単純に(むしろ出力に追加するよりも)古いレコードを上書きした場合、その後、「汚い」データは、チェックポイント間だけの簡単な存在であり、最終的に新しいデータで修正されます。

ストレージシステムの出力、及びFLINKの種類に応じて対応するコネクタは、複数の分離レベルのための一貫性、およびサポートを確実にするために終了する終了してもよいです。

もっとFLINK関連記事:

ビッグデータのStreaming-未来

大規模なデータ処理礎石-Googleデータフローのリアルタイム計算

将来のデータアーキテクチャ - ストリーム処理アーキテクチャに

時間のリアルタイム計算フレーム--Flinkスペースシャトル

FLINKクイックスタート - インストールと例を実行しています

大規模データのキング-Flinkリアルタイム処理

以下のように、よりリアルタイム計算、FLINK、カフカやその他の関連技術ボーエン、歓迎の注意がリアルタイムに計算ストリーミング:

ファイル

おすすめ

転載: www.cnblogs.com/tree1123/p/11454482.html