Quelle est/sont la principale différence(s) entre Flink et de la Tempête?

Flink a été comparé à Spark , qui, comme je le vois, est la mauvaise comparaison parce qu'il compare un système de traitement d'événement fenêtré contre micro-batching; de même, il ne fait pas beaucoup de sens pour moi de comparer Flink à Samza. Dans les deux cas, il compare une stratégie de traitement d'événements en temps réel par rapport à une stratégie de traitement d'événements en lots, même à une plus petite "échelle" dans le cas de Samza. Mais je voudrais savoir comment Flink se compare à tempête, qui semble conceptuellement beaucoup plus semblable à elle.

j'ai trouvé ce (diapositive #4) documentant la différence principale comme" latence réglable " pour Flink. Un autre indice semble être un article de Slicon Angle qui suggèrent que Flink s'intègre mieux dans une étincelle ou un monde HadoopMR, mais aucun détail réel ne sont mentionnés ou référencés. Enfin, Fabian Hueske lui-même note dans une interview que "par rapport à Apache Storm, l'analyse de flux la fonctionnalité de Flink offre une API de haut niveau et utilise une stratégie de tolérance de défauts plus légère pour fournir des garanties de traitement exactement une fois."

tout cela est un peu clairsemé pour moi et je ne comprends pas tout à fait le point. Quelqu'un peut m'expliquer ce problème?) avec traitement de flux en Tempête est (sont? exactement résolu par Flink? Qu'est-ce que Hueske fait référence aux problèmes de L'API et à leur "stratégie de tolérance aux défauts plus légère"?

100
demandé sur Fabian Hueske 2015-06-08 01:29:39

2 réponses

avertissement: je suis un membre D'Apache Flink committer et PMC et je ne suis familier qu'avec le design de Storm, pas avec ses intérieurs.

Apache Flink est un framework pour le traitement de flux et de lots unifiés. Flink's runtime supporte nativement les deux domaines en raison de transferts de données pipelined entre des tâches parallèles qui comprend des boutons de manchette pipelined. 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 un tampon pour le réseau transfert.) 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 en flux. L'API batch de Flink semble assez similaire et traite des cas d'utilisation similaires comme Spark mais diffère dans les internes. Pour la diffusion en continu, les deux systèmes suivent des approches très différentes (mini-lots par rapport à la diffusion en continu), ce qui les rend adaptés à différents types d'applications. Je dirais que comparer Spark et Flink est valable 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é de traitement par lots. En fait, le moteur pipelé interne de Flink ressemble 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 transfert de données par pipelinette. Cependant, Flink offre une API de haut niveau comparé à la tempête. 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 de traitement sémantique. Storm garantit un traitement au moins une fois alors que Flink fournit exactement-une fois. Les implémentations qui donnent ces garanties de traitement sont assez différentes. Alors Que La Tempête Flink utilise une variante de L'algorithme de 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 contrôle 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 engagés. En cas de panne, tous les opérateurs sources sont réinitialisés à leur état lorsqu'ils ont vu le dernier marqueur engagé et le traitement est continuer. Cette approche marqueur-point de contrôle est plus légère que les accusés de réception record de Storm. Ce diaporama et le diaporama " talk traitent de L'approche de traitement en continu de Flink, y compris la tolérance à la défaillance, le pointage et la manipulation de l'état.

Storm offre également une API de haut niveau appelée Trident. Cependant, Trident est basé sur des mini-lots et donc plus proche de Spark que Flink.

Flink est réglable de latence se réfère à la façon dont Flink envoie des enregistrements à partir d'une tâche à l'autre. J'ai dit avant, que Flink utilise des transferts de données pipelined et transmet des enregistrements dès qu'ils sont produits. Pour des raisons d'efficacité, ces enregistrements sont collectés dans un tampon qui est envoyé sur le réseau une fois qu'il est plein ou un certain seuil de temps est atteint. Ce seuil contrôle la latence des enregistrements car il spécifie la durée maximale de séjour d'un enregistrement dans un tampon sans d'être envoyé à la tâche suivante. Cependant, il ne peut pas être utilisé pour donner des garanties tangibles sur le temps qu'il faut pour un enregistrement de l'entrée à la sortie d'un programme parce que cela dépend également du temps de traitement dans les tâches et le nombre de transferts de réseau entre autres choses.

150
répondu Fabian Hueske 2018-09-11 03:10:25

ajoutant à la réponse de Fabian Hueske:

Flink améliore en outre sur la tempête aussi de la manière suivante:

  • contre-pression: la durée d'exécution en continu de Flink se comporte bien lorsque différents opérateurs fonctionnent à des vitesses différentes, parce que les opérateurs en aval font très bien contre-pression aux opérateurs en amont, bien que la couche réseau gère des zones tampons.

  • état défini par L'utilisateur: Flink permet aux programmes de maintenir l'état personnalisé dans vos opérateurs. Cet état peut en fait participer au checkpointing pour la tolérance de faute, en fournissant exactement-une fois des garanties pour l'état personnalisé défini par l'utilisateur. Voir cet exemple d'une machine d'état définie par l'utilisateur à l'intérieur d'un opérateur, qui est constamment vérifiée en même temps que le flux de données.

  • fenêtres de diffusion en continu: le fenêtrage de flux et les agrégations de fenêtres sont un élément crucial bloc de construction pour l'analyse des flux de données. Flink est livré avec un système de fenêtrage assez puissant qui soutient de nombreux types de fenêtres.

37
répondu Stephan Ewen 2015-06-23 10:15:40