Скользящее окно времени обработки вычисляет противоречивые результаты

Во Flink я читаю файл, используя readTextFile и применяю SlidingProcessingTimeWindows.of(Time.milliseconds(60), Time.milliseconds(60)) 60 мсек со слайдом 60 мсек на нем. В оконном потоке я вычисляю среднее значение второго поля кортежа. Мой текстовый файл содержит 1100 строк, и каждая строка является кортежем (String, Integer). Я установил параллелизм на 1 и ввел сообщения в первое поле кортежа.

Когда я запускаю код, каждый раз получаю разные ответы. Я имею в виду, что это похоже на то, что иногда он читает весь файл, а иногда он читает сначала несколько строк файла. Имеет ли это какое-то отношение к размеру окна скользящей суммы? Как можно выяснить это соотношение, чтобы я мог определить размер и скользящую величину окна?


person kadsank    schedule 14.12.2016    source источник
comment
Вы не можете ожидать стабильных, повторяемых результатов, работая со временем обработки. В вашем случае это просто вопрос того, какая часть файла может быть обработана за 60 мсек, и это будет зависеть от загрузки системы и т. Д. Иногда он может обработать весь файл, а иногда нет; это нормально. Взгляните на data-artisans.com / для получения дополнительной информации.   -  person David Anderson    schedule 15.12.2016


Ответы (1)


Ответ в комментарии AlpineGizmo правильный. Я добавлю сюда еще несколько деталей.

Flink выравнивает временные окна по началу эпохи (1970-01-01-00:00:00). Это означает, что оконный оператор с 1-часовым окном запускает новое окно с каждым новым часом (т.е. в 00:00, 01:00, 02:00, ...), а не с первой поступающей записи.

Временные окна обработки оцениваются на основе текущего времени системы. Как сказано в комментарии выше, это означает, что объем данных, которые могут быть обработаны, зависит от ресурсов обработки (оборудования, загрузки ЦП / ввода-вывода и т. Д.) Машины, на которой работает оператор. Следовательно, временное окно обработки не может дать надежных и последовательных результатов.

В вашем случае оба описанных эффекта могут привести к несовместимым результатам для разных работ. В зависимости от того, когда вы запускаете задание, данные будут назначены разным окнам (если первая запись поступит непосредственно перед закрытием первых 60 мсек, в окне будет только этот элемент). В зависимости от нагрузки ввода-вывода машины для доступа и чтения файла может потребоваться больше или меньше времени.

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

person Fabian Hueske    schedule 19.12.2016