У меня есть поток записей, которые «привязаны» к двум полям, а затем назначается окно сеанса с перерывом в 30 секунд. Я использую «отметку времени», прикрепленную к записям, как время события. Я использую водяной знак assignAscendingTimestamps.
Рассмотрим, например, следующие записи. В потоке используется ключ (пользователь, место).
Запись1: пользователь1, место1, отметка времени t1
Запись2: пользователь2, место1, отметка времени через 30 секунд после t1
Record3: user1, place1, timestamp в пределах 30 секунд после t1
Record4: user1, place1, отметка времени через 30 секунд после t1
Record2 принадлежит пользователю user2 и, следовательно, принадлежит другому сегменту, так как поток имеет ключ. Следовательно, я ожидал, что Record1, Record3 и Record4 принадлежат одному ведру, а Record2 - другому ведру.
Bucket1
Запись1: пользователь1, место1, отметка времени t1
Record3: user1, place1, timestamp в пределах 30 секунд после t1
Record4 - user1, place1, отметка времени через 30 секунд после t1
Bucket2
Запись2: пользователь2, место1, отметка времени через 30 секунд после t1
Насколько я понимаю, окно сеанса, содержащее Record1 и Record3, будет запускаться только по прибытии Record4. Но когда я запускаю код, сеанс, содержащий только Record1, запускается, когда приходит Record2, поскольку временная метка Record2 находится после временного интервала (30 секунд) временной метки Record1, хотя ключ Record2 отличается. Я просмотрел документацию Flink и несколько примеров, которые я смог найти в Интернете для Session Windows. Но я не могу решить эту проблему. Что-то мне здесь не хватает? Может быть, это из-за водяного знака возрастающих отметок времени?