Статьи

Глубокое погружение в акробатическое окно Apache Flink — часть 1

В этой статье я поделюсь примерами кодирования некоторых ключевых аспектов TumblingWindow во Flink. Те, кто не знаком с потоковой передачей Flink, могут получить представление здесь. 

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

В большинстве случаев для получения значимой информации предпочтительны два метода.

  • Вычисление выполняется для конечного набора времени (например, ошибки HTTP 401 в минуту)
  • Вычисления выполняются в виде непрерывного обновления (например, табло, актуальные темы)

«Окно» определяет конечный набор элементов в неограниченном потоке, к которому мы можем применять вычисления. Этот набор может основываться на времени, количестве элементов, комбинации счетчиков и времени или некоторой пользовательской логике для назначения элементов окнам.

  • количество заказов, полученных каждую минуту (фиксированное время)
  • среднее время выполнения последних 100 заказов (фиксированные элементы)

Поставщики потоковой инфраструктуры реализуют более одного варианта определения «окна». У Flink есть три типа   (a) Tumbling (b) Sliding и (c) Session window, из которого я остановлюсь на первом в этой статье.

Вам также может понравиться: потоковый ETL с Apache Flink

TumblingWindow

Это окно простое для понимания и с которым легко начать. Это окно фиксированного размера, где «размер» — это либо время (30 секунд, 5 минут), либо просто счет (100 элементов).

Временное  окно в 5 минут будет собирать все элементы, поступившие в окно, и оценивать его через пять минут. Новое окно будет запускаться каждые пять минут. Окно подсчета 100 будет собирать 100 элементов в окне и оценивать окно, когда 100-й элемент был добавлен.

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

Давайте посмотрим на пример, чтобы понять их лучше. Простой IntegerGeneratorкласс » » действует как источник, производящий целое число каждую секунду (начиная с 1). Следующие строки инициализируют локальную среду Flink и создают объект DataStream.


Джава