首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flink状态类型及应用

在Flink架构体系中,有状态计算是Flink非常重要的特性之一,有状态计算是指在程序计算过程中,在Flink程序内部存储计算的中间结果,并提供给后续Function或者计算结果使用。状态数据可以维系在本地存储中,这里的存储可以是Flink的堆内存或者堆外内存,或者第三方介质,如:Flink中的RocksDB.

Flink状态类型及应用

状态类型

在Flink中根据数据集是否根据Key进行分区,将状态分为Keyed State 和 Operator State(Non-keyed State)两种类型。

(1)Keyed State

表示和Key相关的一种State,只能用于KeydStream类型数据集对应的Functions和 Operators之上。Keyed State是 Operator State的特例,区别在于 Keyed State 事先按照key对数据集进行了分区,每个 Key State 1仅对应ー个 Operator和Key的组合。Keyed State可以通过 Key Groups 进行管理,主要用于当算子并行度发生变化时,自动重新分布Keyed State数据。在系统运行过程中,一个Keyed算子实例可能运行一个或者多个Key Groups的keys。

(2)Operator State

与 Keyed State不同的是, Operator State只和并行的算子实例绑定,和数据元素中的key无关,每个算子实例中持有所有数据元素中的一部分状态数据。Operator State支持当算子实例并行度发生变化时自动重新分配状态数据。

同时在 Flink中 Keyed State和 Operator State均具有两种形式,其中一种为托管状态( Managed State)形式,由 Flink Runtime中控制和管理状态数据,并将状态数据转换成为内存 Hash tables或 ROCKSDB的对象存储,然后将这些状态数据通过内部的接口持久化到 Checkpoints 中,任务异常时可以通过这些状态数据恢复任务。另外一种是原生状态(Raw State)形式,由算子自己管理数据结构,当触发 Checkpoint过程中, Flink并不知道状态数据内部的数据结构,只是将数据转换成bys数据存储在 Checkpoints中,当从Checkpoints恢复任务时,算子自己再反序列化出状态的数据结构。Datastream API支持使用 Managed State和 Raw State两种状态形式,在 Flink中推荐用户使用 Managed State管理状态数据,主要原因是 Managed State f能够更好地支持状态数据的重平衡以及更加完善的内存管理。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190821A07KCM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券