L'API du processeur d'état: comment lire, écrire et modifier l'état des applications Flink

publié il y a  2020-2-19 10:28:23 22 0 0 0

Que vous exécutiez Apache Flink    en production ou évalué Flink en tant que cadre de calcul dans le passé, vous vous êtes probablement posé la question: comment puis-je accéder, écrire ou mettre à jour l'état dans un point de sauvegarde Flink? Ne demandez plus!   Apache Flink 1.9.0   introduit le   State Processor API, une extension puissante de l'API DataSet qui permet la lecture, l'écriture et la modification de l'état dans les points de sauvegarde et les points de contrôle de Flink.

Dans cet article, nous expliquons pourquoi cette fonctionnalité est un grand pas pour Flink, pourquoi vous pouvez l'utiliser et comment l'utiliser. Enfin, nous discuterons de l'avenir de l'API State Processor et de la manière dont elle s'aligne sur nos plans pour faire évoluer Flink en un système pour   traitement unifié par lots et par flux.

Traitement de flux dynamique avec Apache Flink jusqu'à Flink 1.9

Toutes les applications de traitement de flux non triviales sont avec état et la plupart d'entre elles sont conçues pour fonctionner pendant des mois ou des années. Au fil du temps, beaucoup d'entre eux accumulent un état précieux qui peut être très coûteux, voire impossible à reconstruire s'il se perd en raison d'une défaillance. Afin de garantir la cohérence et la durabilité de l'état de l'application, Flink a proposé très tôt un mécanisme sophistiqué de contrôle et de récupération. Avec chaque version, la communauté Flink a ajouté de plus en plus de fonctionnalités liées à l'état pour améliorer les points de contrôle et la vitesse de récupération, la maintenance des applications et les pratiques de gestion des applications.

Cependant, une fonctionnalité souvent demandée par les utilisateurs de Flink était la possibilité d'accéder à l'état d'une application «de l'extérieur». Cette demande était motivée par la nécessité de valider ou de déboguer l'état d'une application, de migrer l'état d'une application vers une autre application, de faire évoluer une application du Heap State Backend vers le RocksDB State Backend, ou d'importer l'état initial de une application d'un système externe comme une base de données relationnelle.

Malgré toutes ces raisons convaincantes d'exposer l'état de l'application en externe, vos options d'accès ont été assez limitées jusqu'à présent. La fonctionnalité Flery's Queryable State ne prend en charge que les recherches de clés (requêtes ponctuelles) et ne garantit pas la cohérence des valeurs renvoyées (la valeur d'une clé peut être différente avant et après la récupération d'une application après une défaillance). De plus, l'état interrogeable ne peut pas être utilisé pour ajouter ou modifier l'état d'une application. En outre, les points de sauvegarde, qui sont des instantanés cohérents de l'état d'une application, n'étaient pas accessibles car l'état de l'application est codé avec un format binaire personnalisé.

Lecture et écriture de l'état de l'application avec l'API State Processor

L'API State Processor fournie avec Flink 1.9 est un véritable changement dans la façon dont vous pouvez travailler avec l'état de l'application! En bref, il étend l'API DataSet avec Input et OutputFormats pour lire et écrire des données de point de sauvegarde ou de point de contrôle. En raison de   l'interopérabilité de DataSet et de l'API de table, vous pouvez même utiliser l'API de table relationnelle ou des requêtes SQL pour analyser et traiter les données d'état.

Par exemple, vous pouvez prendre un point de sauvegarde d'une application de traitement de flux en cours d'exécution et l'analyser avec un programme de traitement par lots DataSet pour vérifier que l'application se comporte correctement. Ou vous pouvez lire un lot de données à partir de n'importe quel magasin, le prétraiter et écrire le résultat dans un point d'enregistrement que vous utilisez pour amorcer l'état d'une application de streaming. Il est également possible de corriger les entrées d'état incohérentes maintenant. Enfin, l'API State Processor ouvre de nombreuses façons de faire évoluer une application avec état qui était auparavant bloquée par des choix de paramètres et de conception qui ne pouvaient pas être modifiés sans perdre tout l'état de l'application après son démarrage. Par exemple, vous pouvez désormais modifier arbitrairement les types de données des états, ajuster le parallélisme maximal des opérateurs, diviser ou fusionner l'état des opérateurs, réaffecter les UID des opérateurs, etc.

Mappage de l'état de l'application aux ensembles de données

L'API State Processor mappe l'état d'une application de streaming à un ou plusieurs ensembles de données qui peuvent être traités séparément. Pour pouvoir utiliser l'API, vous devez comprendre le fonctionnement de ce mappage.

Mais voyons d'abord à quoi ressemble un travail Flink avec état. Un travail Flink est composé d'opérateurs, généralement un ou plusieurs opérateurs source, quelques opérateurs pour le traitement réel et un ou plusieurs opérateurs puits. Chaque opérateur s'exécute en parallèle dans une ou plusieurs tâches et peut travailler avec différents types d'état. Un opérateur peut avoir zéro, un ou plusieurs   «Opérateur indique»   qui sont organisés sous forme de listes qui sont limitées aux tâches de l'opérateur. Si l'opérateur est appliqué sur un flux à clé, il peut également avoir zéro, un ou plusieurs   «États clés»   qui sont étendues à une clé qui est extraite de chaque enregistrement traité. Vous pouvez considérer l'état de clé comme une carte clé-valeur distribuée.

