Flinkの紹介、特徴、および他のビッグデータフレームワークとの比較

フリンクとは

データ量が急増する時代にあって、さまざまなビジネスシナリオで大量のビジネスデータが生成され、これらの継続的に生成されるデータをどのように効果的に処理するかが、今日のほとんどの企業が直面している問題となっています。現在、人気のあるビッグデータ処理エンジンであるApache Sparkは、基本的に、現在のビッグデータ処理標準としてMapReduceに取って代わりました。ただし、リアルタイムのデータ処理の場合、ApacheSparkのSpark-Streamingにはまだパフォーマンスを改善する余地があります。Spark-Streamingのストリームコンピューティングは、本質的にバッチ(マイクロバッチ)コンピューティングです。ApacheFlinkは、オープンで継続的に開発されているテクノロジーの中で、高スループット、低遅延、および高性能を同時にサポートできる純粋なリアルタイム分散処理フレームワークです。近年のソースコミュニティ。

フリンクの定義

Apache Flinkは、制限のないデータストリームと制限のあるデータストリームでステートフルコンピューティングを行うためのフレームワークおよび分散処理エンジンです。Flinkは、すべての一般的なクラスター環境で実行でき、メモリ速度と任意のスケールで計算を実行できます。
Apache Flinkは、制限のないデータストリームと制限のあるデータストリームでステートフル計算を行うためのフレームワークおよび分散処理エンジンです。Flinkは、すべての一般的なクラスター環境で実行され、メモリ内の速度と任意のスケールで計算を実行するように設計されています。

有界流と非有界流

無制限のフロー:フローの開始は定義されていますが、フローの終了は定義されていません。それらは無限にデータを生成します。無制限のフローデータは継続的に処理する必要があります。つまり、データは取り込んだ直後に処理する必要があります。入力は無限であり、入力はいつでも終了しないため、すべてのデータが到着するまで待ってから処理することはできません。制限のないデータを処理するには、通常、イベントが発生する順序など、特定の順序でイベントを取り込む必要があります。これにより、結果の完全性を推測できます。
境界フロー:フローの開始の定義があり、フローの終了の定義があります。境界フローは、すべてのデータが取り込まれた後に計算できます。制限されたストリーム内のすべてのデータを並べ替えることができるため、順番に取り込む必要はありません。有界ストリーム処理は通常、バッチ処理と呼ばれます

ステートフルコンピューティングアーキテクチャ

データフローは、時系列で一連の実際のイベントを継続的に生成することです。データ生成の過程で直接計算を実行して統計結果を生成することは困難です。これは、システムに非常に高い要件を課すだけでなく、高性能、高スループット、低遅延などの多くの目標を達成する必要があるためです。
ステートフルフローコンピューティングアーキテクチャ(図に示す)は、企業のニーズをある程度満たすために提案されています。リアルタイムのストリーミングデータに基づいて、すべての計算プロセスの状態が維持されます(いわゆる状態は中間です)。結果)、新しいデータがシステムに入力されるたびに、中間状態の結果に基づいて計算が実行され、最終的に正しい統計結果が生成されます。
ステートフルコンピューティングの最大の利点は、完全な計算のために外部ストレージから元のデータを取得する必要がないことです(この計算方法は非常に高価です)。同時に、ユーザーはデータウェアハウスからデータ統計結果を取得するためにさまざまなバッチ計算ツールをスケジュールおよび調整する必要がありません。これにより、システムの他のフレームワークへの依存を大幅に減らし、データ計算プロセスでの時間損失とハードウェアストレージを減らすことができます。

Flinkを使用する理由

ステートフルフローコンピューティングは、データプラットフォームとしての企業のアーキテクチャモデルになりつつあります。現在、コミュニティの観点からは、ApacheFlinkしか満足できません。Flinkは、Google Dataflowストリーミングコンピューティングモデルを実装することにより、高スループット、低レイテンシ、高性能のリアルタイムストリーミングコンピューティングフレームワークを実現します。同時に、Flinkは、フォールトトレラント性の高い状態管理をサポートし、計算プロセス中のシステム異常による状態の喪失を防ぎます。Flinkは、分散スナップショットテクノロジのチェックポイントを介して状態の永続的なメンテナンスを定期的に実装します。システムがダウンしているか異常です正しい結果を計算できます

