概述
状态函数(State Function)和操作符可以跨单个元素/事件处理存储数据,State是任何类型操作的关键构建块。
比如:
- 当应用程序搜索某些事件模式时,状态(State)会存储到当前时间为止遇到的事件序列。
- 以
每分钟/小时/天
维度聚合事件时,状态(State)将保留挂起的聚合。 - 在流数据点上训练机器学习模型时,状态(State)保存当前版本的模型参数。
- 当需要管理历史数据时,状态(State)可以有效地访问过去发生的事件。
Flink需要通过状态(State)使用检查点和保存点对流应用程序状态容错。
Flink应用程序还可以重新扫描和分配状态(State)。
Flink的可查询状态特性允许在程序运行时从Flink外部访问状态。
在处理状态时,获取Flink’s state backends可能也很有用。Flink提供了不同的状态后端(state backend)
,用于指定状态的存储方式和存储位置。状态(State)也可以存储到Java heap
或堆外内存(off-heap)
。根据您的状态后端(state backend)
,Flink还可以管理应用程序的状态(State),Flink可以处理内存管理(如有必要,可能会溢出到磁盘),让应用程序保持非常大的状态(State)。可以在不更改应用程序逻辑的情况下配置状态后端(state backend)
。
下一步
处理状态(Working with State):如何在Flink应用程序中使用状态,并介绍不同类型的状态。
广播状态模式(The Broadcast State Pattern):介绍如何连接广播流和非广播流,并使用状态在它们之间交换信息。
检查点(Checkpointing):介绍如何启用和配置用于容错的检查点。
可查询状态(Queryable State):介绍如何在运行时从Flink外部访问状态。
状态模式演变(State Schema Evolution):介绍状态类型模式的演变。
管理状态的自定义序列化(Custom Serialization for Managed State):讨论如何实现自定义序列化器,特别是对于模式演化。