У меня нет опыта ни с Flink
, ни с Spark
, и я хотел бы использовать один из них для своего варианта использования. Я хотел бы представить свой вариант использования и, надеюсь, получить некоторое представление о том, можно ли это сделать с одним из них, и если они оба могут это сделать, какой из них будет работать лучше всего.
У меня есть куча сущностей A
, хранящихся в хранилище данных (точнее, в Mongo, но на самом деле это не имеет значения). У меня есть Java-приложение, которое может загружать эти объекты и выполнять некоторую логику для них, чтобы сгенерировать поток некоторого типа данных E
(чтобы быть на 100% ясным, у меня нет Es
ни в одном наборе данных, Мне нужно сгенерировать их на Java после того, как я загружу As
из БД)
Так что у меня есть что-то вроде этого
A1 -> Stream<E>
A2 -> Stream<E>
...
An -> Stream<E>
Тип данных E
немного похож на длинную строку в Excel, он состоит из множества столбцов. Мне нужно собрать все Es
и запустить сводную агрегацию, как вы делаете в Excel. Я вижу, как легко это сделать в Spark
или Flink
.
Теперь это часть, которую я не могу понять.
Представьте, что один из объектов A1
изменен (пользователем или процессом), это означает, что все Es
для A1
нуждаются в обновлении. Конечно, я мог бы перезагрузить все свои As
, пересчитать все Es
, а затем заново запустить всю агрегацию. Мне интересно, можно ли здесь быть немного умнее.
Можно ли только пересчитать Es
для A1
и выполнить минимальный объем обработки.
Можно ли для Spark
сохранить RDD
и обновлять только его часть при необходимости (здесь это будет Es
для A1
)?
Для Flink
, в случае потоковой передачи, возможно ли обновить точки данных, которые уже были обработаны? Справится ли он с таким случаем? Или, возможно, я могу сгенерировать отрицательные события для старого Es
пользователя A1
(т. е. удалить их из результата), а затем добавить новые?
Это обычный вариант использования? Это вообще то, для чего предназначены Flink
или Spark
? Я бы так подумал, но опять же, я не использовал ни того, ни другого, поэтому мое понимание очень ограничено.