Flink - Как реализовать пользовательское окно сеанса, которое создает окно для определенного события и запускается после некоторого времени сеанса? - PullRequest
1 голос
/ 01 апреля 2019

Мой поток ввода

type=1, time=10, start=123, other params
type=2, time=11, start=123, other params
type=2, time=12, start=123, other params
type=1, time=13, start=235, other params
type=2, time=14, start=123, other params
type=2, time=15, start=235, other params
type=2, time=16, start=235, other params
type=1, time=17, start=456, other params
...

Я хочу создать окно, начинающееся с события type = 1.После этого у меня непрерывно происходит событие type = 2 до тех пор, пока ключ start = 123 не остановится.

Событие Type = 1 аналогично событию start, событие type = 2 аналогично событию ping, чтобы показать, что производитель все ещев живых.У меня есть их в 2 отдельных темах.

У меня есть идея о создании настраиваемого окна сеанса, которое запускается, когда происходит событие type = 1, это окно открыто, пока не пройдет более 3 минут с последнего типа = 2event.

stream
  .keyBy(start)
  .window(CustomWindow())
  .trigger(CustomTrigger())
  ...

Однако я не знаю, как создать собственное окно, которое запускается только при получении типа события = 1.Я читал о Trigger, и речь идет о том, когда должна запускаться оконная функция, а не когда создавать окно.

Ожидаемый результат:

type=event-end, start=123, duration=3 (because there are 3 type=2 log for 123)
-> this fires at time=17 because last ping event is at time=14, there is a gap of 3.
type=event-end, start=235, duration=2 (because there are 3 type=2 log for 123)
-> this fires at time=19 because last ping event is at time=16, there is a gap of 3 and if there is no more ping after time=16.

Как реализовать это пользовательское окно во Flink?

1 Ответ

1 голос
/ 01 апреля 2019

Я считаю, WindowAssigner.java - это то, что вы хотите.Определите свою собственную логику назначения и запуска окна.

...