Kafka Streams: обработка устаревания событий в потоке по истечении срока действия окна

В настоящее время я использую потоки kafka для сопоставления связанных событий в окне. В случае, если все связанные события не поступают в окно, есть ли способ в потоках Kafka, где мы получаем дескриптор событий, срок действия которых истек. Это поможет в обработке / уведомлении нижестоящего приложения о том, что все связанные события не прибыли для сопоставления. Оцените ваш ответ.
Ниже приведены примеры
Пример-1:
- GroupID: g1
- Прибытие событий: E1,10am; E2 10:01 и E3 10:02
- Окно: Окно сеанса бездействия длительностью 5 минут.
- Результат: Все события успешно сопоставлены.

Пример-2:
- Прибытие событий: E1,10am; E2 10:01 и E3 не приходят
- Окно: Окно сеанса бездействия длительностью 5 минут.
- Результат: запустить действие ИЛИ получить уведомление через прослушиватель для частичного сопоставления по истечении окна для E1 и E2 в 10:06 утра


person vinay    schedule 31.03.2017    source источник
comment
Вопрос немного непонятный. Вы спрашиваете, есть ли способ в потоках Kafka, где мы получаем дескриптор событий, срок действия которых истек?   -  person Nathan    schedule 31.03.2017
comment
Да, есть способ получить дескриптор событий onExpiration окна.   -  person vinay    schedule 31.03.2017


Ответы (2)


Окна в Kafka Streams «не устаревают», но остаются открытыми, чтобы можно было обрабатывать поздно поступающие данные.

Сравните Как отправить окончательный результат агрегации кафка-потоков из KTable с временным окном?

Невозможно зарегистрировать обратный звонок,

  • не в том случае, если «время потока» продвигается вперед и прошло «время окончания окна»
  • не в том случае, если окно окончательно упало (т. е. после того, как период хранения действительно прошел)
person Matthias J. Sax    schedule 31.03.2017
comment
Спасибо Мэтту за ответ. Есть ли альтернативный способ через библиотеку потоковой передачи Kafka или через интерактивные запросы, где мы идентифицируем события, когда: а) когда окно опускается б) когда время окна истекло. - person vinay; 07.04.2017
comment
Вы можете использовать фиктивный transformValues, который просто пересылает входящие данные и регистрирует график пунктуации - пунктуация основана на внутреннем отслеживании времени потока, и, таким образом, вы можете выяснить, прошло ли время за пределами времени окончания окна - и если вы поместите время хранения в вы также можете выяснить, когда окна будут окончательно выброшены. Таким образом, вы можете косвенно получить доступ к текущему содержимому окна через IQ, как это, но это довольно хакерский метод и не на 100% точный. - person Matthias J. Sax; 07.04.2017
comment
@mat Окна в Kafka Streams действительно истекают, когда истекает срок действия окна / определяется до тех пор, пока не пройдет период, и хранилище состояний в конечном итоге отбросит окно. Таким образом, представление о том, что срок действия окон не истек, является ошибочным. Из всех вопросов SO и тем на форумах, которые спрашивают об этом, мне становится ясно, что это недосмотр и недостающая функция. Данные не живут вечно в хранилище сеансов, и мы хотели бы знать, каково было значение, когда оно истекло. - person akizl; 18.10.2017
comment
Я заключил "не истекает" в кавычки - я хотел сказать, что в отличие от других систем, использующих триггеры, Kafka Streams использует другую модель. Вы, конечно, правы, что невозможно поддерживать окна вечно и что мы применяем время хранения. Таким образом, с моей точки зрения, опускание окна - это не первоклассный гражданин, и поэтому API не раскрывается. О том, как узнать значение: вы сразу получаете последнее обновление, таким образом, вы знаете значение окон с истекшим сроком действия. Перезвона просто нет. Кроме того, вы можете сделать вывод, если срок действия окна истек, основываясь на прогрессе ... - person Matthias J. Sax; 18.10.2017
comment
о ходе рассмотрения ваших заявок. Истечение срока действия окна основано на времени события, и, таким образом, вы можете оценить, когда истекает срок действия окна, на основе метки времени записи, к которой вы можете получить доступ в своем приложении. Конечно, Apache Kafka - это проект с открытым исходным кодом, и идея новых функций очень приветствуется. kafka.apache.org/contact и issues.apache.org/jira/projects/KAFKA - person Matthias J. Sax; 18.10.2017

Не пробовал, но похоже, что окончательные результаты окна могут сделать это https://kafka.apache.org/24/documentation/streams/developer-guide/dsl-api.html#window-final-results

Идея состоит в том, чтобы проверить, все ли события прибыли, когда окно закрывается, и инициировать какое-либо действие, если это не так.

person Peter Dotchev    schedule 27.01.2020