当前位置:   article > 正文

Flink学习笔记之有状态流处理_flink使用那种方式处理有状态数据

flink使用那种方式处理有状态数据

什么是State?


尽管数据流中的许多操作一次仅查看一个事件(例如事件解析器),但某些操作会记住多个事件的信息(例如窗口运算符)。这些操作称为有状态

有状态操作的一些示例:

  • 当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。
  • 在每分钟/小时/天汇总事件时,状态将保留待处理的汇总。
  • 在数据点流上训练机器学习模型时,状态保持模型参数的当前版本。
  • 当需要管理历史数据时,该状态允许有效访问过去发生的事件。

Flink 需要了解状态,以便使用检查点 和 保存点来使其容错。

关于状态的知识还允许重新缩放 Flink 应用程序,这意味着 Flink 负责在并行实例之间重新分配状态。

可查询状态允许您在运行时从Flink 外部访问状态。

在使用状态时,阅读有关 Flink 的状态后端(Flink`s State Backend)的信息可能也很有用。Flink 提供了不同的状态后端,用于指定状态的存储方式和位置。

 

键控状态(Keyed State)


键控状态被维持在嵌入式键/值存储中。严格将状态与有状态运算符读取的流一起进行分区和分发。因此,仅在键控流上(即在键控/分区数据交换之后)才可以访问键/值状态,并且仅限于与当前事件的键关联的值。对齐流键和状态键可确保所有状态更新都是本地操作,从而确保一致性而没有事务开销。这种对齐还允许重新分配状态并透明地调整流分区。

Keyed State 被进一步组织成所谓的 Key Groups。密钥组是 Flink 可以重新分配密钥状态的原子单位。与定义的最大并行度完全一样的密钥组。在执行期间,键控运算符的每个并行实例都使用一个或多个键组的键。

状态持久性


Flink 通过结合流重播 和 检查点来实现容错。检查点标记每个输入流中的特定点以及每个运算符的对应状态。通过恢复操作员的状态并从检查点开始重播记录,可以在保持一致性(一次处理语义)的同时从检查点恢复流式数据流。

检查点间隔是在执行期间 与 恢复期间 (需要重播的记录数) 之间权衡容错开销的一种方法。

容错机制连续绘制分布式流数据流的快照。对于状态较小的流应用程序

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/921689
推荐阅读
相关标签
  

闽ICP备14008679号