Flink面试_002、operator state 和 keyed state 两者的区别?最大并行度和这两种 state 的关系?

举个例子,当用户停止任务、更新代码逻辑并且改变任务并发度时,两种 state 都是怎样进行恢复的

1. 区分 operator-state 和 keyed-state 的方式
 a. operator-state:
  1. 状态适用算子:所有算子都可以使用 operator-state,没有限制。
  2. 如果需要使用 operator-state,需要实现 CheckpointedFunction 或 ListCheckpointed 接口
  3. DataStream API 中,operator-state 提供了 ListState、BroadcastState、UnionListState 3 种用户接口
  4. 状态的存储粒度:以单算子单并行度粒度访问、更新状态
  5. 并行度变化时:
   a. ListState:均匀划分到算子的每个 sub-task 上
   b. BroadcastState:每个 sub-task 的广播状态都一样
   c. UnionListState:将原来所有元素合并,合并后的数据每个算子都有一份全量状态数据
 b. keyed-state:
  1. 状态适用算子:keyed-stream 后的算子使用。注意这里很多同学会犯一个错误,就是大家会认为 keyby 后面跟的所有算子都使用的是 keyed-state,但这是错误的 ,比如有 keyby.process.flatmap,其中 flatmap 中使用状态的话是 operator-state
  2. 从 context 接口获取具体的 keyed-state
  3. DataStream API 中,keyed-state 提供了 ValueState、MapState、ListState 等用户接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值