解读人员:小晨

 

目录结构如下,咱们直接进入正题

 

Apache Flink PMC教你学习Flink状态管理_离线

 

小晨分析No1:

第一张图,离线分析Flink的pipline定时checkpoint或者自己手动savepoint的数据信息,一般公司会用到,主要是离线分析实流按key保存的状态数据。第二张图,有的业务场景,想要把离线数据,迁移到实时数据他们会遇到如何把之前离线存储的数据,衔接到实时流上。最近有个腾讯的兄弟问的我的一个问题,如何把腾讯视频历史离线的播放量,衔接到实时流中。这个需要你先把离线的数据通过批处理的方式,写入到savepoint中,然后实时流通过savepoint启动,一定要注意,并行度一致,uid统一。这个后边我会单独弄个demo测试一下。

ppt

Apache Flink PMC教你学习Flink状态管理_操作方法_02

 

小晨分析No2:

看下面这张图,第一个部分就是状态修正,大家后边也很常 用有公司会用这个,我也带着大家一起看看,主要是你的中间状态,你 想修改一下,你需要如何处理,比如你先上的某个bug,导致你某个 operator的状态值是错误的,你需要手动修正,这个功能flink1.7, 不支持pojo中的类型变化,支持相同类型修改,1.9支持类型变化, 社区进行了改进。

 

ppt

 

Apache Flink PMC教你学习Flink状态管理_操作方法_03

小晨分析No3:

 

下面开始直接介绍实际场景 状态有3个:

  •  
ValueSate<String> userId,用户id
ValueSate<Long> lastSeenTimestamp,用户上次看商品的时间
ValueSate<Item> purchasedItems,用户历史购买的商品

 

咱们根据这个场景练习,我尽量解说的详细点 uid=“user_items”,是中间状态的名字,等会读取需要

 

ppt

Apache Flink PMC教你学习Flink状态管理_并行度_04

小晨分析No4:

下面开始实战读取线上状态

第一步:先根据uid读取,然后进入咱们的操作方法,生产dataset第二步:把dataset转成datastream,用到operatortransformation,人工在代码中修改状态值第三步:然后按之前的uid写入,并保存到savepoint中

 

ppt

 

 

Apache Flink PMC教你学习Flink状态管理_操作方法_05

小晨分析No5:

 

然后进入咱们的读取操作方法,UserKeyedStateReaderFunction

 

ppt

 

Apache Flink PMC教你学习Flink状态管理_操作方法_06

 

小晨分析No6:

 

然后进入咱们的修改操作方法,UserKeyedStateBootstrapFunction

ppt

 

Apache Flink PMC教你学习Flink状态管理_操作方法_07

 

小晨分析No7:

整个内部执行流程

ppt

Apache Flink PMC教你学习Flink状态管理_flink_08

Apache Flink PMC教你学习Flink状态管理_flink_09

 

小晨分析No8:

 

 

我们要修改状态如何去做,也很简单,修改完,写入savepoint到

ppt

 

Apache Flink PMC教你学习Flink状态管理_离线_10

小晨分析No8:

下面说说总结

注意并行度,要统一并行度咱们场景有3个sate,如果你修改其中一个,另外两个不修改,你不能删除老的checkpoint,也就是你读取的checkpoint,因为新的checkpoint中的Metadata以来以老的Metadata。看下图,修改完保存新的checkpoint,内部只保存了被修改的状态数据,所以,你要恢复的时候,历史的checkpoint不能删除,启动的时候,会根据新的Metadata元数据找到历史的checkpoint,flink会根据uid进行合并。

ppt

Apache Flink PMC教你学习Flink状态管理_并行度_11

最后

希望大家,放下浮躁的心态,踏下心来,专心搞技术。

希望大家都能升职加薪

Apache Flink PMC教你学习Flink状态管理_离线_12

 

 

 

 小晨说数据

一个讲述互联网大数据的公众号 ❤

    

下面2019年9月10号教师节是免费公益星球,邀请你的小伙伴一起来学习吧。