Flink State 最佳实践

本文深入探讨了Flink State的使用,包括StateBackend的分类,特别是RocksDB StateBackend的配置与优化。文章提供了Operator State和Keyed State的使用心得,强调了长list的慎用、UnionListState的正确操作,以及如何处理RocksDB中的大value值场景。此外,还分享了关于checkpoint间隔和超时时间的设置建议。
摘要由CSDN通过智能技术生成

State 概念回顾

我们先回顾一下到底什么是 state,流式计算的数据往往是转瞬即逝,当然,真实业务场景不可能说所有的数据都是进来之后就走掉,没有任何东西留下来,那么留下来的东西其实就是称之为 state,中文可以翻译成状态。

在下面这个图中,我们的所有的原始数据进入用户代码之后再输出到下游,如果中间涉及到 state 的读写,这些状态会存储在本地的 state backend (可以对标成嵌入式本地 kv 存储) 当中。
在这里插入图片描述
接下来我们会在四个维度来区分两种不同的 state:operator state 以及 keyed state

  1. 是否存在当前处理的 key (current key):operator state 是没有当前 key 的概念,而 keyed state 的数值总是与一个 current key 对应。
  2. 存储对象是否 on heap:目前 operator state backend 仅有一种 on-heap 的实现;而 keyed state backend 有 on-heap 和 off-heap (RocksDB) 的多种实现。
  3. 是否需要手动声明快照(snapshot)和恢复(restore)方法:operator state 需要手动实现 snapshot 和 restore 方法;而 keyed state 则由 backend 自行实现,对用户透明。
  4. 数据大小:一般而言,我们认为 operator state 的数据规模是比较小的;认为 keyed state 规模是相对比较大的。需要注意的是,这是一个经验判断,不是一个绝对的判断区分标准。

StateBackend 的分类

下面这张图对目前广泛使用的三类 state backend 做了区分,其中绿色表示所创建的 operator/keyed state backend 是 on-heap 的,黄色则表示是 off-heap 的。
在这里插入图片描述
一般而言,在生产中,我们会在 FsStateBackend 和 RocksDBStateBackend 间选择:

  • FsStateBackendÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值