有状态函数和操作符在各个元素/事件的处理过程中存储数据,使得状态成为任何类型的更复杂操作的关键构建块。
使用案例:
- 当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。
- 当以每分钟/小时/天的速度聚合事件时,状态将保存挂起的聚合。
- 当在数据流上训练机器学习模型时,状态保存模型参数的当前版本。
- 当需要管理历史数据时,状态允许有效地访问过去发生的事件。
Flink需要了解状态,以便使用检查点开启状态容错,并允许流应用程序的保存点。
要知道状态也允许对Flink程序进行重启,意味着Flink负责跨并行实例重新分配状态。
Flink的可查询状态特性允许您在运行时从Flink外部访问状态。
在处理状态时,了解Flink的状态后端可能也很有用。Flink提供了不同的状态后端,用于指定状态存储的方式和位置。状态可以位于Java的堆上,也可以位于堆外。根据您的状态后端,Flink还可以管理应用程序的状态,这意味着Flink处理内存管理(如果必要的话可能溢出到磁盘),以允许应用程序保存非常大的状态。可以在不更改应用程序逻辑的情况下配置状态后端。
分支:
- State的工作原理:演示如何在Flink应用程序中使用状态,并解释不同类型的状态。
- 广播状态模式:说明如何连接广播流和非广播流,并使用状态在它们之间交换信息。
- Checkpointing:如何为容错启用和配置检查点。
- 可查询State:如何在运行时从Flink外部访问状态。
- 状态模式演化:如何演化状态类型的模式。
- 管理State的自定义序列化:讨论如何实现自定义序列化器,特别是对于模式演化。