【问题标题】:Memory management in flink streaming vs flink batchflink 流式处理与 flink 批处理中的内存管理
【发布时间】:2020-05-04 14:57:13
【问题描述】:

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

这是我的疑问..

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

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    流式传输

    当您使用 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 这样的内存配置对于批处理和流处理是相同的。

    【讨论】:

      【解决方案2】:

      根据Flink documents 流式处理和批处理中的内存管理不同

      【讨论】:

      • 这看起来不像官方文档,所以,你不应该当真。
      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      相关资源
      最近更新 更多