问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

说说Flink中的State

发布网友 发布时间:2024-09-26 09:43

我来回答

1个回答

热心网友 时间:2024-10-24 05:40

分析&回答基本类型划分

在Flink中,按照基本类型,对State做了以下两类的划分:

Keyed State,和Key有关的状态类型,它只能被基于KeyedStream之上的操作,方法所使用。我们可以从逻辑上理解这种状态是一个并行度操作实例和一种Key的对应, <parallel-operator-instance, key>。保存State的数据结构:ValueState、ListState、MapState、RecingState、AggregatingState<IN,OUT> 等

Operator State(或者non-keyed state) ,它是和Key无关的一种状态类型。相应地我们从逻辑上去理解这个概念,它相当于一个并行度实例,对应一份状态数据。因为这里没有涉及Key的概念,所以在并行度(扩/缩容)发生变化的时候,这里会有状态数据的重分布的处理。?如:Flink中的KafkaConnector就使?了 Operator State,它会在每个Connector实例中,保存该实例消费Topic的所有(partition,offset)映射。如下图:

[]()组织形式划分

但是在这里还有一种按照组织形式的划分,也可以理解为按照runtime层面的划分,又可以分为一下两类:

Managed State,这类State的内部结构完全由Flink runtime内部来控制,包括如何将它们编码写入到checkpoint中等等。

Raw State,这类State就比较显得灵活一些,它们被保留在操作运行实例内部的数据结构中。从Flink系统角度来观察,在checkpoint时,它只知道的是这些状态数据是以连续字节的形式被写入checkpoint中。等待进行状态恢复时,又从字节数据反序列化为状态对象。

Managed State可以在所有的data stream相关方法中被使用,官方也是推荐优先使用这类State,因为它能被Flink runtime内部做自动重分布而且能被更好地进行内存管理。

反思&扩展State Time-To-Live (TTL)

在Flink内部,我们能够对State设置TTL,使其状态过期然后被系统清理掉。针对State TTL,可详见StateTtlConfig类的配置设置。

[]()另类的一种State:Broadcast State模式

Broadcast State具有Broadcast流的特殊属性,它是一种小数据状态广播向其它流的形式,从而避免大数据流量的传输。在这里,其它流是对广播状态只有只读操作的允许,因为不同任务间没有跨任务的信息交流。一旦有运行实例对于广播状态数据进行更新了,就会造成状态不一致现象。

[]()State的可查询性

State状态是一类能够反映任务当前执行情况的信息数据。所以当我们想要了解任务的执行情况时,我们就会想能不能够去查询里面的状态信息呢?Flink官方给出的答案是可以的,它有提供相关的API不过还不保证其完全稳定性。而且这里有一点需要注意,当我们对状态进行查询时,同时地它的信息被并发修改。Flink为了避免Job的处理延时,并没有对此做完全地同步控制。

除了通过API的获取方式外,这里还支持一种QueryableStateStream?来获取状态数据的方式。任务状态数据将会更新到QueryableStateStream 流中,可以理解为是State的一个sink。

[]()定制化State序列化/反序列实现

Flink内部支持定制化的State序列化器/反序列化实现。这里的序列化过程指的是将状态数据序列为字节数据写到checkpoint中,再从checkpoint文件字节数据反序列为状态对象数据。针对不同类型的State数据,可以定义各自不同的序列化/反序列的实现。

[]()State的序列化演进

这来还存在异构序列化实现的演进问题,因为存在一种情况,任务在恢复状态数据时,会由新的序列化引入。如果出现新的序列化实现无法读取老的状态数据,那么需要做一个兼容性的改动,进行状态迁移,或者先用老的序列化实现读取老状态,然后新的状态用新的序列化方式写出。

State在Flink任务的运行时保存了非常重要的数据,明白如何去更好地使用State将会对我们了解,恢复任务有着很大的帮助。

刷刷面试:一站式解决面试问题,如有好的面试知识或技巧期待您的共享!

原文:https://juejin.cn/post/7095562134083354660

热心网友 时间:2024-10-24 05:41

分析&回答基本类型划分

在Flink中,按照基本类型,对State做了以下两类的划分:

Keyed State,和Key有关的状态类型,它只能被基于KeyedStream之上的操作,方法所使用。我们可以从逻辑上理解这种状态是一个并行度操作实例和一种Key的对应, <parallel-operator-instance, key>。保存State的数据结构:ValueState、ListState、MapState、RecingState、AggregatingState<IN,OUT> 等

Operator State(或者non-keyed state) ,它是和Key无关的一种状态类型。相应地我们从逻辑上去理解这个概念,它相当于一个并行度实例,对应一份状态数据。因为这里没有涉及Key的概念,所以在并行度(扩/缩容)发生变化的时候,这里会有状态数据的重分布的处理。?如:Flink中的KafkaConnector就使?了 Operator State,它会在每个Connector实例中,保存该实例消费Topic的所有(partition,offset)映射。如下图:

[]()组织形式划分

但是在这里还有一种按照组织形式的划分,也可以理解为按照runtime层面的划分,又可以分为一下两类:

Managed State,这类State的内部结构完全由Flink runtime内部来控制,包括如何将它们编码写入到checkpoint中等等。