アプリケーションシナリオ

理論的には、Flinkは、金融取引データ、インターネット注文データ、GPS測位データ、センサー信号、モバイル端末によって生成されたデータ、通信信号データなどのすべてのビッグデータシナリオ、および使い慣れたネットワークトラフィックで使用できます。モニタリングとサーバーログデータ。これらのデータの最も一般的な機能は、さまざまなデータソースからリアルタイムで生成され、ダウンストリームの分析システムに送信されることです。主に、リアルタイムのインテリジェントな推奨、複雑なイベント処理、リアルタイムの不正検出、リアルタイムのデータウェアハウスとETLタイプ、ストリーミングデータ分析タイプ、リアルタイムのレポートタイプ、およびその他のリアルタイムのビジネスシナリオが含まれます。

機能と利点

Flinkには、次の機能があります
。1。高スループット、低遅延、および高パフォーマンスを同時にサポートします
。Flinkは、現在、高スループット、低遅延、および高パフォーマンスを統合する、オープンソースコミュニティで唯一の分散ストリームデータ処理フレームワークです。Apache Sparkと同様に、高スループットと高性能の両方の機能のみを考慮に入れることができますが、ストリーミングコンピューティングフレームワークのApache Stormは、低遅延と高性能の機能のみをサポートできますが、高スループットの要件を満たすことはできません
。2 。イベント時間の概念がサポートされています。
ほとんどの場合、フレームウィンドウの計算では、システム時間(Process Time)が使用されますこれは、イベントが処理のために計算フレームに送信されるときのシステムホストの現在の時間でもあります。Flinkは、イベント時間セマンティクスに基づくウィンドウ計算、つまりイベントが生成された時間を使用することをサポートできます。このイベント駆動型メカニズムにより、ストリーミングシステムは、イベントが順不同で到着した場合でも正確な結果を計算し、イベントを維持できます。元の世代の、できるだけネットワーク伝送またはハードウェアシステムの影響を回避する
。3.サポートステートフル計算
いわゆる状態ストリーミング計算プロセス中にメモリやファイルシステム内のオペレータの中間結果データを保存することです、次のイベントを待つイベントがオペレーターに入った後、前の状態から得られた中間結果から現在の結果を計算できるため、毎回すべての元のデータに基づいて結果を計算する必要はありません。この方法システムのパフォーマンスを大幅に向上させ、データ計算を削減します。プロセスリソースの消費
4.柔軟性の高いウィンドウ操作をサポートします。
ストリーム処理アプリケーションでは、データは連続的であり、過去1分間にWebページをクリックしたユーザーの数をカウントするなど、ストリームデータの特定の範囲の集計計算をウィンドウから実行する必要があります。この場合、定義する必要があります。直前のデータを収集し、このウィンドウでデータを再計算するためのウィンドウ。Flinkは、ウィンドウを時間、カウント、セッション、およびデータ駆動に基づいてウィンドウ操作に分割します。ウィンドウは、複雑なストリーミングモードをサポートするために、柔軟なトリガー条件でカスタマイズできます。ユーザーは、さまざまなウィンドウトリガーメカニズムを定義できます。さまざまなニーズを満たすために
5.障害-軽量分散スナップショット(CheckPoint)に基づくトレラント
Flinkは、分散方式で数千のノードで実行でき、大規模なコンピューティングタスクのプロセスを小さなコンピューティングプロセスに分解してから、並列ノードに分散して処理します。タスクの実行中に、イベント処理プロセスのエラーにより、ノードのダウンタイム、ネットワーク送信の問題、ユーザーのアップグレードや修復の問題によるコンピューティングサービスの再起動など、データの不整合が自動的に検出される場合があります。このような場合、分散スナップショットテクノロジーに基づくチェックポイントを介して、実行プロセスの状態情報が永続的に保存されます。タスクが異常に停止すると、Flinkはチェックポイントからタスクを自動的に復元して、データが処理中であることを確認できます。 -1回6.JVMに
基づく独立したメモリ管理の実装
Flinkは、システムへのJVM GCの影響を最小限に抑えるために、独自のメモリ管理メカニズムを実装します。さらに、Flinkはシリアル化/逆シリアル化メソッドを使用してすべてのデータオブジェクトをバイナリデータに変換し、メモリに保存します。データストレージのサイズを削減しながら、メモリスペースをより効果的に使用し、GCによるパフォーマンスの低下を減らすことができます。異常なタスクであるため、Flinkは他の分散処理フレームワークよりも安定しており、JVM GCなどの問題が原因でアプリケーション全体の動作に影響を与えることはありません
。7。ポイントの保存(ポイントの保存)
7 * 24時間実行されるストリーミングアプリケーションの場合、データは継続的にアクセスされます。一定期間内にアプリケーションを終了すると、データが失われたり、クラスターバージョンのアップグレード、運用と保守のシャットダウンなどの計算結果が不正確になる可能性があります。 。Flinkは、保存ポイントテクノロジを使用して、タスク実行のスナップショットをストレージメディアに保存します。タスクが再起動すると、保存された保存ポイントから元の計算状態を直接復元できるため、タスクはシャットダウン前の状態で実行を継続できます。 Save Pointsテクノロジーにより、ユーザーはリアルタイムストリーミングアプリケーションをより適切に管理および運用できます。

