我浏览了很多博客和堆栈溢出的答案,但我不清楚Flink内存管理。在一些博客中,我发现了"内存管理器池"one_answers"Rocksdb"。我正在使用rocksdb,我假设我的所有状态都存储在该数据库中。
以下是我的疑虑。。
- 流媒体中的内存管理过程是如何处理的
- 流式处理和批处理中的内存管理有什么区别
- "内存管理器池"one_answers"后端状态(Rcookdb("之间的差异
- 在流媒体中,你所说的"Flink Managed Memory"是什么意思?是否包括RacksDb缓存和缓冲区所需的内存
流式传输
当您使用RocksDBStatebackend时,所有KeyedState(ValueState、MapState…和Timers(都存储在RocksDB中。OperatorState保留在堆上。OperatorState通常很小,很少被Flink开发人员直接使用。
对于Flink 1.10+,托管内存包括RocksDB使用的所有内存。Flink确保RocksDB的内存使用率保持在分配的托管内存的限制范围内。使用taskmanager.memory.managed.fraction
调整您给RocksDB的内存量。通常,您可以将除500MB之外的所有内存都提供给RockSDB。
批次
批处理程序不使用Statebackend。托管内存用于堆外连接、排序等。像taskmanager.memory.managed.fraction
这样的内存配置对于批处理和流处理是相同的。
根据Flink文档,流式处理和批处理中的内存管理不同