Как Flink обрабатывает контрольные точки и состояние в IterativeStream? - PullRequest
0 голосов
/ 14 февраля 2019

В документации я вижу, что:

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 (что означает, что он также может содержать состояние)?

1 Ответ

0 голосов
/ 15 февраля 2019

Ограничение применяется только к DataStream / Потоковому API Флинка при использовании итераций.При использовании DataSet / Batch API ограничений нет.

При использовании потоковых итераций вы фактически не теряете состояние оператора, но вы можете потерять записи, которые были отправлены оператором обратно в заголовок итерации.через край петли.В вашем примере записи, отправленные с updatedCentroids на inputsAndCentroids, могут быть потеряны в случае сбоя.Следовательно, Flink не может гарантировать ровно один раз гарантии обработки в этом случае.

На самом деле существует предложение по улучшению Flink , которое устраняет этот недостаток.Тем не менее, он еще не закончен.

...