Требования довольно просты. У меня есть поступающие данные, которые состоят из следующего:
long id;
boolean success;
Type type; // enum used for grouping similar type of data
Type2 type2; // enum of another grouping for data
long totalIds; // Fixed number of ids in (type, type2) group
Например:
id: 1
success: false
Type: Red
Type2: Circle
totalIds: 100 // I have a total of 100 unique ids for (Red, Circle)
Мне нужно вычислять статистику скользящего окна размером 30 минут каждую 1 минуту. Таким образом, каждые 30 минут я должен быть в состоянии сказать, сколько уникальных идентификаторов прошло, и показатель успешности для каждой группировки
(Type, Type2)
Еще одно предостережение заключается в том, что если я получуУ меня уже есть точка данных и идентификатор, мне нужно обновить статистику, если значение success
отличается.
Я просматривал функцию SlindingWindow
с кодом, похожим на этот:
input
.keyBy(new KeyByTypeType2()) // Key it by (Type, Type2)
.window(SlidingProcessingTimeWindows.of(Time.hours(30), Time.minutes(1)))
.aggregate(new AggregateFunction());
Здесь функция AggregateFunction содержит Map
, в которой хранятся входящие данные, чтобы мы могли проверить, были ли какие-либо новые входящие данные ранее получены, и если да, то является ли значение success
разные или нет. Если все по-другому, нам придется соответственно обновить totalSuccess
и totalFailure
.
Проблема здесь в том, что у меня большое противодавление, и поэтому он не может обработать его в реальном времени. ,Должен ли я использовать что-то еще или я что-то здесь упускаю в отношении функции SlidingWindow
?