当前位置: 首页 > 知识库问答 >
问题:

Flink如何处理IterativeStream中的检查点和状态?

傅胡媚
2023-03-14

我可以在文档中看到:

Flink目前只为没有迭代的作业提供处理保证。对迭代作业启用检查点会导致异常。为了在迭代程序上强制检查点,用户需要在启用检查点时设置一个特殊的标志:env.enablecheckpointing(interval,force=true)。

DataStream<Point> input = ...
ConnectedIterativeStreams<Point, Centroids> inputsAndCentroids = input.iterate().withFeedbackType(Centroids.class)
DataStream<Centroids> updatedCentroids = inputsAndCentroids.flatMap(new MyCoFlatmap())
inputsAndCentroids.closeWith(updatedCentroids.broadcast())

class MyCoFlatmap implements CoFlatMapFunction<Point, Centroid, Centroid>{...}

如果mycoflatmap是一个coprocessfunction而不是一个coflatmapfunction(这意味着它也可以保存状态),会有什么变化吗?

共有1个答案

柳胡媚
2023-03-14

该限制仅适用于使用迭代时的Flink的datastream/streaming API。在使用数据集/batch API时,没有任何限制。

当使用流式迭代时,实际上不会丢失运算符状态,但可能会丢失通过循环边缘从运算符发送回迭代头的记录。在您的示例中,如果发生故障,从UpdatedCentroids发送到InputsandCentroids的记录可能会丢失。因此,在这种情况下,Flink不能保证一次准确的处理保证。

事实上,有一项改善建议是针对这个缺点而提出的。然而,目前还没有完成。

 类似资料:
  • 一、状态分类 相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。即你可以将中间的计算结果进行保存,并提供给后续的计算使用: 具体而言,Flink 又将状态 (State) 分为 Keyed State 与 Operator State: 2.1 算子状态 算子状态 (Operator State):顾名思义,状态是和算子进行绑定的,一个算子的状态不能被其他算子所访问到。官方

  • 主程序正在消费kafka事件,然后过滤- 但是我得到了以下例外: 以下是flink-conf.yaml中的一些配置 任何想法为什么会发生异常以及如何解决问题? 谢谢

  • 我有以下CEP PatternStream,其中数据流是基于实体ID分区的,因为只有实体具有相同的实体ID时,我才对模式匹配感兴趣: 但随后我注意到检查点状态大小随着实体ID数量的增加而增加。如果我对检查点的理解是正确的,这是意料之中的,因为运算符状态的数量会增加。但我想弄清楚是否有其他方法可以最小化检查点状态大小。 > 有没有不同的方法来实现这种模式匹配,而不根据实体ID对数据流进行分区?

  • 我对闪身是个新手。我正在尝试在我的应用程序中启用检查点和状态。我从Flink文档中看到了我们是如何存储键控状态的。但是我想知道我们是否可以存储非键控状态(的状态)

  • 下面是我对Flink的疑问。 我们可以将检查点和保存点存储到RockDB等外部数据结构中吗?还是只是我们可以存储在RockDB等中的状态。 状态后端是否会影响检查点?如果是,以何种方式? 什么是状态处理器API?它与我们存储的保存点和检查点直接相关吗?状态处理器API提供了普通保存点无法提供的哪些额外好处? 对于3个问题,请尽可能描述性地回答。我对学习状态处理器API很感兴趣,但我想深入了解它的应

  • 我有一份流媒体工作: 读Kafka-- 启动时,一切都很好。问题是,过了一段时间,磁盘空间被我认为是链接检查点的东西填满了。 我的问题是,在链接作业运行时是否应该清除/删除检查点?找不到此上的任何资源。 我使用的是写入/tmp的文件系统后端(无hdfs设置)