【Flink】基于 Flink 的流式数据实时去重

 

State Backends | Apache Flink https://nightlies.apache.org/flink/flink-docs-release-1.20/zh/docs/dev/datastream/fault-tolerance/state_backends/

 

Flink 提供了多种 state backends,它用于指定状态的存储方式和位置。

状态可以位于 Java 的堆或堆外内存。取决于你的 state backend,Flink 也可以自己管理应用程序的状态。 为了让应用程序可以维护非常大的状态,Flink 可以自己管理内存(如果有必要可以溢写到磁盘)。 默认情况下,所有 Flink Job 会使用 Flink 配置文件 中指定的 state backend。

 

 

【Flink】基于 Flink 的流式数据实时去重-腾讯云开发者社区-腾讯云 https://cloud.tencent.com/developer/article/1707045

我们不能将状态仅交由内存管理,因为内存的容量是有限制的,当状态数据稍微大一些时,就会出现内存不够的问题。由于 Flink 本身提供了有状态的计算,并且封装了一些底层的实现,比如状态的高效存储、Checkpoint 和 Savepoint 持久化备份机制、计算资源扩缩容等问题,所以我们只需要调用 Flink API,专注于业务逻辑即可。

2.状态类型

Managed State 和 Raw State

Flink有两种基本类型的状态:托管状态(Managed State)和原生状态(Raw State)。从名称中也能读出两者的区别:Managed State 是由 Flink 管理的,Flink 帮忙存储、恢复和优化,Raw State 是开发者自己管理的,需要自己序列化。两者对比如下:

 

Managed State

Raw State

状态管理方式

Flink Runtime 托管,自动存储、自动恢复、自动伸缩

用户自己管理

状态数据结构

Flink提供的常用数据结构,如 ListState、MapState 等

字节数组:byte[]

使用场景

绝大多数 Flink 算子

用户自定义算子

大部分情况下我们使用 Managed State 便可满足需求。

 

 

posted @ 2024-10-11 18:48  papering  阅读(32)  评论(0编辑  收藏  举报