注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Apache Flink は、低レイテンシで無限のデータセットを処理できる分散計算エンジンであり、一般的なストリーミングワークフローを処理できます。Foundry ストリーミングは、ユーザーコードやオントロジーをリアルタイムで更新するストリーミング時系列データの取り込みなど、プラットフォーム内の他のストリーミングアプリケーションを実行するための基盤エンジンとして Flink を使用します。
ユーザーのストリーミングユースケースに追加のジョブ構成が必要かどうかを理解するためには、Flink の動作についてある程度理解しておくと役立ちます。
Flink に関するより詳細なドキュメントは Flink homepage ↗ で見つけることができます。
すべてのストリーミングジョブは、データソースに対する一連の操作として記述され、結果をデータシンクに書き込みます。これらの操作には、集計や結合、文字列解析や算術などの行レベルのアクションが含まれます。各操作は Flink によって Operator 抽象として表現されます。Flink では、ソースとシンクもオペレーターによって記述されます。
Flink ジョブは内部的に「ジョブグラフ」または「論理グラフ」として表現されます。ジョブグラフはオペレーターで構成されるノードを持つ有向グラフであり、エッジがオペレーター間の関係を定義します。ジョブが Flink に提出されると、Flink はジョブグラフを作成します。Foundry Job Tracker のジョブの Details セクションにユーザーの Flink ジョブのジョブグラフのプレビューが表示されます。
ジョブを実行する際、Flink は論理グラフを 物理グラフ に変換します。これは、オペレーターが計算実行時にどのように実行されるかを表すものです。物理グラフは タスク で構成され、これは Flink ジョブの基本的な作業単位であり、オペレーターの一つのインスタンスまたは複数のオペレーターが連結されたものを表すことができます。
Spark のように、Flink の実行時アーキテクチャには異なるタイプのワーカーが含まれます。Spark がジョブを調整および管理するためにドライバーを使用し、ジョブタスクを実行するためにエグゼキューターを使用するのに対し、Flink は Job Managers と Task Managers を使用し、これらは Spark のドライバーとエグゼキューターにおおよそ相当する役割を果たします。
Flink の Job Manager は、タスクのスケジューリングとリソースの割り当て、完了したタスクや失敗したタスクの処理、ジョブのチェックポイント と障害回復の調整、ジョブ情報へのプログラム的アクセスの提供を担当します。通常、アクティブな Job Manager はリーダー1つだけであり、回復不能なエラーが発生した場合に備えてバックアップが保持されます。
Flink の Task Manager は、タスクの実行およびストリーム間のデータのバッファリングと交換を担当します。常に少なくとも1つの Task Manager が存在しますが、ストリーム処理を並列化するために複数存在することがあります。Task Manager が非常に大きなレコードを処理する必要がある場合、追加のリソースが必要になることがあります。ストリームのスループットが非常に高い場合、ジョブの並列度を増やす必要があり、結果として Task Manager の数が増えることになります。
一部の Flink 操作は単一のイベントを個別に処理するだけでよいですが、他の操作は複数のイベントにわたって情報を記憶する必要があります。これらはステートフル操作です。ステートフル操作の例としては以下のようなものがあります。
ステートフル操作に必要な情報は ジョブ状態 として知られ、Flink はステートバックエンドを使用してこれを保存します。状態は Task Manager によって管理および保存され、Job Manager によってチェックポイントの形で調整されます。より大きな状態(例えば、非常に大きなウィンドウを持つ集計や結合など)を持つ場合、Job Manager と Task Manager に追加のリソースが必要になることがあります。