flink流与flink批处理中的内存管理



我浏览了很多博客和堆栈溢出的答案,但我不清楚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文档,流式处理和批处理中的内存管理不同

相关内容

  • 没有找到相关文章

最新更新