Clause de non - responsabilité : Je suis un committer Apache Flink et un membre PMC et je ne connais que la conception de haut niveau de Storm, pas ses composants internes.
Apache Flink est un framework pour le traitement unifié des flux et des lots. Le runtime de Flink prend en charge nativement les deux domaines en raison des transferts de données en pipeline entre des tâches parallèles qui incluent des brassages en pipeline. Les enregistrements sont immédiatement expédiés de la production des tâches à la réception des tâches (après avoir été collectés dans une mémoire tampon pour le transfert réseau). Les travaux par lots peuvent être exécutés en option en bloquant les transferts de données.
Apache Spark est un framework qui prend également en charge le traitement par lots et par flux. L'API par lots de Flink est assez similaire et répond à des cas d'utilisation similaires à Spark, mais diffère dans les composants internes. Pour le streaming, les deux systèmes suivent des approches très différentes (mini-lots vs streaming), ce qui les rend adaptés à différents types d'applications. Je dirais que comparer Spark et Flink est valide et utile, cependant, Spark n'est pas le moteur de traitement de flux le plus similaire à Flink.
Pour en venir à la question initiale, Apache Storm est un processeur de flux de données sans capacités de traitement par lots. En fait, le moteur en pipeline de Flink ressemble en interne un peu à Storm, c'est-à-dire que les interfaces des tâches parallèles de Flink sont similaires aux boulons de Storm. Storm et Flink ont en commun de viser un traitement de flux à faible latence par des transferts de données en pipeline. Cependant, Flink propose une API de plus haut niveau par rapport à Storm. Au lieu d'implémenter la fonctionnalité d'un boulon avec un ou plusieurs lecteurs et collecteurs, l'API DataStream de Flink fournit des fonctions telles que Map, GroupBy, Window et Join. Une grande partie de cette fonctionnalité doit être implémentée manuellement lors de l'utilisation de Storm. Une autre différence concerne le traitement de la sémantique. Storm garantit un traitement au moins une fois tandis que Flink fournit exactement une fois. Les implémentations qui donnent ces garanties de traitement diffèrent un peu. Alors que Storm utilise des accusés de réception au niveau de l'enregistrement, Flink utilise une variante de l'algorithme Chandy-Lamport. En un mot, les sources de données injectent périodiquement des marqueurs dans le flux de données. Chaque fois qu'un opérateur reçoit un tel marqueur, il vérifie son état interne. Lorsqu'un marqueur a été reçu par tous les puits de données, le marqueur (et tous les enregistrements qui ont été traités auparavant) sont validés. En cas d'échec, tous les opérateurs sources sont remis à leur état lorsqu'ils ont vu le dernier marqueur validé et le traitement se poursuit. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception au niveau de l'enregistrement de Storm. Ce les sources de données injectent périodiquement des marqueurs dans le flux de données. Chaque fois qu'un opérateur reçoit un tel marqueur, il vérifie son état interne. Lorsqu'un marqueur a été reçu par tous les puits de données, le marqueur (et tous les enregistrements qui ont été traités auparavant) sont validés. En cas d'échec, tous les opérateurs sources sont remis à leur état lorsqu'ils ont vu le dernier marqueur validé et le traitement se poursuit. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception au niveau de l'enregistrement de Storm. Ce les sources de données injectent périodiquement des marqueurs dans le flux de données. Chaque fois qu'un opérateur reçoit un tel marqueur, il vérifie son état interne. Lorsqu'un marqueur a été reçu par tous les puits de données, le marqueur (et tous les enregistrements qui ont été traités auparavant) sont validés. En cas d'échec, tous les opérateurs sources sont remis à leur état lorsqu'ils ont vu le dernier marqueur validé et le traitement se poursuit. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception au niveau de l'enregistrement de Storm. Ce tous les opérateurs de sources sont réinitialisés à leur état lorsqu'ils ont vu le dernier marqueur validé et le traitement se poursuit. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception au niveau de l'enregistrement de Storm. Ce tous les opérateurs de sources sont réinitialisés à leur état lorsqu'ils ont vu le dernier marqueur validé et le traitement se poursuit. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception au niveau de l'enregistrement de Storm. Cejeu de diapositives et correspondant talk discuter de l' approche de traitement en continu de Flink , y compris la tolérance aux pannes, checkpointing et la manipulation de l' État.
Storm propose également une API de haut niveau exactement unique appelée Trident. Cependant, Trident est basé sur des mini-lots et donc plus similaire à Spark qu'à Flink.
La latence réglable de Flink fait référence à la façon dont Flink envoie les enregistrements d'une tâche à l'autre. J'ai déjà dit que Flink utilise des transferts de données en pipeline et transmet les enregistrements dès qu'ils sont produits. Par souci d'efficacité, ces enregistrements sont collectés dans un tampon qui est envoyé sur le réseau une fois qu'il est plein ou qu'un certain seuil de temps est atteint. Ce seuil contrôle la latence des enregistrements car il spécifie la durée maximale pendant laquelle un enregistrement restera dans une mémoire tampon sans être envoyé à la tâche suivante. Cependant, il ne peut pas être utilisé pour donner des garanties concrètes sur le temps qu'il faut à un enregistrement entre l'entrée et la sortie d'un programme, car cela dépend également du temps de traitement au sein des tâches et du nombre de transferts réseau, entre autres.