影响 Flink 有状态函数和算子性能的 3 个重要因素

Posted @SmartSi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了影响 Flink 有状态函数和算子性能的 3 个重要因素相关的知识,希望对你有一定的参考价值。

传送门:Flink 系统性学习笔记

本文重点介绍开发人员在有状态流处理应用中使用 Flink 的 Keyed State 的函数或算子评估性能时应牢记的3个重要因素。

Keyed State 是 Flink 中两种状态中的其中一种,另一种是 Operator State。顾名思义,Keyed State 与 Key 进行绑定,只适合处理来自 KeyedStream 数据的函数和算子。Operator State 和 Keyed State 之间的区别在于 Operator State 是作用于算子的每个并发实例上(子任务),而 Keyed State 是基于每个 Key 的一个状态分区进行分区或分片。

下面我们讨论 3 个会影响 Flink Keyed State 性能的因素,在开发有状态流应用程序时应该记住这些因素。

1. 选择合适的状态后端

对 Flink 应用程序有状态函数或算子性能影响最大的是我们所选择的状态后端。最明显的因素是每个状态后端以不同的方式处理状态序列化以持久化保存。

例如,在使用 FsStateBackend 或 MemoryStateBackend 时,本地状态在运行时期间作为堆上对象进行维护,因此在访问和更新时开销比较低。仅在创建状态快照以创建 Flink 检查点或保存点时才会发生序列化开销。使用这些状态后端的缺点是状态大小受 JVM 堆大小的限制,并且可能会遇到 OutOfMemory 错误或垃圾回收的长暂停。相反,诸如 RocksDBStateBackend 之类的核外(out-of-core)状态后端可以通过在磁盘上维护本地状态来允许更大

以上是关于影响 Flink 有状态函数和算子性能的 3 个重要因素的主要内容,如果未能解决你的问题,请参考以下文章

Flink State

Flink rescale state 调整有状态算子的并行度

Flink DataStream 处理函数 ProcessFunction 和 KeyedProcessFunction

Flink DataStream 处理函数 ProcessFunction 和 KeyedProcessFunction

13-flink-1.10.1-Flink状态管理

13-flink-1.10.1-Flink状态管理