Окна сессий могут быть несколько похожи, однако окна сессий не имеют фиксированного размера.Границы окна определяются параметром «пробел».Если взять пример для документов Amazon, первые два события (назовем их A и B) с интервалом 10 секунд, второе и третье (C) 35 секунд, а третье и четвертое (D) 10 секунд.Если вы укажете промежуток в 10 секунд, вы получите два окна A, B и C, D, которые отличаются от поворотов и отличаются от окон с колебаниями.Если вы укажете промежуток, равный 35 секундам, вы получите одно окно со всеми 4 событиями.
В зависимости от вашего варианта использования, оно все еще может работать с использованием окон сеанса.
Что мы 'однако мы заметили, что окна сеанса все еще могут быть «обновлены», если позднее событие приходит, даже если этот сеанс в противном случае считался бы «истекшим / испущенным»,
Да, это необходимо для обработкиправильная записьЯ не уверен, какова поддержка события-времени в Kinesis - кажется, что их падающие окна совпадают с ROWTIME (это время настенных часов?).Однако, используя suppress()
, вы можете получить ровно один результат за сеанс (компенсируя некоторую задержку обработки).Посмотрите этот пост в блоге для получения более подробной информации: https://www.confluent.io/blog/kafka-streams-take-on-watermarks-and-triggers
, а также о том, что сеансы могут не создаваться до тех пор, пока не будут записаны будущие события «потокового времени»?
Это верно,Но это произойдет только в том случае, если новые данные вообще не поступят, что не должно быть в случае приложения обработки потока с непрерывным потоком данных.
Что вы также можете сделать, чтобы реализовать желаемую логикусамостоятельно, используя transform()
с хранилищем в оконном состоянии.Используя настенные знаки времени на часах, вы также можете убедиться, что данные отправляются, даже если не поступают новые входные данные.Наиболее сложной частью будет обработка записей, вышедших из строя в этом случае.