Расчет движущейся статистики в Apache Flink - PullRequest
0 голосов
/ 08 октября 2019

Требования довольно просты. У меня есть поступающие данные, которые состоят из следующего:

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?

...