首页 > > > Flink1.10新特性解读-内存管理
FLIP49为Task Executor引入了一种新的内存模型。引入了新的配置选项来控制Task Executor的内存消耗。将影响所有类型的部署:standalone, YARN, Mesos和Kubernetes。job manager的内存模型尚未更改,但也计划进行更新。
如果尝试在不做任何调整的情况下重用以前的Flink配置,新的内存模型可能会导致JVM的计算内存参数不同,从而导致性能变化。
该方案解决了Flink 1.9 TaskExecutor内存配置的几个缺点。
目前,TaskExecutor内存的配置对于流作业和批作业是不同的。
2.流计算中RocksDB的配置复杂困难
3.复杂、不确定、难以理解


Flink的RocksDB状态后端分配native内存。RocksDB分配的内存量不受Flink或JVM的控制,(理论上)可以无限制地增长。在容器环境中,这可能会有问题,因为进程可能超出容器的内存预算,并且进程将被杀死。除了相信RocksDB表现良好并遵循其内存配置之外,没有其他选择。然而,限制RocksDB的内存使用并不像设置limit参数那么容易。内存限制是由几个配置参数的相互作用决定的,这对于用户来说几乎是不可能的。更糟糕的是,多个RocksDB实例可以在同一个进程中运行,并根据Flink作业对配置进行推理。
随着新Task Executor内存模型的引入,RocksDB状态后端的内存消耗将受到Flink托管内存总量的限制。可通过 taskmanager.memory.managed.size或taskmanager.memory.managed.fraction配置。此外,用户可以调优RocksDB的写/读内存比率(state.backend.rocksdb.memory.write-buffer-ratio,默认为0.5)以及为索引/过滤器保留的内存部分 (state.backend.rocksdb.memory.high-prio-pool-ratio, 默认 0.1).
配置项 table.exec.resource.external-buffer-memory, table.exec.resource.hash-agg.memory, table.exec.resource.hash-join.memory, table.exec.resource.sort.memory 已经弃用。从Flink 1.10开始,这些配置选项被解释为weight hints,而不是绝对内存需求。Flink选择了合理的默认weight hints,用户不应该对其进行调整。
这是“FLIP-53:细粒度算子资源管理”讨论的核心问题。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69918097/viewspace-3169598/ ,如需转载,请注明出处,否则将追究法律责任。