ジョブの開始前、または実行中にジョブのリソースを設定できます。このトピックでは、ジョブリソースの設定方法と、各モードのパラメータについて説明します。
注意事項
リソースを設定した後、変更を有効にするにはジョブを再起動する必要があります。
操作手順
-
リソース設定ページに移動します。
-
対象のワークスペースの [操作] 列で、[コンソール] をクリックします。
-
ページで、対象ジョブの名前をクリックします。
-
[設定] タブで、[リソース] セクションの右側にある [編集] をクリックします。
-
ジョブリソース情報を変更します。
リソースモード
説明
詳細
基本モード
基本モードでは、各 TaskManager の合計リソース (CPU と合計 JVM メモリ) を指定します。システムは
taskmanager.numberOfTaskSlots設定に基づいて、これらのリソースをすべてのスロットに均等に分散します。このモードは、ほとんどのシンプルなジョブに適しています。エキスパートモード
エキスパートモードでは、各スロット共有グループ (SSG) のリソースを設定します。Flink は各スロットに必要な仕様を計算し、リソースプールから一致する TaskManager とスロットを動的にリクエストします。粗粒度の割り当てではリソース使用率が低くなる可能性がある複雑なジョブの場合、細粒度のリソース制御を使用して各オペレーターを調整できます。これにより、リソース使用率が向上し、スループット要件を満たすことができます。
説明エキスパートモードは SQL ジョブでのみサポートされます。
TaskManager、JobManager、Task、スロットなどの概念の詳細については、Apache Flink Architecture ドキュメントをご参照ください。
-
[保存] をクリックします。
-
ジョブを再起動します。
基本モード (粗粒度)
|
パラメータ |
説明 |
|
並列度 |
ジョブの全体的な並列度です。 |
|
JobManager CPU |
安定した運用のために、JobManager には少なくとも 0.5 コアと 2 GiB のメモリが必要です。1 コアと 4 GiB を推奨します。最大値は 16 コアです。 |
|
JobManager Memory |
値の範囲は 2~64 GiB です。 |
|
TaskManager CPU |
安定した運用のために、TaskManager には少なくとも 0.5 コアと 2 GiB のメモリが必要です。1 コアと 4 GiB を推奨します。最大値は 16 コアです。 |
|
TaskManager Memory |
値の範囲は 2~64 GiB です。 |
|
Slots per TaskManager |
各 TaskManager のスロット数を指定します。 |
TaskManager JVM オーバーヘッド
基本モードでは、TaskManager メモリを設定すると、システムは自動的に一部を JVM オーバーヘッドとして確保します。デフォルトでは、JVM オーバーヘッドは TaskManager の合計メモリの 10% を占めます。この比率は、taskmanager.memory.jvm-overhead.fraction パラメーター (デフォルト: 0.1) によって制御されます。この割り当てを調整するには、[実行パラメーター設定] の [その他の設定] フィールドで taskmanager.memory.jvm-overhead.fraction を設定します。
TaskManager プロセスに対して報告される Resident Set Size (RSS) には、Page Cache は含まれません。TaskManager とオペレーティングシステムがメモリを競合する場合、メモリ不足 (OOM) エラーが発生する可能性があります。OS の Page Cache 使用に対応するために、計画した TaskManager メモリより少なくとも 400 MB の追加メモリを予約してください。
JobManager メモリの推奨事項と OOM のトラブルシューティング:
-
最小推奨構成 — 安定した運用を確保するために、JobManager には少なくとも 0.5 コアと 2 GiB のメモリを設定してください。本番ワークロードの場合、1 コアと 4 GiB を推奨します。
-
OOM のリスクしきい値 — JobManager のメモリ使用率が常に 80% 前後で推移している場合、ジョブは OOM エラーのリスクがあります。このリスクを軽減するために、割り当てられたメモリを増やしてください。
-
Paimon 同期シナリオ (Direct Buffer Memory OOM) — ジョブが Paimon に大量のデータを同期し、
JobManager Direct Buffer Memory OOMエラーが発生した場合、jobmanager.memory.off-heap.sizeをデフォルトの 128 MB から 512 MB 以上に増やします。このパラメーターは、[実行パラメーター設定] 配下の [その他の設定] フィールドで設定します。
次の式を使用してリソース要件を計算できます:
-
コンピューティングユニット (CU) の数 = MAX (JobManager と TaskManager の合計 CPU、JobManager と TaskManager の合計メモリ / 4)
-
実際の TaskManager 数 = ceil (並列度 / TaskManager あたりのスロット数)
-
TaskManager あたりの実際のスロット数 = 並列度 / 実際の TaskManager 数
-
除算結果は最も近い整数に切り上げます。
-
リソース設定はデフォルトの最大制限を超えることはできません。これらの制限の引き上げをリクエストするには、チケットを送信してください。
-
ジョブの [設定] タブの [実行パラメーター設定] セクションにある [その他の設定] フィールドで
numberOfTaskSlotsパラメーターを設定することもできます。この設定は [TaskManager ごとのスロット] フィールドと同じ効果がありますが、優先されます。
たとえば、並列度を 12 に、TaskManager あたりのスロット数を 4 に設定したとします。
この例では、[JobManager CPU] は 2 コア、[JobManager Memory] は 4 GiB、[TaskManager CPU] は 2 コア、[TaskManager Memory] は 4 GiB です。
Realtime Compute for Apache Flink コンソールでは、実際の TaskManager 数は 3 で、各 TaskManager には 4 つのスロットがあります。
実際の TaskManager 数と TaskManager あたりのスロット数は次のように計算されます:
-
実際の TaskManager 数 = ceil (設定された並列度 / 設定された TaskManager あたりのスロット数) = ceil (12 / 4) = 3。
-
TaskManager あたりの実際のスロット数 = 並列度 / 実際の TaskManager 数 = 12 / 3 = 4。
エキスパートモード (細粒度)
-
エキスパートモードは SQL ジョブでのみサポートされます。
-
ジョブのデプロイ後に SQL またはリソース設定を変更した場合は、ジョブを正常に開始するために、リソースプラングラフを再度取得する必要があります。
基本リソースの設定
|
パラメータ |
説明 |
|
JobManager CPU |
安定した運用のために、JobManager には少なくとも 0.5 コアと 2 GiB のメモリが必要です。 |
|
JobManager Memory |
単位:GiB。例:4 GiB。最小値は 2 GiB、最大値は 64 GiB です。 |
|
Slots per TaskManager |
該当なし。 |
スロットリソースの設定
-
[エキスパートモード] では、[今すぐプランを取得] をクリックしてリソースプラングラフを取得します。
-
スロットボックスの編集
アイコンをクリックします。生成されたリソースプラングラフには、複数の [slot] ボックスが表示され、それぞれに [VERTEX] オペレーター情報と [PARALLELISM] 値が含まれています。 -
スロット設定を変更します。ダイアログボックスで、[CPU]、[Heap Memory]、[Off-heap Memory]、[Parallelism] パラメータを設定できます。
ここで設定した並列度は、このスロット共有グループ内のすべてのオペレーターに適用されます。設定を保存すると、システムは自動的に次のことを行います:
-
このスロット共有グループ内のすべてのオペレーターに同じ並列度を設定します。
-
ジョブの計算ロジックに基づいて、状態バックエンド、Python、オペレーターに必要なメモリを割り当てます。この割り当ては自動的に行われます。
-
Source ノードの場合、パーティション数に比例した並列度を設定することを推奨します。つまり、並列度はパーティション数の約数である必要があります。たとえば、Kafka トピックに 16 個のパーティションがある場合、データスキューを回避するために並列度を 16、8、または 4 に設定します。
-
Source ノードの並列度を低く設定しすぎると、1 つの Source が過剰なデータを読み取り、ジョブのスループットが低下するため、ボトルネックが発生する可能性があります。
-
その他のノードについては、データトラフィックに応じて並列度を設定し、トラフィックが多いノードには高い並列度を割り当ててください。
説明説明エキスパートモードでは、スロット設定ダイアログボックスで [CPU]、[Heap Memory]、[Off-heap Memory] を手動で設定できます。JVM オーバーヘッド、ネットワークバッファ、フレームワークメモリを含むその他のメモリコンポーネントは、デフォルトの比率でシステムによって自動的に割り当てられます。これらのコンポーネントは、TaskManager の起動時に事前に割り当てられ、ジョブの実行中に動的に調整されることはありません。
これらの自動的に割り当てられたコンポーネントが原因でメモリ不足エラーが発生した場合は、[実行パラメーター設定] の [その他の設定] フィールドで、次のパラメーターを設定します。
-
taskmanager.memory.jvm-overhead.fraction:TaskManager メモリ全体に対する JVM オーバーヘッドのサイズの割合。デフォルト:0.1(10%)。 -
taskmanager.memory.jvm-overhead.max:JVM オーバーヘッドの最大サイズ。 -
taskmanager.memory.jvm-overhead.min:JVM オーバーヘッドの最小サイズ。
-
-
[OK] をクリックします。
オペレーターリソースの設定
デフォルトでは、すべてのオペレーターが 1 つの Slot Sharing Group を共有するため、リソースを個別に設定することはできません。特定のオペレーターのリソースを設定するには、[複数 SSG モード] を有効にします。このモードでは、各オペレーターに独立したスロットが割り当てられ、そのスロットでリソースを設定できるようになります。
-
[設定] タブで、[リソース] セクションの [編集] をクリックし、[リソースモード] を [エキスパートモード] に設定します。
-
(オプション) リソースプランが表示されない場合は、[今すぐプランを取得] をクリックします。
デフォルトでは、生成されたリソースプラングラフは、単一の [slot] ボックス内にすべてのオペレーターを表示します。
-
[Multiple SSG mode] スイッチをオンにし、次に [再取得] をクリックします。
この操作により、共有グループ内のオペレーターが個別のスロットに分割されます。
-
対象のオペレーターに対応するスロットボックスの編集
アイコンをクリックし、オペレーターリソースを変更します。[Modify slot] ダイアログボックスで、[CPU]、[Heap Memory]、[Off-heap Memory]、[Parallelism] パラメータを設定できます。
-
[OK] をクリックします。
オペレーターの並列度、チェーン化戦略、状態 TTL
状態 TTL の設定は、Ververica Runtime (VVR) 8.0.7 以降のバージョンでのみサポートされています。
個々のオペレーターの並列度、チェーン化戦略、状態 TTL を設定できます。
-
対象の VERTEX ボックスの展開
アイコンをクリックします。展開後、[VERTEX] ボックスには各オペレーターノード、その [PARALLELISM] 値、および各オペレーターの横に編集アイコンが表示されます。
説明VERTEX の編集
アイコンをクリックして、その VERTEX 内のすべてのオペレーターの並列度を一括で設定できます。 -
オペレーターの編集
アイコンをクリックします。 -
オペレーターリソースを設定します。
次の表でパラメータについて説明します。
パラメータ
説明
並列度
オペレーターの並列度です。
チェーン化戦略
チェーン化は、複数のオペレーターを単一のタスクに接続し、データ転送とシリアル化のオーバーヘッドを削減することでパフォーマンスを向上させます。ただし、チェーンを分割して実行フローをより細かく制御することもできます。次の戦略を使用できます:
-
[ALWAYS] (デフォルト):オペレーターは常に上流および下流のオペレーターとチェーン化できます。
-
[HEAD]:現在のオペレーターはチェーンの先頭として機能します。上流のオペレーターとはチェーン化されませんが、下流のオペレーターとはチェーン化されたままです。
-
[NEVER]:現在のオペレーターは、上流または下流のオペレーターとチェーン化されません。
状態 TTL
有効期限を秒、分、時間、または日単位で設定できます。デフォルトでは、オペレーターはジョブの状態有効期限を継承し、デフォルトは 1.5 日です。ジョブレベルの有効期限を設定するには、「実行パラメータの設定」をご参照ください。
説明-
この機能は、Ververica Runtime (VVR) 8.0.7 以降でのみサポートされています。
-
TTL 設定は、ステートフルオペレーターでのみサポートされます。
-
状態の有効期限は、おおよそのクリーンアップメカニズムです。システムは、TTL が経過した直後に期限切れの状態が削除されることを保証しません。実際のクリーンアップ時間は、バックグラウンドの状態アクセスパターンとクリーンアップポリシーによって異なります。
-
-
[OK] をクリックします。
よくある質問
並列度の設定値は、消費CU数と同じですか?
いいえ。[並列度] は、ジョブで実行される同時タスクの数を指します。[CU] は、Realtime Compute for Apache Flink で使用される課金およびリソースの単位です。これらは 1:1 の関係ではありません。
合計 CU 消費量は、次の式で計算されます:
合計 CU 消費量 = 並列度 × タスクあたりの CU
各タスクで消費される CU は、ジョブに設定されたスロットあたりのリソース仕様によって決まります。並列度を増やすと合計 CU 消費量は増加しますが、増加はタスクあたりの CU 仕様に比例し、単純な 1:1 の比率ではありません。
SQL ジョブで SET 'parallelism.default' が有効にならないのはなぜですか?
SQL ジョブステートメントで直接 SET 'parallelism.default' = 'N'; を使用しても、Realtime Compute for Apache Flink では有効になりません。並列度を設定するには、次のいずれかの方法を使用してください:
-
関連する SQL ステートメントの
WITH句で並列度を設定します。 -
ページのリソース設定編集インターフェイスで、並列度を変更します。
Print Sink または Join オペレーターがリソース不足やパフォーマンス低下を引き起こす場合、どうすればよいですか?
適切な対処法は、具体的な症状によって異なります:
-
Print Sink が TaskManager のリソース不足を引き起こす — この問題は、パラメータ調整だけでは解決できません。実際のデータ量に基づいてリソース要件を評価し、ソーステーブルのフィールドタイプが正しく定義されていることを確認します (たとえば、適切な場合は
STRINGではなくBIGINTを使用します)。そして、Print Sink のデバッグオーバーヘッドをサポートするのに十分な TaskManager リソースを割り当ててください。 -
メモリ使用率が低いにもかかわらず Join のパフォーマンスが低い — CU の数を増やしてください。ただし、根本原因がデータスキューの場合、リソースを追加しても問題が解決しない可能性があります。まずデータスキューの問題を解決してから、追加のリソースが必要かどうかを評価してください。
-
エンドツーエンドレイテンシーが高く、ジョブが頻繁に再起動する — ジョブがステートレス再起動後のフルステート同期フェーズにある場合は、スロット数を 1 に設定し、並列度を個別に適切に設定し、1 コア 4 GiB の TaskManager 仕様と適度な同時実行数 (たとえば 10) を使用して、パフォーマンスをテストおよび最適化してみてください。
関連ドキュメント
-
リソース最適化手法の詳細については、「高性能 Flink SQL 最適化手法」をご参照ください。
-
リソースを手動で調整する代わりに、自動パフォーマンスチューニングを有効にすることができます。詳細については、「自動パフォーマンスチューニングの設定」をご参照ください。
-
ジョブの基本設定、実行パラメータ、ロギングを設定するには、「ジョブデプロイ情報の設定」をご参照ください。
-
Flink Advisor サービスでジョブの健全性を監視します。詳細については、「インテリジェントジョブ診断」をご参照ください。