This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
移行ガイド #
メモリ設定は、 TaskManagersの1.10リリースと、JobManagersの1.11リリースで、大きく変更されました。 release for . 多くの設定オプションが削除されたり、その意味が変更されました。 このガイドは、Flink<= 1.9 to >= 1.10のTaskManagerのメモリ設定と、Flink <= 1.10 to >= 1.11のJobManagerのメモリ設定の移行をするのに役立ちます。
従来のメモリ設定と新しいメモリ設定はメモリコンポーネントのサイズが異なる可能性があるため、このガイドを確認することが重要です。古いバージョンのFlink設定を再利用しようとする場合、TaskManagerの場合はバージョンが1.11より前、JobManagersの場合は1.11より前の場合、アプリケーションの動作、パフォーマンス、さらには設定エラーが変化する可能性があります。
注意 TaskManagerのバージョン1.10より前、JobManagerのバージョン1.11より前では、Flinkはメモリ関連のオプションは全てデフォルト値を持っているため、設定する必要はありませんでした。 新しいメモリ設定では、次のオプションの少なくとも1つのサブセットあg明示的に設定される必要があります。そうしなければ設定が失敗します:
Flinkに同梱されているデフォルトのflink-conf.yaml
は、デフォルトのメモリ設定を一貫性のあるものにするために、taskmanager.memory.process.size
(1.10以降)とjobmanager.memory.process.size
(1.11以降)を設定します。
このスプレッドシートは、従来のメモリ計算と新しいメモリ計算の結果を評価および比較するのにも役立ちます。
Task Managerのメモリ設定を移行します #
設定オプションの変更 #
この章では、1.10リリースで導入されたFlinkのメモリ設定オプションに対する全ての変更を簡単にリストします。 また、新しい設定オプションへの移行の詳細については、ほかの章も参照してください。
以下のオプションは完全に削除されます。まだ使われている場合は、無視されます。
削除されたオプション | 注意 |
---|---|
taskmanager.memory.fraction |
新しいオプション}}#taskmanager-memory-managed-fraction">taskmanager.memory.managed.fractionの説明を確認してください。 新しいオプションには意味があり、通常は非推奨のオプションの値を調整する必要があります。 管理メモリを移行する方法も参照してください。 |
taskmanager.memory.off-heap |
オンヒープ上の管理メモリはサポートされなくなりました。管理メモリを移行する方法も参照してください。 |
taskmanager.memory.preallocate |
事前割り当てはサポートされなくなり、管理メモリは常に遅延割り当てされます。管理メモリを移行する方法も参照してください。 |
次のオプションは非推奨ですが、まだ使われている場合は、下位互換性のために新しいオプションとして解釈されます。
非推奨のオプション | Interpreted as |
---|---|
taskmanager.heap.size |
|
taskmanager.memory.size |
}}#taskmanager-memory-managed-size">taskmanager.memory.managed.size。管理メモリを移行する方法も参照してください。 |
taskmanager.network.memory.min |
}}#taskmanager-memory-network-min">taskmanager.memory.network.min |
taskmanager.network.memory.max |
}}#taskmanager-memory-network-max">taskmanager.memory.network.max |
taskmanager.network.memory.fraction |
}}#taskmanager-memory-network-fraction">taskmanager.memory.network.fraction |
ただし、ネットワークメモリ設定はあまり変更されていないため、設定を確認することをお勧めします。 ネットワークが占める可能性がある総メモリの一部など、他のメモリコンポーネントのサイズが変更された場合に変更される可能性があります。 新しい詳細なメモリモデルも参照してください。
The container cut-off configuration options, containerized.heap-cutoff-ratio
and containerized.heap-cutoff-min
,
have no effect anymore for TaskManagers. See also how to migrate container cut-off.
総メモリ(以前は、ヒープモデル) #
Flinkによって使われる合計メモリを担当していた以前のオプションは、taskmanager.heap.size
またはtaskmanager.heap.mb
です。
その名前にも関わらず、これらにはJVMヒープだけではなく、他のオフヒープメモリコンポーネントも含まれていました。このオプションは廃止されました。
対応する新しいオプションを指定せずに、前述の従来のオプションを使うと、それらは次の新しいオプションに直接変換されます:
- Flinkメモリの合計(スタンドアローンデプロイメント用の
taskmanager.memory.flink.size
) - 合計プロセスメモリ(コンテナ化されたデプロイメント用の
taskmanager.memory.process.size
)
また、次のリリースでは完全に削除される可能性があるため、従来のオプションの代わりにこれらの新しいオプションを使うことをお勧めします。
現在の合計メモリを設定する方法も参照してください。
JVMヒープメモリ #
JVMヒープメモリは、以前は管理メモリ(ヒープ上に設定されている場合)と、その他のヒープメモリの使用を含む残りのメモリで構成されていました。この残りは合計メモリの残りの一部でした。管理メモリの移行方法も参照してください。
ここで、合計Flinkメモリまたは合計プロセスメモリだけが設定されている場合、JVMヒープは合計メモリから全ての他のコンポーネントを引いた後の残りになります。合計メモリの設定方法も参照してください。
さらに、オペレーションタスクに割り当てられたJVMヒープをより直接的に制御できるようになりました(taskmanager.memory.task.heap.size
)。タスク(オペレーター)ヒープメモリも参照してください。
JVMヒープメモリは、ストリーミングジョブ用に選択されている場合、ヒープ状態バックエンド(MemoryStateBackend
またはFsStateBackend)によっても使われます。
今は、JVMヒープの一部が常にFlinkフレームワークで使われるようになりましたtaskmanager.memory.framework.heap.size
)。
Framework memoryを参照してください。
管理されるメモリ #
現在の管理メモリの設定方法も参照してください。
明示的なサイズ #
管理メモリサイズを設定する前のオプション(taskmanager.memory.size
)は、taskmanager.memory.managed.size
に名前変更され、非推奨になりました。
従来のオプションは将来のリリースで削除される可能性があるため、新しいオプションを使うことをお勧めします。
Fraction #
If not set explicitly, the managed memory could be previously specified as a fraction (taskmanager.memory.fraction
)
of the total memory minus network memory and container cut-off (only for Yarn deployments). このオプションは完全に削除され、使っても効果がありません。
代わりに、新しいオプションtaskmanager.memory.managed.fraction
を使ってください。
This new option will set the managed memory to the specified fraction of the
total Flink memory if its size is not set explicitly by
taskmanager.memory.managed.size
.
RocksDB state #
RocksDBStateBackendがストリーミングジョブに選択されている場合、ネイティブメモリ消費量はmanaged memoryで考慮されるようになりました。
RocksDBのメモリの割り当てはmanaged memoryのサイズによって制限されます。
これにより、Yarn上のコンテナが強制終了されるのを防ぐことができます。
state.backend.rocksdb.memory.managedをfalse
に設定することで、RocksDBのメモリ制御を無効にすることができます。how to migrate container cut-offも参照してください。
その他の変更 #
さらに、次の変更が行われました:
- 管理メモリは現在、常にオフヒープです。設定オプション
taskmanager.memory.off-heap
は削除され、効果が無くなりました。 - 管理メモリは現在、直接メモリではないネイティブメモリを使うようになりました。これは、管理メモリがJVM直接メモリ制限に考慮されなくなったことを意味します。
- 管理メモリは現在、常に遅延割り当てされます。設定オプション
taskmanager.memory.preallocate
は削除され、効果が無くなりました。
Job Managerメモリ設定の移行 #
以前は、JobManagerのJVM Heapサイズを設定するオプションがありました。
jobmanager.heap.size
jobmanager.heap.mb
名前に反して、これらはスタンドアローンデプロイメントのみのJVMヒープを表します。 コンテナ化されたデプロイメントKubernetesとYarn)については、それらもその他のオフヒープメモリ消費に含まれます。 they also included other off-heap memory consumption. JVMヒープのサイズは、1.11以降で完全に削除されたコンテナのcut-offによってさらに削減されました。
前述の従来のオプションは非推奨になりました。対応する新しいオプションを指定せずに使われた場合、次の新しいオプションに直接変換されます:
- standaloneデプロイメントの場合のJVMヒープ(
jobmanager.memory.heap.size
) - コンテナ化されたデプロイメント(KubernetesとYarn)の場合、(
jobmanager.memory.process.size
)
また、次のリリースでは完全に削除される可能性があるため、従来のオプションの代わりにこれらの新しいオプションを使うことをお勧めします。
ここで、total Flink memoryまたはtotal process memoryだけが設定されている場合、JVM Heapは合計メモリから全ての他のコンポーネントを引いた残りの部分としても導出されます。合計メモリの設定も参照してください。さらに、jobmanager.memory.heap.size
オプションを調整することで、JVM Heapを直接制御できるようになりました。
Flink JVMプロセスメモリ制限 #
1.10リリース以降、Flinkは対応するJVM引数を追加することで、TaskManagerプロセスのJVM MetaspaceとJVM Direct Memoryの制限を設定します。1.11リリース以降、FlinkはJobManagerプロセスのJVM Metaspace制限も設定します。
jobmanager.memory.enable-jvm-direct-memory-limit
オプションを設定すると、JobManagerプロセスのJVM直接メモリ制限を有効にできます。
JVMパラメータも参照してください。
Flinkは、対応するメモリリースのデバッグを簡素化し、the container out-of-memory errorsを回避するために、前述のJVMメモリ制限を設定します。 JVM MetaspaceとJVM直接メモリ OutOfMemoryErrorsの詳細については、トラブルシューティングガイドも参照してください。
コンテナCut-Offメモリ #
コンテナ化されたデプロイメントの場合は、事前にカットオフメモリを指定できました。このメモリは、不明なメモリ割り当てに対応できます。
Flinkによって直接制御されていない依存関係が、これらの割りての主なソースでした。例えば、RocksDB、JVM internalsなど。
これは利用できなくなり、関連する設定オプション(containerized.heap-cutoff-ratio
とcontainerized.heap-cutoff-min
)はもう効果がありません。新しいメモリモデルでは、これらの懸念に対応するために、より具体的なメモリコンポーネントが導入されました。
TaskManagers用 #
RocksDBStateBackendを使うストリーミングジョブでは、RocksDBネイティブメモリ消費は、管理メモリの一部として考慮されるようになりましした。 RocksDBメモリ割りては、管理メモリの設定サイズによっても制限されます。 管理メモリの移行と現在の管理メモリの設定方法も参照してください。
他の直接またはネイティブオフヒープメモリのコンシューマは、次の新しい設定オプションで対処できるようになりました:
- タスクのオフヒープメモリ(
taskmanager.memory.task.off-heap.size
) - フレームワークオフヒープメモリ(
taskmanager.memory.framework.off-heap.size
) - JVM metaspace (
taskmanager.memory.jvm-metaspace.size
) - JVMオーバーヘッド
JobManagers用 #
直接またはネイティブオフヒープメモリのコンシューマは、次の新しい設定オプションで対処できるようになりました:
- オフヒープメモリ(
jobmanager.memory.off-heap.size
) - JVM metaspace (
jobmanager.memory.jvm-metaspace.size
) - JVMオーバーヘッド
flink-conf.yamlのデフォルトの設定 #
このセクションでは、Flinkに付属するデフォルトのflink-conf.yaml
の変更について説明します。
TaskManagersの合計メモリ(taskmanager.heap.size
)は、デフォルトの flink-conf.yaml
のtaskmanager.memory.process.size
に置き換えられました。値は1024MBから1728MBに増加しました。
JobManagersの合計メモリ(jobmanager.heap.size
)は、デフォルトのflink-conf.yaml
のjobmanager.memory.process.size
に置き換えられました。値は1024MBから1600MBに増加しました。
現在の合計メモリを設定する方法も参照してください。
警告: 新しいデフォルトのflink-conf.yaml
を使う場合、メモリのコンポーネントサイズが異なり、パフォーマンスが低下する可能性があります。