Lorsque nous parlons de comparaison, nous avons généralement tendance à demander : Montrez-moi les chiffres 🙂
Le benchmarking est une bonne façon de comparer seulement quand il a été fait par des tiers.
Par exemple, l’un des anciens bench marking était le suivant . Mais c’était à des moments avant Spark Streaming 2.0 quand il avait des limitations avec RDDs et le projet tungsten n’était pas en place. Maintenant avec Structured Streaming post 2.0 release , Spark Streaming essaie de rattraper beaucoup et il semble qu’il va y avoir une lutte difficile à venir.
Récemment le benchmarking est en quelque sorte devenu un combat de chat ouvert entre Spark et Flink.
Spark avait récemment fait une comparaison de benchmarking avec Flink à laquelle les développeurs de Flink ont répondu avec un autre benchmarking après quoi les gars de Spark ont édité le post.
Il est préférable de ne pas croire le benchmarking de nos jours parce que même un petit tweaking peut complètement changer les chiffres. Rien n’est mieux que d’essayer et de tester nous-mêmes avant de décider. Aujourd’hui, il est tout à fait évident que Flink est en tête de l’espace Streaming Analytics, avec la plupart des aspects souhaités comme exactement une fois, le débit, la latence, la gestion des états, la tolérance aux pannes, les fonctionnalités avancées, etc.
Ces-ci ont été possibles grâce à certaines des véritables innovations de Flink comme les snapshots légers et la gestion de la mémoire personnalisée hors tas. Une préoccupation importante avec Flink était la maturité et le niveau d’adoption jusqu’à un certain temps en arrière, mais maintenant des entreprises comme Uber, Alibaba, CapitalOne utilisent le streaming Flink à une échelle massive certifiant le potentiel du Streaming Flink.
Récemment, Uber a open sourcé leur dernier cadre d’analyse Streaming appelé AthenaX qui est construit au-dessus du moteur Flink. Dans ce post, ils ont discuté de la façon dont ils ont déplacé leurs analyses de streaming de STorm à Apache Samza et maintenant Flink.
Un point important à noter, si vous l’avez déjà remarqué, est que tous les frameworks de streaming natifs comme Flink, Kafka Streams, Samza qui supportent la gestion d’état utilisent RocksDb en interne. RocksDb est unique en ce sens qu’il maintient un état persistant localement sur chaque nœud et est très performant. Il est devenu un élément crucial des nouveaux systèmes de streaming. J’ai partagé des infos détaillées sur RocksDb dans l’un des posts précédents.
Comment choisir le meilleur framework de streaming :
C’est la partie la plus importante. Et la réponse honnête est : cela dépend 🙂 Il est important de garder à l’esprit qu’aucun framework de traitement ne peut être la solution miracle pour chaque cas d’utilisation. Chaque cadre a des forces et des limites aussi. Pourtant , avec une certaine expérience, va partager quelques pointeurs pour aider à prendre des décisions:
Dépend des cas d’utilisation : Si le cas d’utilisation est simple, il n’y a pas besoin d’aller pour le dernier et le plus grand cadre si elle est compliquée à apprendre et à mettre en œuvre. Cela dépend beaucoup de ce que nous sommes prêts à investir pour ce que nous voulons en retour. Par exemple, s’il s’agit d’un simple système d’alerte basé sur des événements de type IOT, Storm ou Kafka Streams est parfaitement bien pour travailler avec.
Préoccupations futures : Dans le même temps, nous devons également avoir une considération consciente sur ce que seront les cas d’utilisation futurs possibles ? Est-il possible que des demandes de fonctionnalités avancées comme le traitement des temps événementiels, l’agrégation, les jointures de flux, etc. puissent venir dans le futur ? Si la réponse est oui ou possible, alors il est préférable d’aller de l’avant avec des frameworks de streaming avancés comme Spark Streaming ou Flink. Une fois que l’on a investi et mis en œuvre une technologie, il est difficile et très coûteux d’en changer par la suite. Par exemple, dans notre entreprise précédente, nous avions un pipeline Storm en place depuis deux ans et il fonctionnait parfaitement bien jusqu’à ce que nous ayons besoin d’unifier les événements entrants et de ne signaler que les événements uniques. Cela exigeait une gestion d’état qui n’est pas intrinsèquement prise en charge par Storm. Bien que j’aie implémenté l’utilisation d’un hashmap en mémoire basé sur le temps, la limitation était que l’état disparaissait au redémarrage. De plus, cela posait des problèmes lors de tels changements, que j’ai décrits dans l’un de mes précédents articles. Le point que j’essaie de faire est, si nous essayons de mettre en œuvre quelque chose sur notre propre que le cadre ne fournit pas explicitement, nous sommes tenus de frapper des problèmes inconnus.
Pile technologique existante : Un point plus important est de considérer la pile technologique existante. Si la pile existante a Kafka en place de bout en bout, alors Kafka Streams ou Samza pourrait être plus facilement adapté. De même, si le pipeline de traitement est basé sur une architecture Lambda et que Spark Batch ou Flink Batch est déjà en place, il est logique d’envisager Spark Streaming ou Flink Streaming. Par exemple, dans l’un de mes projets précédents, j’avais déjà Spark Batch dans le pipeline et donc, lorsque le besoin de streaming est arrivé, il était assez facile de choisir Spark Streaming qui exigeait presque le même ensemble de compétences et la même base de code.
En bref, Si nous comprenons bien les forces et les limites des frameworks ainsi que nos cas d’utilisation, alors il est plus facile de choisir ou au moins de filtrer les options disponibles. Enfin, il est toujours bon d’avoir des POCs une fois que quelques options ont été sélectionnées. Tout le monde a des papilles différentes après tout.
Conclusion :
L’espace Streaming Apache évolue à un rythme si rapide que ce post pourrait être dépassé en termes d’informations dans quelques années. Actuellement, Spark et Flink sont les poids lourds menant de l’avant en termes de développements, mais certains nouveaux enfants peuvent encore venir et rejoindre la course. Apache Apex est l’un d’entre eux. Il existe également des solutions de streaming propriétaires que je n’ai pas abordées, comme Google Dataflow. L’objectif de cet article était d’aider les novices du streaming à comprendre, avec un minimum de jargon, certains concepts fondamentaux du streaming, ainsi que les forces, les limites et les cas d’utilisation des cadres de streaming open source les plus populaires. J’espère que ce post a été utile d’une certaine manière.