Java. Менторинг за чашкой кода

@channel_java_cup_code
Сегодня решил отойти от последовательного разбора Java и Spring, правда вечером планирую опубликовать пост по DevOps с перечнем основных инструментов, которые нужно знать Java разработчику. А сейчас хотел поделиться разышлениями, я дописываю 4-ю главу своей книги про Apache Flink и AI. В ней уже не столько про сам Flink, сколько про то, что с ним можно делать дальше: состояние, Feature Engineering, построение признаков для ML и вся эта история с данными в реальном времени. Доведу главу до нормального состояния — и уже хочу отправлять материал в издательство. Посмотрим, получится ли из этой затеи настоящая книга. А пока продолжаю разбираться с Flink уже не только в коде, но и в тексте. Событие произошло 10 минут назад. Flink только что его получил. Что теперь? Представим систему мониторинга транспорта. В 12:00:05 автомобиль проехал камеру: vehicle=421 speed=103 timestamp=12:00:05 Но сеть подвисла и Flink получил это событие только в: 12:10:07 Первое желание: Ну всё, событие старое. Выкидываем. И вот здесь можно очень сильно ошибиться, так как для Flink есть как минимум два разных времени: Event Time = когда событие произошло Processing Time = когда Flink его обработал В нашем случае: Event Time = 12:00:05 Processing Time = 12:10:07 Если считать всё по Processing Time, автомобиль внезапно «проехал камеру» в 12:10. Хотя на самом деле он был там десять минут назад, а теперь представим, что мы считаем признак: - количество превышений скорости за последние 30 секунд Одно неправильное решение о времени — и ML-модель получает совершенно другой Feature Vector. Поэтому во Flink есть механизм Watermark. Упрощённо его можно представить как сигнал: «Я считаю, что события раньше этого времени уже в основном пришли». Например: Watermark = 12:00:30 И тут внезапно приходит: Event Time = 12:00:05 Событие опоздало, но это ещё не означает, что его нужно выбросить. Flink может обработать его как late event — в зависимости от того, как мы спроектировали pipeline. И вот здесь потоковая обработка становится действительно интересной, так как мы уже не просто читаем сообщения из Kafka, а пытаемся восстановить смысл происходящего во времени, несмотря на задержки сети, разные скорости источников и неидеальный порядок событий.
Если у вас установлено приложение,
вы можете сразу перейти в канал