开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink状态怎么有大有小?是为什么呢?

3b8bd3f313cbdee1135e0967664119f0.png Flink状态怎么有大有小?

展开
收起
圆葱猪肉包 2023-04-19 16:28:47 221 0
2 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    Flink 状态在运行中的大小,主要与两个因素有关系:

    1. 状态存储的数据量

    在 Flink 任务运行过程中,需要存储一些状态数据,如键控状态、窗口状态等。这些状态数据的大小,取决于输入数据的内容、窗口大小等因素。如果输入数据的键非常多,那么状态数据也会非常大。

    1. 并行度

    Flink 任务的状态大小还与任务的并行度有关。每个并行任务都会生成一份状态数据,因此并行度越高,状态数据也会相应增加。同时,对于 keyed state 而言,其状态大小还与 Key 的数量有关。如果多个 Key 的状态数据被分配到了同一个 Task Manager,那么它们就会被合并,从而导致状态数据变得更大。

    因此,Flink 的状态大小是与具体的应用场景有关的,需要根据具体情况进行分析,并视情况进行调优。当在任务运行过程中出现状态数据过大,可以考虑通过以下方式进行优化:

    1. 调整窗口大小或窗口类型,减少状态数据存储量。

    2. 调整并行度或者调整 Key 的数量,减少状态数量,使同一个 Task Manager 分配到的 Key 数量不会太多。

    3. 使用 RocksDBStateBackend 或者 FsStateBackend 这类高效的状态后端,提高状态存储的效率。

    4. 调整用户代码,减少中间数据量,从而减少状态存储量。

    2023-04-30 23:09:13
    赞同 展开评论 打赏
  • 十年摸盘键,代码未曾试。 今日码示君,谁有上云事。

    在 Flink 的框架中,进行有状态的计算是 Flink 最重要的特性之一。所谓的状态,其实指的是 Flink 程序的中间计算结果。Flink 支持了不同类型的状态,并且针对状态的持久化还提供了专门的机制和状态管理器。

    在流处理过程中那些需要记住的数据,而这些数据既可以包括业务数据,也可以包括元数据。Flink 本身提供了不同的状态管理器来管理状态,并且这个状态可以非常大。

    Flink状态有大有小,原因是使用中间表后因为中间数据也在作为sink输出,这样数据变化时会像一个传送带一样第一层数据变化引起第二层变化然后引起第三层变化。

    解决方法:开启微批将中间数据跳动过滤掉,设置如下: table.exec.mini-batch.enabled 设置微true table.exec.mini-batch.allow-latency 缓存数据最大的时间间隔,超过该间隔,将会强制触发已聚合数据写出给下游,默认-1毫秒即立即触发,可以根据需求自行调整。实时性要求较高可以适当调低,实时性要求不高可调高 table.exec.mini-batch.size 黄村数据量最大条数,为防止oom做的双重保障与table.exec.mini-batch.allow-latency设置的时间满足一个就会触发。

    2023-04-19 18:20:55
    赞同 1 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载