Set up Flink's Process Memory
This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.

Flinkのプロセスメモリの設定 #

Apache Flinkは、様々なコンポーネントのメモリ使用量を厳密に制御することにより、JVM上で効率的なワークロードを提供します。 コミュニティは全ての設定に懸命なデフォルトを提供するよう努めますが、ユーザがFlink上にデプロイするアプリケーションは多岐にわたるため、これが常に可能であるとは限りません。ユーザに最大限の生産価値を提供するために、Flinkはクラスタ内のメモリの割り当てを高レベルかつきめ細かく調整できます。メモリ要件を最適化するには、network memory tuning guideを確認してください。

さらに説明されているメモリ設定は、TaskManagerについてはリリースバージョン1.10以降に、JobManagerプロセスについては1.11以降に適用されます。Flinkを以前のバージョンからアップグレードする場合は、1.101.11リリースで多くの変更が導入されたため、移行ガイドを確認してください。

合計メモリの設定 #

Flink JVM プロセスの合計プロセスメモリは、Flinkアプリケーションによって消費されるメモリ(total Flink memory)とJVMがプロセスを実行するために消費されるメモリで構成されます。合計Flinkメモリの消費には、JVMヒープOff-heap(DirectまたはNative)メモリが含まれます。

Flink's process memory model

Flinkでメモリをセットアップする最も簡単な方法は、次の2つのオプションのいずれかを設定することです:

  コンポーネント     Option for TaskManager     Option for JobManager  
合計Flinkメモリ taskmanager.memory.flink.size jobmanager.memory.flink.size
合計プロセスメモリ taskmanager.memory.process.size jobmanager.memory.process.size

ローカル実行については、TaskManagerJobManagerプロセスの詳細を参照してください。

残りのメモリコンポーネントはデフォルト値または追加で設定されたオプションに基づいて自動的に調整されます。 TaskManagerJobManagerメモリのための他のコンポーネントを設定する方法も参照してください。

合計Flinkメモリの設定は、Flink自体にどれだけのメモリを割り当てるかを宣言する必要があるスタンドアローンデプロイメントに適しています。合計FlinkメモリJVM HeapOff-heapメモリに分割されます。 スタンドアローンデプロイメント用にメモリを設定する方法も参照してください。

合計プロセスメモリを設定する場合は、FlinkのJVMプロセスに割り当てる必要がある合計メモリ量を宣言します。 コンテナ化されたデプロイメントの場合、要求されたコンテナのサイズに対応します。コンテナのメモリを設定する方法 (KubernetesまたはYarn)も参照してください。

メモリをセットアップするもう1つの方法は、具体的なFlinkプロセスに特有の合計Flinkメモリの必要な内部コンポーネントを設定することです。TaskManager用とJobManager用の設定する方法を確認してください。

Flinkのメモリを設定するには、前述の3つの方法のうちの1つを使う必要があります(ローカル実行を除く)。そうでなければ、Flinkの起動に失敗します。これは、デフォルト値を持たない次のオプションのサブセットのいずれかを明示的に設定する必要があることを意味します。

  TaskManagerの場合:     JobManagerの場合:  
taskmanager.memory.flink.size jobmanager.memory.flink.size
taskmanager.memory.process.size jobmanager.memory.process.size
taskmanager.memory.task.heap.size
and taskmanager.memory.managed.size
jobmanager.memory.heap.size

合計プロセスメモリ合計Flinkメモリの両方を明示的に設定することはお勧めできません。潜在的なメモリ設定の競合により、デプロイメントの失敗につながる可能性があります。 他のメモリコンポーネントを設定する場合も、設定の競合がさらに発生する可能性があるため、注意が必要です。

JVMパラメータ #

Flinkはプロセスの起動時に設定またはメモリコンポーネントのサイズに基づいて、次のメモリ関係のJVMパラメータを明示的に追加します:

  JVM Arguments     Value for TaskManager     Value for JobManager  
-Xmx and -Xms Framework + Task Heap Memory JVM Heap Memory (*)
-XX:MaxDirectMemorySize
(常にTaskManagerに対してのみ追加されます。JobMangerについてはnoteを参照してください)
Framework + Task Off-heap (**) + Network Memory Off-heap Memory (**),(***)
-XX:MaxMetaspaceSize JVM Metaspace JVM Metaspace

(*) 使用されるGCアルゴリズムによっては、ヒープメモリの全量を使えない場合がることに注意してください。一部のGCアルゴリズムは、それ自体に一定量のヒープメモリを割り当てます。 これにより、Heap metricsによって返される最大値と異なります。
(**) 注意。ユーザコードにおけるネイティブ非ダイレクトメモリ使用量も、オフヒープメモリの一部とみなされることに注意してください。
(***) JVM抱くレクとメモリ制限は、対応するオプションjobmanager.memory.enable-jvm-direct-memory-limitが設定されている場合のみ、JobManagerプロセスに追加されます。

関連コンポーネントの設定方法を理解するには、TaskManagerJobManagerの詳細なメモリモデルも確認してください。

Capped Fractionated Components #

This section describes the configuration details of options which can be a fraction of some other memory size while being constrained by a min-max range:

  • JVM Overhead can be a fraction of the total process memory
  • Network memory can be a fraction of the total Flink memory (only for TaskManager)

関連コンポーネントの設定方法を理解するには、TaskManagerJobManagerの詳細なメモリモデルも確認してください。

これらのコンポーネントのサイズは常に最大値と最小値の間になければなりません。そうしなければFlinkは起動に失敗します。 最大値と最小値にはデフォルト値がるか、対応する設定オプションによって明示的に設定できます。 例えば、次のメモリオプションのみを設定するとします:

  • total Process memory = 1000MB,
  • JVM Overhead min = 64MB,
  • JVM Overhead max = 128MB,
  • JVM Overhead fraction = 0.1

この場合、JVMオーバーヘッドは1000MB x 0.1 = 100MBとなり、64-128MBの範囲内になります。

最大値と最小値に同じ値を設定した場合、サイズがその値に事実上固定されることに注意してください。

コンポーネントメモリを明示的に設定しない場合、Flinkは合計メモリに基づいてfractionを使ってメモリサイズを計算します。計算された値は、対応する最小/最大オプションによって制限されます。 例えば、次のメモリオプションのみが設定されているとします:

  • total Process memory = 1000MB,
  • JVM Overhead min = 128MB,
  • JVM Overhead max = 256MB,
  • JVM Overhead fraction = 0.1

この場合、JVMオーバーヘッドは128MBになります。これは、fractionから導出されるサイズが100MBで、それは最小値よりも小さいからです。

合計メモリとその他のコンポーネントのサイズが定義されている場合、fractionが無視されることもあります。 この場合、JVMオーバーロードは合計メモリの残りです。導出される値は依然として最小/最大の範囲内にある必要があります。そうでなければ、設定は失敗します。例えば、以下のメモリオプションが設定されたとします:

  • total Process memory = 1000MB,
  • task heap = 100MB, (JobManagerのJVMヒープにも同様の例が考えられます)
  • JVM Overhead min = 64MB,
  • JVM Overhead max = 256MB,
  • JVM Overhead fraction = 0.1

合計プロセスメモリの他の全てのコンポーネントにはデフォルトのManaged Memory fraction(あるいは、JobManagerのOff-heapメモリ)を含むデフォルト値があります。この場合、JVMオーバーロードはfraction (1000MB x 0.1 = 100MB)ではなく、合計プロセスメモリの残りであり、64-256MBの範囲内になるか失敗します。

inserted by FC2 system