提问者:小点点

大批量与大批量中的内存管理


我浏览了很多博客和堆栈溢出答案,但我不清楚 Flink 内存管理。在一些博客中,我找到了“Memory Manager Pool”和“Rocksdb”。我正在使用rocksdb,我假设我的所有状态都存储在该数据库中。

这是我的疑问..

  • 如何在流式传输中处理内存管理过程?
  • 流式处理和批处理中的内存管理有什么区别?
  • 内存管理器池”和“后端状态 (Rcokdb) ”之间的区别
  • 在流媒体中,你所说的“Flink 托管内存”是什么意思? 是否包括 RacksDb 缓存和缓冲区所需的内存?

共2个答案

匿名用户

当您使用 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 文档,流中的内存管理和批处理处理方式不同