This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
メモリ調整ガイド #
メインメモリセットアップガイドに加えて、このセクションではユースケースに応じてメモリをセットアップする方法と、それぞれのユーズケースで重要なオプションを説明します。
スタンドアローンデプロイメント用のメモリ設定 #
合計Flinkメモリ
(taskmanager.memory.flink.size
またはjobmanager.memory.flink.size
)またはそのコンポーネントをスタンドアローンデプロイメントに設定し、Flink自体に与えるメモリ量を宣言することをお勧めします。さらに、問題が発生する場合は、JVMメタスペースを調整できます。
合計プロセスメモリは、JVMオーバーヘッドがFlinkまたはデプロイメント環境によって制御されないため、関係ありません。この場合、実行マシーンの物理リソースのみが問題になります。
コンテナのメモリ設定 #
コンテナ化されたデプロイメント(KubernetesまたはYarn)のために合計プロセスメモリ(taskmanager.memory.process.size
またはjobmanager.memory.process.size
)を設定することをお勧めします。
これは、FlinkのJVMプロセスに割り当てる合計メモリを宣言し、要求されたコンテナのサイズに対応します。
注意 合計Flinkメモリを設定する場合、Flinkは暗黙的にJVMメモリコンポーネントを追加して合計プロセスメモリを導出し、そのサイズのメモリをコンテナに要求します。
警告: Flinkまたはユーザコードがコンテナサイズを超えて管理されていないオフヒープ(ネイティブ)メモリを割り当てた場合、デプロイメント環境が問題のあるコンテナを強制終了する可能性があるため、ジョブは失敗する可能性があります。
コンテナメモリの超過エラーの説明も参照してください。
状態バックエンド用のメモリの設定 #
これはTaskManagerにのみ関係します。
Flinkストリーミングアプリケーションをデプロイする場合、使用される状態バックエンドはクラスタの最適なメモリ設定を指示します。
ハッシュマップ状態バックエンド #
ステートレスジョブを実行、まてゃHashMapStateBackend)を使う場合、管理メモリがゼロに設定されます。 これにより、ヒープメモリの最大値がJVM上のユーザコードに割り当てられます。
RocksDB状態バックエンド #
EmbeddedRocksDBStateBackendはネイティブメモリを使います。デフォルトでは、RocksDBはネイティブメモリの割り当てを管理メモリのサイズに制限するように設定されています。 従って、状態バックエンドに十分な管理メモリを予約することが重要です。デフォルトのRocksDBメモリ制御を無効にすると、RocksDBが要求されたコンテナサイズ(合計プロセスメモリ)の制限を超えるメモリを割り当てた場合、コンテナ化されたデプロイメントでTaskManagerが強制終了される可能性があります。 RocksDBメモリを調整する方法とstate.backend.rocksdb.memory.managedも参照してください。
バッチジョブ用のメモリの設定 #
これはTaskManagerにのみ関係します。
Flinkのバッチオペレータは、管理メモリを使ってより効率的に実行します。
そうすることで、Javaオブジェクトに逆シリアライズ化することなく、生データに対して一部の操作を直接実行できます。
これは、管理メモリ設定がアプリケーションのパフォーマンスに実際的な効果をもたらすことを意味します。Flinkは、バッチジョブ用の設定されているのと同じ量の管理メモリを割りてて利用しようとしますが、その制限を超えることはありません。Flinkは利用する必要がある目おm理の量を正確に把握jしているため、OutOfMemoryError
が発生するのを防ぎます。
how much memory it has to leverage. 管理メモリが十分ではない場合は、Flinkはgracefullyにディスクに出力します。