ストリーミングコンピューティングフレームワークの比較

コンピューティングエンジンの開発は、MapReduceの第1世代から、有向非巡回グラフに基づくTezの第2世代、メモリコンピューティングに基づくSparkの第3世代、そしてFlinkの第4世代まで、いくつかのプロセスを経てきました。次のようなさまざまなフレームワークの比較:
ここに画像の説明を挿入

モデル: StormとFlinkは実際にはデータを1つずつ処理していますが、Trident(Stormのカプセル化フレームワーク)とSpark Streamingは実際には小さなバッチであり、一度にデータのバッチ(小さなバッチ)を処理します。
API: StormとTridentはどちらも開発に基本的なAPIを使用し、操作は比較的複雑です。一方、Spark StreamingとFlinkはどちらもカプセル化された高階関数を提供し、直接使用できるため、より便利です。
保証時間:データ処理に関しては、Stormは少なくとも1回は処理できますが、1回だけ処理することを保証することはできません。これにより、データ処理が繰り返されるという問題が発生します。したがって、カウント要件の場合、エラーが発生する可能性があります。 Tridentは、トランザクションを通じて正確性を保証できます。SparkStreamingやFlinkと同様に、データは1回だけ処理されます。
フォールトトレランスメカニズム: StormとTridentはACKメカニズムを介してデータのフォールトトレランスを実現でき、SparkStreamingとFlinkはCheckPointメカニズムを介してフォールトトレランスを実現できます。
状態管理:状態管理はStormに実装されていません。SparkStreamingはDStreamベースの状態管理を実装し、TridentとFlinkは操作ベースの状態管理を実装します。
レイテンシー:データ処理のレイテンシーを示します。StormとFlinkはデータを受信するとデータを処理するため、データ処理のレイテンシーは非常に低くなります。一方、TridentとSpark Streamingはどちらも小さなバッチであり、それらのデータは処理されます。システムの待ち時間は比較的長くなります。
スループット: Stormのスループットは実際には低くありませんが、他のいくつかのフレームワークと比較して低く、Tridentは中程度であり、SparkStreamingとFlinkのスループットは比較的高くなっています。

おすすめ

転載: blog.csdn.net/zhangxm_qz/article/details/108112717