ジョブの開始前にリソースを設定したり、実行中に変更したりできます。このトピックでは、ジョブリソースの設定方法と各モードのパラメータについて説明します。
注意事項
リソースを設定した後、変更を反映させるにはジョブを再起動する必要があります。
操作手順
-
リソース設定ページに移動します。
-
対象のワークスペースの[アクション] 列で、[コンソール] をクリックします。
-
ページで、対象のジョブの名前をクリックします。
-
[設定] タブで、[リソース] セクションの右側にある [編集] をクリックします。
-
ジョブリソース情報を変更します。
リソースモード
説明
詳細
[ベーシック]
ベーシックモードでは、各 TaskManager の合計リソース (CPU と JVM メモリの合計) を指定します。その後、システムは
taskmanager.numberOfTaskSlotsの設定に基づいて、これらのリソースをすべてのスロットに均等に割り当てます。このモードは、ほとんどの単純なジョブに適しています。[エキスパート]
エキスパートモードでは、各スロット共有グループ (SSG) のリソースを設定します。その後、Flink は各スロットに必要な仕様を計算し、リソースプールから一致する TaskManager とスロットを動的にリクエストします。粗粒度の割り当てではリソース使用率が低下する可能性がある複雑なジョブの場合、細粒度のリソース制御を使用して各オペレーターをチューニングできます。これにより、リソース使用率が向上し、スループット要件を満たすことができます。
説明エキスパートモードは SQL ジョブでのみサポートされます。
TaskManager、JobManager、Task、スロットなどの概念については、「Apache Flink Architecture」のドキュメントをご参照ください。
-
[保存] をクリックします。
-
ジョブを再起動します。
ベーシックモード (粗粒度)
|
パラメータ |
説明 |
|
並列度 |
ジョブ全体の並列度です。 |
|
Job Manager CPU |
安定稼働のため、JobManager には最低 0.5 コアと 2 GiB のメモリが必要です。1 コアと 4 GiB を推奨します。最大値は 16 コアです。 |
|
JobManager Memory |
値の範囲は 2 ~ 64 GiB です。 |
|
Task Manager CPU |
安定稼働のため、TaskManager には最低 0.5 コアと 2 GiB のメモリが必要です。1 コアと 4 GiB を推奨します。最大値は 16 コアです。 |
|
TaskManager Memory |
値の範囲は 2 ~ 64 GiB です。 |
|
[TaskManager スロット] |
各 TaskManager のスロット数を指定します。 |
TaskManager JVM オーバーヘッド
基本モードでは、TaskManager Memory を設定すると、システムは自動的にその一部を 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 に設定したとします。
この例では、[Job Manager CPU] は 2 コア、[JobManager Memory] は 4 GiB、[Task Manager 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 またはリソース設定を変更した場合、ジョブを正常に起動するためにリソースプラングラフを再取得する必要があります。
基本リソースの設定
|
パラメータ |
説明 |
|
Job Manager CPU |
安定稼働のため、JobManager には最低 0.5 コアと 2 GiB のメモリが必要です。 |
|
JobManager Memory |
単位:GiB。たとえば、4 GiB。最小値は 2 GiB、最大値は 64 GiB です。 |
|
[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] をクリックします。
オペレーターリソースの設定
デフォルトでは、すべてのオペレーターが単一のスロット共有グループを共有するため、リソースを個別に設定することはできません。特定のオペレーターのリソースを設定するには、[複数 SSG] を有効にします。これにより、各オペレーターに独立したスロットが割り当てられ、そのスロットでリソースを設定できるようになります。
-
[設定] タブで、[リソース] セクションの [編集] をクリックし、[モード] を [エキスパート] に設定します。
-
(任意) リソースプランが表示されない場合は、[今すぐプランを取得] をクリックします。
デフォルトでは、生成されたリソースプラングラフには、すべてのオペレーターが単一の [slot] ボックス内に表示されます。
-
[Multiple SSG] スイッチをオンにして、[再取得] をクリックします。
この操作により、共有グループ内のオペレーターが個別のスロットに分割されます。
-
対象のオペレーターに対応するスロットボックスの編集アイコン
をクリックして、オペレーターリソースを変更します。[Modify slot] ダイアログボックスでは、[CPU]、[Heap Memory]、[Off-Heap Memory]、[parallelism] パラメータを設定できます。
-
[OK] をクリックします。
典型的なシナリオ:シンクオペレーターの Busy メトリックが高く、上流にバックプレッシャーが発生する
ジョブトポロジーでシンクオペレーターの [Busy] メトリックが高く、上流のオペレーターにバックプレッシャーが表示される場合、書き込みのボトルネックによってジョブのレイテンシーが増加します。前述の手順に従って [Mode] を [エキスパート] に設定し、[複数 SSG] をオンにして、シンクオペレーターに対応するスロットの [CPU] とメモリのみを増やしてください。たとえば、CPU を 0.5 コアから 2 コアに、メモリを 2 GiB から 4 GiB に増やして、書き込み速度を向上させ、バックプレッシャーを軽減します。チューニング後、[運用保守] > [デプロイメント] ページに移動して、シンクオペレーターの [Busy] メトリックと上流のバックプレッシャーが改善されたかどうかを確認してください。この例の値は参考用であり、お客様のジョブで同じ結果が得られることを保証するものではありません。
オペレーターの並列度、チェーン化戦略、状態の有効期限設定
[状態の有効期限設定] の設定は、Ververica Runtime (VVR) 8.0.7 以降のバージョンでのみサポートされています。
各オペレーターの並列度、チェイニング戦略、および[状態の有効期限設定]を設定できます。
-
対象の VERTEX ボックスの展開アイコン
をクリックします。展開後、[VERTEX] ボックスには各オペレーターノード、その [PARALLELISM] 値、および各オペレーターの横に編集アイコンが表示されます。
説明VERTEX の編集アイコン
をクリックして、その VERTEX 内のすべてのオペレーターの並列度を一括で設定できます。 -
オペレーターの編集アイコン
をクリックします。 -
オペレーターリソースを設定します。
以下の表でパラメータについて説明します。
パラメータ
説明
並列度
オペレーターの並列度です。
チェーン化戦略
チェーン化は、複数のオペレーターを単一のタスクに接続し、データ転送とシリアル化のオーバーヘッドを削減することでパフォーマンスを向上させます。ただし、実行フローをより細かく制御するためにチェーンを解除することもできます。以下の戦略が利用可能です:
-
ALWAYS (デフォルト): オペレーターは常に上流および下流のオペレーターとチェーン化できます。
-
HEAD: 現在のオペレーターはチェーンの先頭として機能します。上流のオペレーターとはチェーン化されませんが、下流のオペレーターとはチェーン化されたままです。
-
NEVER: 現在のオペレーターは、上流または下流のいずれのオペレーターともチェーン化されません。
[状態の有効期限設定]
有効期限を秒、分、時間、または日単位で設定できます。デフォルトでは、オペレーターはジョブの状態の有効期限を継承し、デフォルトは 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' が有効にならないのはなぜですか?
Realtime Compute for Apache Flink では、SQL ジョブステートメントで直接 SET 'parallelism.default' = 'N'; を使用しても有効になりません。並列度を設定するには、以下のいずれかの方法を使用してください:
-
関連する SQL ステートメントの
WITH句で並列度を設定します。 -
ページのリソース設定編集インターフェイスで、並列度を変更します。
Print Sink または Join オペレーターがリソース不足やパフォーマンス低下を引き起こす場合、どうすればよいですか?
適切な対処法は、具体的な症状によって異なります:
-
Print Sink が TaskManager のリソース不足を引き起こす — この問題は、パラメータのチューニングだけでは解決できません。実際のデータ量に基づいてリソース要件を評価し、ソーステーブルのフィールドタイプが正しく定義されているか (たとえば、適切な場所では
BIGINTをSTRINGの代わりに使用する) を確認し、Print Sink のデバッグオーバーヘッドをサポートできる十分な TaskManager リソースを割り当ててください。 -
メモリ使用率が低いにもかかわらず Join のパフォーマンスが低い — CU の数を増やしてください。ただし、根本原因がデータスキューの場合、リソースを追加しても問題が解決しない可能性があります。まずデータスキューの問題を解決してから、追加のリソースが必要かどうかを評価してください。
-
エンドツーエンドレイテンシーが高く、ジョブが頻繁に再起動する — ジョブがステートレス再起動後のフルステート同期フェーズにある場合、スロット数を 1 に設定し、適切な並列度を個別に設定し、1 コア、4 GiB の TaskManager 仕様と適度な同時実行数 (たとえば 10) を使用して、パフォーマンスをテストおよび最適化してみてください。
関連ドキュメント
-
リソース最適化手法については、「高パフォーマンス Flink SQL 最適化手法」をご参照ください。
-
リソースを手動で調整する代わりに、自動パフォーマンスチューニングを有効にすることもできます。詳細については、「自動パフォーマンスチューニングの設定」をご参照ください。
-
ジョブの基本設定、実行パラメータ、ログ設定を行うには、「ジョブデプロイ情報の設定」をご参照ください。
-
Flink Advisor サービスでジョブの健全性を監視できます。詳細については、「ジョブのインテリジェント診断」をご参照ください。