有状态函数和操作符在单个元素/事件的处理过程中存储数据,使状态成为任何类型的复杂操作的关键构件。
例如:
- 当应用程序搜索某些事件模式时,状态将存储到目前为止所遇到的事件列表。
- 当按分钟/小时/天聚合事件时,状态持有这期间的聚合。
- 当通过数据点流训练机器学习模型时,状态保存模型参数的当前版本。
- 当需要管理历史数据时,状态允许对发生在过去的事件进行有效的访问。
Flink需要了解状态,以便使用Checkpoint进行容错,并允许流应用程序进行savepoint。
关于状态的知识还允许重新定义Flink应用程序,这意味着Flink负责跨并行实例重新分配状态。
Flink的 可查询状态 特性允许在运行时,从Flink外部访问状态。
当使用状态时,阅读Flink的状态后端也是很有用的。Flink提供了不同的状态后的,它们有特定的存储方式和位置。状态可以位于Java堆内或堆外。根据您的状态后端,Flink还可以管理应用程序的状态,这意味着Flink处理内存管理(如果必要的话可能会溢出到磁盘),从而允许应用程序保持非常大的状态。可以在不改变应用程序逻辑的情况下配置状态后端。
网友评论