Мне нужно разработать PoC приложения, которое динамически идентифицирует и отслеживает положение движущихся целей.
Приложение получает в качестве входных данных поток:
- различных событий E
- событие новой позиции: текущая позиция [широта, долгота]
- параметр TransmissionCode изменен: код изменен на «Код»-1234 "
- ...
- , генерируемых движущимися целями, например
ПРИМЕЧАНИЕ: коды передачи могут меняться со временем (раз в неделю)
Исходные события ненести информацию о том, какая цель сгенерирована, какое событие , поэтому мне нужно (попытаться) однозначно идентифицировать цели на основе подмножества атрибутов события, что-то вроде:
targetID = function (transmissionCode, timestamp,position [, ...])
При непрерывной обработке потока приложение должно автоматическисоздать и обновить список идентифицированных целей, указав последнюю известную позицию и информацию о цели (например, последний известный код передачи).
Для этого я читал документацию Apache Flink, но немногозапутался в том, как правильно реализовать этот сценарий использования.
Я новичок Флинк, и после всего прочтения я думаю, что мне следует сделать:
- обработать без ключа входной поток по времени события (параллелизм = 1?)
- попытаться определить цель, посмотрев на некоторые атрибуты события (функция карты, которая обогащает событие с помощью targetID?)
- сгенерировать новый targetID со связанной информацией о событии или обновить существующий в списке (сопоставить с состоянием?)
Сомнения:
- ИДЕНТИФИКАЦИЯ ЦЕЛИ- правильно ли (в контексте Флинка) думать о фазе идентификации цели как о функции карты, которая генерирует в качестве вывода другой поток с добавлением targetID на каждом событии?
- CURRENT STATE - если 1. верно, какой механизм Флинка является лучшим для сохранения текущего состояния списка целей с последней информацией?Нужно ли использовать пользовательский POJO в качестве состояния оператора и хранить там весь список?(цели могут быть не более 200 000)
- ПАРАЛЛЕЛИЗАЦИЯ - можно ли каким-либо образом распараллелить этап идентификации цели или он должен быть последовательным?
В конце мне нужно обработатьпоток и генерирует список движущихся целей с самой последней известной информацией.
Я надеюсь, что кто-то с большим опытом в области Flink мог бы дать мне несколько советов и привести меня на правильный путь.
Заранее спасибо