flink 1.8
State & Fault Tolerance
有状态函数和操作算子在各个元素/事件的处理过程中存储数据,使状态成为任何类型的复杂操作的关键构件。
例如
- 当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。
- 当按分钟/小时/天聚合事件时,状态持有这期间的聚合。
- 当在数据流上训练机器学习模型时,状态保存模型参数的当前版本。
- 当需要管理历史数据时,状态允许有效地访问过去发生的事件。
Flink需要知道状态,以便使用检查点checkpoints进行容错,并允许流应用程序进行savepoints。
关于状态的知识还允许对Flink应用程序进行重新定义,这意味着Flink负责跨并行实例重新分布状态。
Flink的可查询状态queryable state特性允许您在运行时从Flink外部访问状态。
在处理状态时,了解Flink的状态后端Flink’s state backends可能也很有用。Flink提供了不同的状态后端,用于指定状态存储的方式和位置。状态可以位于Java堆内或堆外。根据您的状态后端,Flink还可以管理应用程序的状态,这意味着Flink处理内存管理(如果必要的话可能溢出到磁盘),从而允许应用程序保存非常大的状态。可以在不更改应用程序逻辑的情况下配置状态后端。
Where to go next?
- Working with State:演示如何在Flink应用程序中使用状态,并解释不同类型的状态。
- The Broadcast State Pattern:说明如何连接广播流和非广播流,并使用状态在它们之间交换信息。
- Checkpointing:描述如何为容错启用和配置检查点。
- Queryable State: 说明如何在运行时从Flink外部访问状态。
- State Schema Evolution:状态模式演化:
- Custom Serialization for Managed State:讨论如何实现自定义序列化器,特别是对于模式演化。
https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/stream/state/