Raw State,这类State就比较显得灵活一些,它们被保留在操作运行实例内部的数据结构中。从Flink系统角度来观察,在checkpoint时,它只知道的是这些状态数据是以连续字节的形式被写入checkpoint中。等待进行状态恢复时,又从字节数据反序列化为状态对象。

Managed State可以在所有的data stream相关方法中被使用,官方也是推荐优先使用这类State,因为它能被Flink runtime内部做自动重分布而且能被更好地进行内存管理。

反思&扩展State Time-To-Live (TTL)

在Flink内部,我们能够对State设置TTL,使其状态过期然后被系统清理掉。针对State TTL,可详见StateTtlConfig类的配置设置。

[]()另类的一种State:Broadcast State模式

Broadcast State具有Broadcast流的特殊属性,它是一种小数据状态广播向其它流的形式,从而避免大数据流量的传输。在这里,其它流是对广播状态只有只读操作的允许,因为不同任务间没有跨任务的信息交流。一旦有运行实例对于广播状态数据进行更新了,就会造成状态不一致现象。

[]()State的可查询性

State状态是一类能够反映任务当前执行情况的信息数据。所以当我们想要了解任务的执行情况时,我们就会想能不能够去查询里面的状态信息呢?Flink官方给出的答案是可以的,它有提供相关的API不过还不保证其完全稳定性。而且这里有一点需要注意,当我们对状态进行查询时,同时地它的信息被并发修改。Flink为了避免Job的处理延时,并没有对此做完全地同步控制。

除了通过API的获取方式外,这里还支持一种QueryableStateStream?来获取状态数据的方式。任务状态数据将会更新到QueryableStateStream 流中,可以理解为是State的一个sink。

[]()定制化State序列化/反序列实现

Flink内部支持定制化的State序列化器/反序列化实现。这里的序列化过程指的是将状态数据序列为字节数据写到checkpoint中,再从checkpoint文件字节数据反序列为状态对象数据。针对不同类型的State数据,可以定义各自不同的序列化/反序列的实现。

[]()State的序列化演进

这来还存在异构序列化实现的演进问题,因为存在一种情况,任务在恢复状态数据时,会由新的序列化引入。如果出现新的序列化实现无法读取老的状态数据,那么需要做一个兼容性的改动,进行状态迁移,或者先用老的序列化实现读取老状态,然后新的状态用新的序列化方式写出。

State在Flink任务的运行时保存了非常重要的数据,明白如何去更好地使用State将会对我们了解,恢复任务有着很大的帮助。

刷刷面试:一站式解决面试问题,如有好的面试知识或技巧期待您的共享!

原文:https://juejin.cn/post/7095562134083354660

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 state协议是什么意思? "参数state不一致,请检查什么意思" 刘秀推翻王莽建立新的王朝 刘秀为什么延用汉作为国号 怎么自己写歌呢?? 想自己写歌需要做哪些准备? ...我想学习如何去写歌,但是我完全没有基础该怎么样开始呢,望各位大神... 有什么PSP网站的游戏,有高速迅雷下载通道的? 谁有PSP可玩的PS游戏下载网站推荐一个,推荐好的在加100分. 出国留学大约需要多少钱 出国留学需用多少钱 出国留学费用大概多少钱 出国留学一个月多少钱 新加坡出国留学一般多少钱 被爱人三番五次的欺骗后依然爱对方,这是什么心态? ...求解答 谢谢 步骤 我已经解约 就是找不到地方打印解 ...设置的网页的格式都像照相一样的复制并打印出来,怎么办 我想把整个网页打印出来,就是和电脑屏幕上的一样,图也要打印,要怎么打... 自榨花生油放5年还可以吃吗,自榨花生油放了三年能吃吗 花生油3年4年了还能吃吗,自榨花生油放了三年能吃吗 我家自己榨的花生油,放了4年了,不知道还能吃吗?有谁知道可以告诉我,先... 什么是结汇什么是售汇 什么是结售汇业务 《安眠药》是电视剧《妻子的谎言》中的插曲,这首歌是周普进唱的,网上为... 妻子的谎言 主题曲是什么歌? 一盆花放几粒复合肥 一盆花放几粒复合肥合适 2022年长白山职业技术学院励志奖学金发放时间 榴莲搭配什么好吃 危化品生产经营单位取得了安全管理人员证书的安全管理人员在未... 荣耀20广角在哪里开启,怎么打开? 电脑是不是可以玩所有的TV游戏啊,比如xbox360和ps3 上的游戏我看电脑上... ...PSP PS3 xbox360 NDS 3DS GBA WII X360的这些游戏能在电脑上运行吗... 光环怎么装备 ...总是担心这个问题,又不好意思问别人,觉得自己问这个很丢人... 问别人如果你老了没有退休金靠什么生活这个问题就是神经不正常吗,担心... 看见没有退休金的人非常非常担心,她们也不交任何养老保险,这样的人老了... ...总想问别人以后有退休金吗,他以后老了没有退休金靠什么生活啊,我非... 没有退休金的人会非常害怕,不知道以后老了咋办,会靠什么活下去,会死吗... 问别人老了没有退休金靠什么生活,有的人特别善良会回答你,为什么有的... 尿毒清服药间隔超过8小时会怎么样 三毡四油沥青防水卷材中的"三毡四油"是什么意思