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

Apache flink Flink如何处理IterativeStream中的检查点和状态?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我可以从中看出: Flink目前只为没有 迭代。在迭代作业上启用检查点会导致 例外。为了在迭代程序上强制执行检查点 启用检查点时,用户需要设置特殊标志: 环境启用检查点(间隔,强制=true) 请注意,飞行中的记录在循环边缘(和状态 与之关联的更改)将在故障期间丢失 这是指批处理作业中的迭代还是指迭代流,还是两者都指 如果它指的是迭代流,那么在发生故障时,下列操作符的状态是什么?(使用ConnectedIterativeStreams跨操作员共享状态并使用.closeWith(stream.br

我可以从中看出:

Flink目前只为没有 迭代。在迭代作业上启用检查点会导致 例外。为了在迭代程序上强制执行检查点 启用检查点时,用户需要设置特殊标志: 环境启用检查点(间隔,强制=true)

请注意,飞行中的记录在循环边缘(和状态 与之关联的更改)将在故障期间丢失

这是指批处理作业中的迭代还是指迭代流,还是两者都指

如果它指的是迭代流,那么在发生故障时,下列操作符的状态是什么?(使用
ConnectedIterativeStreams
跨操作员共享状态并使用
.closeWith(stream.broadcast())
终止迭代的示例)

DataStream输入=。。。
ConnectedIterativeStreams Inputs和Centroids=input.iterate().withFeedbackType(Centroids.class)
DataStream updatedCentroids=inputsAndCentroids.flatMap(新的MyCollatMap())
inputsAndCentroids.closeWith(更新的centroids.broadcast())
类MyClotMap实现CoFlatMapFunction{…}

如果
MyCoFlatmap
是一个
协处理函数而不是
coflatmap函数
(这意味着它也可以保持状态),会有什么变化吗?

当使用迭代时,限制只适用于Flink的
数据流
/Streaming API。使用
数据集
/Batch API时,没有任何限制

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


实际上,有一种方法可以解决这个缺点。但是,它尚未完成。

谢谢,直到-问题跟踪FLIP-16(FLINK-3257)似乎已停止。你知道它是否正在积极开发中吗?好吧,社区中没有人在积极开发这个功能。然而,我知道一些社区成员希望在Flink之上开发ML应用程序(使用流API),在Flink中迭代支持是一项严格的要求。因此,我希望社区很快会增加这个功能。是的,在GH()上,SenorCarbone似乎一直在积极开发,直到3月17日,然后一切都平静了下来。
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>{...}