Время моделирования сложных событий, генерируемых из простых - PullRequest
0 голосов
/ 19 апреля 2020

Мое приложение flink генерирует выходные (сложные) события на основе обработки (простых) входных событий. Сгенерированные выходные события должны использоваться другими внешними службами. Мое приложение работает с использованием семантики времени события, поэтому я немного сомневаюсь относительно того, что я должен использовать в качестве метки времени выходных событий.

Должен ли я использовать:

  • время обработки в момент их генерации?
  • время события (определяется значением водяного знака)?
  • оба? (*)

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

(*) В случае использования обоих, какое наименование вы бы использовали для двух полей? Кажется, что-то вроде event_time и processing_time передает подробности реализации моего приложения во внешние службы ...

1 Ответ

1 голос
/ 21 апреля 2020

Нет общего ответа на ваш вопрос. Это часто зависит от последующих требований. Давайте рассмотрим два простых случая:

  • Типичный конвейер обработки данных принимает какое-либо событие движения (например, данные датчика, щелчок на веб-странице, запрос на поиск) и обогащает его основными данными (например, , данные калибровки датчика, профили пользователей, географическая информация c через соединения. Тогда результирующее событие должно явно иметь то же время, что и входное событие.
  • Второй конвейер агрегирует события из первого конвейера в 15-минутном падающем окне и просто считает его. Тогда справедливыми вариантами будет использование начала окна или времени первого события, конца окна или времени последнего события или обеих этих данных. Использование начала / конца окна будет означать, что у нас есть результирующий сигнал, который всегда определяется. Использование метки времени первого / последнего события более точно, когда вы действительно хотите видеть в агрегатах, когда что-то происходит. Обычно это также означает, что вы, вероятно, хотите получить более точное разрешение окна (1 мин вместо 15 мин). Независимо от того, используете ли вы начало или конец окна, чаще всего дело вкуса, и обычно безопаснее включать оба.

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

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

...