DataTorrent est une plate-forme de streaming et d'analyse temps-réel capable de traiter plus d'1 milliard d'évènements par seconde.
En comparaison avec la moyenne approximative de 6 000 tweets/sec de Twitter, le récemment sorti DataTorrent 1.0 et son milliard d'événements temps-réel par seconde semble aller au delà du nécessaire. Dans leurs tests effectués sur un cluster de 37 noeuds, chacun équipé de 256GB de RAM, 12 cores CPU hyper-threadés, DataTorrent affirme avoir atteint une scalabilité linéaire jusqu'à 1.6 milliards d'évènements par seconde lorsque les CPU sont arrivés à saturation. Phu Hoang, co-fondateur et CEO de DataTorrent, a rapporté à InfoQ que leur solution était "d'un ordre de magnitude" supérieurement performant qu'Apache Spark sur le même matériel.
DataTorrent est une plateforme de streaming et d'analyse temps-réel et tolérante à la panne, construite au dessus d'Hadoop 2.x et utilisant des applications Hadoop natives qui peuvent coexister avec des applications responsables d'autres tâches telles que du traitement en masse. L'architecture de la plate-forme est décrite dans le schéma ci-dessous.
StrAM (Streaming Application Master) est un master YARN Application Master responsable de la gestion du graphe logique (DAG, Directed Acyclic Graph) qui doit être exécuté sur le cluster Hadoop, en comprenant l'allocation de ressources, le partitionnement, la scalabilité, la planification, les services Web, les modifications à runtime, les statistiques, la mise en application des SLA, la sécurité et autres.
Les applications utilisateur existent au plus haut niveau du schéma, en tant qu'opérateurs connectés et/ou templates d'applications. Des exemples d'opérateurs sont InputReceiver (simule la réception de données en entrée), Average (calcule les moyennes de données pour une clé donnée pour une dimension donnée), RedisAverageOutput (écrit la moyenne calculée dans une base Redis), SmtpAvgOperator (envoie des emails en réaction aux alertes). Ces opérateurs font partie de la librairie Malhar qui comprend plus de 400 éléments de ce genre, en open-source sur GitHub. L'utilisateur peut aussi écrire les opérateurs dont il a besoin.
Nous avons demandé à Hoang ce qui rendait DataTorrent plus rapide que Spark :
Il existe deux différences architecturales importantes qui proviennent de l'attention portée par DataTorrent à permettre aux entreprises de réaliser des actions en temps-réel via le streaming et la volonté de Spark de généraliser le moteur Spark pour le traitement des flux. Les deux points d'attention clés sont la performance et la tolérance de panne stateful.
Performance : DataTorrent RTS a été conçu et construit depuis le départ comme une offre Hadoop 2.0 native focalisée sur la performance, avec une haute disponibilité. Le résultat est que DataTorrent effectue ses traitements événement par événement avec une latence en-dessous de la seconde. DataTorrent RTS planifie son application sur le conteneur Hadoop au démarrage et la correspondance est maintenue tant que l'application n'a pas besoin de la modifier, ce qui n'induit pas de surcoût de planification. Spark, de son côté, a été construit avant Hadoop 2.0 et utilise le moteur Spark pour exécuter de façon efficace plusieurs jobs "map reduce" en petits paquets, ou "mini-batches". Cette décision de conception implique que Spark (via le master d'application) doit à présent planifier chaque mini-batch sur le cluster, ce qui introduit un énorme overhead et ralentit tout le système.
Tolérance de panne Stateful : DataTorrent RTS a été conçu pour permettre des calculs complexes et stateful à haute performance, sans tolérance de panne. Ceci est un besoin clé pour l'entreprise, où la capacité de récupération d'une panne sans perte de données, sans perte d'état, est un impératif. La direction de conception pour DataTorrent RTS a été d'utiliser Java en langage de programmation et de soulager les développeurs d'entreprise et les ISV du "fardeau" qu'est la conception de la tolérance de panne (plus précisément pris en charge par DataTorrent RTS for the developer). Spark propose la tolérance de panne mais seulement pour les traitements stateless. La direction de conception pour Spark a été d'utiliser le langage Scala, qui est un langage fonctionnel, et les opérateurs qui traitent les flux sont stateless. Si une entreprise veut ajouter des traitements stateful à Spark, elle aurait à écrire le code au sein de son application, ce qui est difficile et peut impacter les performances.
D'après Hoang, DataTorrent est certifié pour "toutes les distributions Hadoop majeures, pour les déploiements à demeure comme sur le Cloud (comme Cloudera, Hortonworks et MapR et, pour le Cloud, Amazon AWS et Google Cloud), ce qui donne aux entreprises la flexibilité de changer de fournisseur Hadoop et de mode de déploiement sans friction".
Bien que DataTorrent soit une application commerciale, il existe une offre gratuite, toutes fonctionnalités comprises, utilisable pour les applications petites à moyennes.