В документации я вижу, что:
Flink в настоящее время предоставляет гарантии обработки только для заданий без итерацийВключение контрольной точки в итеративном задании вызывает исключение.Чтобы принудительно установить контрольные точки в итеративной программе, пользователь должен установить специальный флаг при включении контрольных точек: env.enableCheckpointing (interval, force = true).
Обратите внимание, что записи в полете по краям цикла (иизменения состояния, связанные с ними) будут потеряны при сбое.
Относится ли это к итерациям в пакетных заданиях или к итерационным потокам, или к обоим?
Если это относится к итерационным потокамкакое состояние следующих операторов будет доступно в случае сбоя?(Пример взят из этого разговора о совместном использовании состояния между операторами, использующими ConnectedIterativeStreams
и прекращении итерации с помощью .closeWith(stream.broadcast())
).
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
(что означает, что он также может содержать состояние)?