Несколько моментов:
keyBy не является оператором и не имеет состояния. keyBy - это просто объявление того, как поток должен быть перераспределен. Перевертывающееся окно, которое следует за keyBy, имеет состояние, которое очищается после завершения работы окна. Вы можете увидеть, какое состояние имеет каждая подзадача, если посмотреть на разбивку в части статистики контрольных точек веб-интерфейса.
Вот пример:
Что произойдет в сценарии, в котором количество отдельных клиентов за любые 5 минут увеличивается 5-10 раз. Будет ли это создавать перекос данных? Поскольку 1-2 подзадачи в моей работе всегда занимают около 1-2 минут по сравнению с другими 800 подзадачами, которые выполняются за 10–15 секунд.
Возможно, у вас есть одна или несколько клиенты с гораздо большим количеством событий, чем остальные?
Было бы интересно понять, почему вы выполняете основанную на событии настройку времени, за которой следует время обработки windows, а не время события windows. (Я предполагаю, что вы используете время обработки windows, поправьте меня, если я ошибаюсь.)
Есть ли у вас какие-либо идеи о том, сколько разных таймфреймов одновременно активны? Например, окно для 12: 00-12: 05 будет принимать много событий с отметками времени в диапазоне 12: 00-12: 05, а также некоторые события в 11: 55-12: 00, которые не поступили к 12:00. , И возможно события для более ранних таймфреймов, если такая большая задержка возможна. Трудно думать о перекосе клавиш, не понимая, как выглядит активное пространство клавиш.