Apache Flink: окно контрольной точки - PullRequest
0 голосов
/ 30 октября 2018

Я хочу знать, как проверить окно. Например, окно wordcount :

DataStream<Tuple3<String, Long, Long>> counts =
            // split up the lines in pairs (2-tuples) containing: (word,1)
                    text
                    .flatMap(new Tokenizer())
                    .assignTimestampsAndWatermarks(new timestamp())
                    .keyBy(0)
                    .timeWindow(Time.seconds(2))
                    .process(new CountFunction())   

Q1 : Какое состояние я должен сохранить в CountFunction()? Нужно ли сохранять буферный элемент окна? Должен ли я использовать ListState для хранения буферизованных данных в окне и использовать ValueState для хранения текущего значения суммы?

Q2 : Как происходит обработка элементов в окне при возникновении ошибки? Что происходит при восстановлении окна?

Спасибо за помощь.

1 Ответ

0 голосов
/ 30 октября 2018

Все состояние, необходимое для оконных API-интерфейсов Flink, управляется Flink, поэтому вам не нужно ничего делать. Пока включена контрольная точка, буфер окна будет контрольной точкой и восстанавливаться по мере необходимости.

Обычно функция CountFunction не имеет состояния, которое необходимо проверить. Если задание не выполняется, пока CountFunction находится в середине перебора содержимого окна, задание будет перемотано, и CountFunction будет вызван снова с теми же входными данными.

Если вам нужно сохранить состояние в CountFunction, см. Использование состояния каждого окна в ProcessWindowFunction для получения информации о том, как это сделать. Похоже, вы захотите использовать globalState () (состояние, которое сохраняется в течение всего времени), к которому вы можете получить доступ через объект Context, переданный вашей оконной функции процесса.

Пока у вас нет потока с ключами, я предлагаю вам использовать механизм состояний с ключами, описанный выше. Вы можете преобразовать свой поток без ключа в поток с ключом, используя keyBy с постоянным ключом.

...