我浏览了很多博客和堆栈溢出答案,但我不清楚 Flink 内存管理。在一些博客中,我找到了“Memory Manager Pool”和“Rocksdb”。我正在使用rocksdb,我假设我的所有状态都存储在该数据库中。
这是我的疑问..
流
当您使用 RocksDBStatebackend 时,所有 KeyedState (ValueState, MapState, ...和计时器)存储在 RocksDB 中。运算符状态保留在堆上。OperatorState 通常非常小,很少被 Flink 开发人员直接使用。
对于 Flink 1.10,托管内存包括 RocksDB 使用的所有内存。Flink 确保 RocksDB 的内存使用量保持在分配的托管内存的限制范围内。使用 taskmanager.memory.managed.fraction
来调整您为 RocksDB 提供的内存量。通常,您可以将除500MB以外的所有内存提供给RockSDB。
批
批处理程序不使用状态后端。托管内存用于堆外联接、排序等。像taskmanager.memory.managed.fraction
这样的内存配置对于批处理和流式处理是相同的。
根据 Flink 文档,流中的内存管理和批处理处理方式不同