La figure suivante montre l'application «MyApp» qui se compose de trois opérateurs appelés «Src», «Proc» et «Snk». Src a un état opérateur (os1), Proc a un état opérateur (os2) et deux états à clé (ks1, ks2) et Snk est sans état.

application-my-app-state-processor-api

Un point de sauvegarde ou un point de contrôle de MyApp se compose des données de tous les états, organisées de manière à ce que les états de chaque tâche puissent être restaurés. Lors du traitement des données d'un point de sauvegarde (ou point de contrôle) avec un travail par lots, nous avons besoin d'un modèle mental qui mappe les données des états des tâches individuelles dans des ensembles de données ou des tableaux. En fait, nous pouvons considérer un point de sauvegarde comme une base de données. Chaque opérateur (identifié par son UID) représente un espace de noms. Chaque état d'opérateur d'un opérateur est mappé à une table dédiée dans l'espace de noms avec une seule colonne qui contient les données d'état de toutes les tâches. Tous les états clavetés d'un opérateur sont mappés sur une seule table composée d'une colonne pour la clé et d'une colonne pour chaque état claveté. La figure suivante montre comment un point de sauvegarde de MyApp est mappé à une base de données.

base de données-mon-app-état-processeur-api

La figure montre comment les valeurs de l'état de l'opérateur de Src sont mappées à une table avec une colonne et cinq lignes, une ligne pour toutes les entrées de liste dans toutes les tâches parallèles de Src. L'état d'opérateur os2 de l'opérateur «Proc» est mappé de manière similaire à une table individuelle. Les états à clé ks1 et ks2 sont combinés en une seule table avec trois colonnes, une pour la clé, une pour ks1 et une pour ks2. La table à clés contient une ligne pour chaque clé distincte des deux états à clé. L'opérateur «Snk» n'ayant aucun état, son espace de noms est vide.

L'API State Processor propose désormais des méthodes pour créer, charger et écrire un point de sauvegarde. Vous pouvez lire un DataSet à partir d'un point de sauvegarde chargé ou convertir un DataSet dans un état et l'ajouter à un point de sauvegarde. Les DataSets peuvent être traités avec l'ensemble complet des fonctionnalités de l'API DataSet. Avec ces blocs de construction, tous les cas d'utilisation susmentionnés (et plus) peuvent être traités. Veuillez consulter le   Documentation   si vous souhaitez en savoir plus sur l'utilisation de l'API State Processor.

Pourquoi l'API DataSet?

Si vous connaissez   La feuille de route de Flink, vous pourriez être surpris que l'API State Processor soit basée sur l'API DataSet. La communauté Flink prévoit d'étendre l'API DataStream avec le concept de   BoundedStreams   et dépréciez l'API DataSet. Lors de la conception de cette fonctionnalité, nous avons également évalué l'API DataStream ou l'API Table, mais aucun des deux n'a pu fournir le bon ensemble de fonctionnalités pour le moment. Comme nous ne voulions pas bloquer cette fonctionnalité sur la progression des API de Flink, nous avons décidé de la construire sur l'API DataSet, mais avons gardé ses dépendances sur l'API DataSet au minimum. Par conséquent, sa migration vers une autre API devrait être assez facile.

Sommaire

Les utilisateurs de Flink ont demandé une fonctionnalité pour accéder et modifier l'état des applications de streaming depuis l'extérieur depuis longtemps. Avec l'API State Processor, Flink 1.9.0 expose enfin l'état de l'application comme un format de données qui peut être manipulé. Cette fonctionnalité ouvre de nombreuses nouvelles possibilités sur la façon dont les utilisateurs peuvent maintenir et gérer les applications de streaming Flink, y compris l'évolution arbitraire des applications de streaming et l'exportation et l'amorçage de l'état de l'application. Pour le dire de manière concise, l'API State Processor déverrouille la boîte noire que les points de sauvegarde étaient.

reffer: https://flink.apache.org/feature/2019/09/13/state-processor-api.html


  • x
  • Standard:

Commentaire

envoyer
Connectez-vous pour répondre. Se connecter | Enregistrer

Remarque Remarque : Afin de protéger vos droits et intérêts légitimes, ceux de la communauté et des tiers, ne divulguez aucun contenu qui pourrait présenter des risques juridiques pour toutes les parties. Le contenu interdit comprend, sans toutefois s'y limiter, le contenu politiquement sensible, le contenu lié à la pornographie, aux jeux d'argent, à l'abus et au trafic de drogues, le contenu qui peut divulguer ou enfreindre la propriété intellectuelle d'autrui, y compris les secrets professionnels, les marques commerciales, les droits d'auteur et les brevets, ainsi que la vie privée personnelle. Ne partagez pas votre nom d'utilisateur ou votre mot de passe avec d'autres personnes. Toutes les opérations effectuées à partir de votre compte seront considérées comme vos propres actions, et toutes les conséquences en découlant vous seront imputées. Pour plus de détails, voir « Politique de confidentialité ».
Si le bouton de la pièce-jointe n'est pas disponible, mettez à jour Adobe Flash Player à la dernière version.

My Followers

Connectez-vous pour participer à la communication et au partage

Connectez-vous pour participer à la communication et au partage

S'identifier