0

Je n'ai aucune expérience avec Flink ou Spark, et j'aimerais utiliser l'une d'entre elles pour mon cas d'utilisation. J'aimerais présenter mon cas d'utilisation et, espérons-le, avoir une idée de ce qui peut être fait avec l'un ou l'autre, et s'ils peuvent tous les deux le faire, lequel fonctionnerait le mieux.Flink ou Spark pour les données incrémentales

J'ai un tas d'entités A stockées dans un magasin de données (Mongo pour être précis mais cela n'a pas vraiment d'importance). J'ai une application Java qui peut charger ces entités et exécuter une logique sur eux pour générer un flux de certains type de données E (pour être 100% clair, je n'ai pas le Es dans un ensemble de données, j'ai besoin de les générer en Java après que je charge le As de la DB)

J'ai donc quelque chose comme ça

A1 -> Stream<E> 
A2 -> Stream<E> 
... 
An -> Stream<E> 

le type de données E est un peu comme une longue ligne dans Excel, il a un tas de colonnes. Je dois rassembler tous les Es et exécuter une sorte d'agrégation de pivot comme vous le feriez dans Excel. Je peux voir comment je pourrais le faire facilement dans Spark ou Flink.

Maintenant, c'est la partie que je ne peux pas comprendre.

Imaginez que l'un de l'entité A1 est modifiée (par un utilisateur ou un processus), cela signifie que tous les Es pour la mise à jour A1 besoin. Bien sûr, je pourrais recharger tous mes As, recalculer tous les Es, puis réexécuter l'ensemble de l'agrégation. Je me demande s'il est possible d'être un peu plus intelligent ici.

Serait-il possible de recalculer seulement le Es pour A1 et de faire le minimum de traitement.

Pour Spark serait-il possible de conserver l'RDD et seulement mettre à jour une partie de celui-ci en cas de besoin (ici qui serait le Es pour A1)?

Pour Flink, dans le cas du streaming, est-il possible de mettre à jour des points de données déjà traités? Peut-il gérer ce genre de cas? Ou pourrais-je générer négatifs événements A1 vieux Es (c'est-à-dire qui les supprimer du résultat), puis ajouter les nouveaux?

Est-ce un cas d'utilisation courant? Est-ce que c'est quelque chose que Flink ou Spark sont conçus pour faire? Je le pense mais encore je n'ai pas utilisé non plus alors ma compréhension est très limitée.

Répondre

0

Je pense que votre question est très large et dépend de nombreuses conditions. En flink vous pouvez avoir un MapState<A, E> et seulement mettre à jour les valeurs pour le A's modifié puis, en fonction de votre cas d'utilisation, soit générer le E's mis à jour en aval ou générer la différence (flux de rétraction).

En Flink il existe le concept de dynamique Tableaux et ruisseaux Rétractation qui peuvent vous inspirer, ou un événement peut-être l'API de table couvre déjà votre cas d'utilisation.Vous pouvez consulter les documents here

+0

J'ai gardé la question large essayant de saisir l'essence du problème. Vous dites que la réponse dépend de nombreuses conditions. Quels aspects de la question voudriez-vous que je développe? – phoenix7360