Skip to main content

Synchronisation des données MEI TUAN DB pour la pratique de l'architecture et de l'entrepôt de données

Dans le modèle d'entrepôt de données, la couche de service d'origine sans aucun besoin de traitement de données traitée, nous l'appelons SAO ( Activité d'entrepôt de données). Dans les sociétés Internet, les données de SAO populaires disposent de deux types de données de journal d'entreprise (journal) et Data Enterprise DB (DB). Pour les données d'Enterprise DB, des services de collecte de données tels que MySQL et d'autres bases de données relationnelles, puis entrez-le en nid d'abeille, il s'agit d'une partie importante de la production de la production d'entrepôt de données.

Comment synchroniser les données MySQL pour des beeos précises et efficaces? La solution générique est lot et charge: connectez MySQL directement aux données de la table de sélection, puis enregistrez le fichier local sous forme de stockage intermédiaire et chargez enfin le fichier sur la table d'abeilles. L'avantage de ce programme est très simple, mais avec le développement des entreprises, les inconvénients sont également progressivement révélésSur:

Performance Cork: Entreprise, Choisissez parmi MySQL - & GT; Enregistrer dans localfile - & gt; Le chargement pour organiser ce coût de ligne de données augmente et ne peut pas répondre aux exigences temporelles de la production numérique en aval.

Directement d'un grand nombre de données importantes de MySQL, affectant MySQL est très grande, facile à provoquer des requêtes lentes, affectant les services normaux sur la ligne d'activité.

Parce que la syntaxe de la HIVE ne prend pas en charge les mises à jour, supprimées telles que SQL primitives, des données qui se produisent dans MySQL qui se produisent bien à l'appui.



Pour résoudre complètement ces problèmes, nous passons progressivement à la modification de données de capture + consolidation des solutions techniques, c'est-à-dire une acquisition Binlog par temps réel + Binlog Hardloging Handline Données de gestion de données d'entreprise SO SOLUTION. BINLOG est le journal binaire de MySQL, enregistre toutes les modifications de données dans le cluster Binlog basé sur MySQL et MySQL.


Cet article est principalement introduitDeux aspects de Binlog restaure les données commerciales à partir de l'acquisition de Binlog et hors ligne en temps réel de Binlog, afin d'introduire des données de DB exactes et d'importer une efficacité numérique.

Architecture globale


Architecture globale indiquée dans l'image ci-dessus. En termes de collecte en temps réel Binlog, nous utilisons le canal de projet Open Source d'Alibaba, chargé de retirer un binlog à partir de MySQL et de compléter l'analyse appropriée. Après la collection Binlog, il sauvera temporairement la consommation en aval. La section de collecte en temps réel globale est indiquée sur la photo sur la photo.

La section binlog gère hors connexion, comme indiqué sur l'image, suivez ces étapes pour restaurer les tables MySQL sur la ruche:

Utilisez la source ouverte de Camus LinkedIn. Projet, il est responsable du retrait des données des binlog sur Kafka toutes les heures.

Pour chaque carte ODS, pour la première fois, il est nécessaire de prendre des photos de production une fois, de lire des données de stock dans MySQL à l'ONg, à l'aide de la couche inférieure de MySQL est connecté directement pour sélectionner des données.

Pour chaque tableau ODS, la consolidation est faite sur la binlog créée par les données de stock et l'augmentation de la journée, récupérant ainsi les données commerciales.


Nous avons tourné pour voir, les lots de lots prennent des lots et différents problèmes rencontrés par le programme de téléchargement, pourquoi utiliser cette solution pour résoudre ce problème?

Premièrement, Binlog joue en ligne, via la collection Binlog en temps réel, les exigences de traitement des données partielles sont distribuées d'un lot à la ligne en temps réel. Indépendamment de la performance ou de la pression de l'accès MySQL, il y aura une amélioration significative.
Lundi, Binlog enregistre le type de changement de données (insertion / mise à jour / Suppression), qui peut être obtenu par certains aspects sémantiques, capable de récupérer les données correctes.



    Binlog acquis en temps réel

L'acquisition binlog par GILa sécurité contient deux modules principaux: le premier, CanalManager, est principalement responsable de la collecte de tâches d'attribution de tâches, de surveillance des alarmes, de gestion des métadonnées et de verrouillage avec des dépendances externes; La seconde est en fait le canal et le canal canalclient de la tâche d'acquisition.

Lorsque l'utilisateur envoie une demande d'acquisition BinLog de DB, CanalManager Appelez d'abord l'interface liée à la plate-forme DBA, obtenez des informations sur le boîtier MySQL dans lequel cette base de données est définie et que la destination est de choisir le plus Binlog approprié. Collectionneur. Distribuez ensuite l'exemple d'acquisition du service de canal correspondant sur le canal CanalServer sur le périphérique. Lors du choix d'un canalerver spécifique, CanalManager considère l'équilibrage de la charge, la transmission de machines croisées et d'autres facteurs, la priorité aux machines de transmission à faible charge et à la transmission géographique.


Après que CanalServer ait reçu une demande d'acquisition, les informations collectées seront enregistrées sur le zookeper. Le contenu enregistré comprend:



Un bouton fixe nommé au nom de l'instance.

Dans le bouton fixe, il a étéInscrivez-vous avec IP Main: boutons de port.

Disponible: CanalManager est distribué au boîtier, vous choisirez deux canaux CanalServer en tant que bouton d'exécution et le reste est un bouton d'attente. Bouton de sauvegarde de suivi express. Une fois le bouton d'exécution échoue, le bouton temporaire disparaît et le bouton d'attente semble. Cela a atteint le but de la catastrophe.
Avec l'interaction du canalclient: CanalClient après avoir exécuté CanalServer dans lequel vous êtes responsable, il sera donc connecté, alors obtenez les données Binlog envoyées par CanalServer.


L'abonnement à un binlog avec une taille de binlog dans MySQL DB et DB de Binlog correspond à un thème de Kafka. Lorsqu'il est essentiellement déployé, tous les DB enregistrés dans la version MySQL sont traités par la même affaire de canal. C'est parce que Binlog est créé comme version MySQL. CanalServer abandonnera les données de binlog non remplies, puis CanalClient sera distribuée à Kafka par la taille de particules DB.

Réduisez les données MySQL hors connexion



Après avoir terminé l'acquisition de binlog, l'étape suivante consiste à utiliser Binlog pour récupérer des données commerciales. La première question a été résolue d'abord à synchroniser Binlog de Kafka à Honeycomb.



Gestion de l'ensemble de la tâche KAFKA2Hive, dans le groupe de plate-forme de données ETL des États-Unis, y compris les expressions et le mécanisme de calendrier des tâches primitives, etc., Tout comme d'autres ETLS. La couche inférieure utilise le projet Open Source Camus de LinkedIn et a ciblé un développement secondaire pour compléter le travail de transfert de données de Kafka2Hive.


Binlog est stocké sur Camus

Binlog stocké sur Kafka sans schéma et la table en nid d'abeille doit avoir des schémas et des partitions, de l'école, etc. Devrait faciliter la consommation en aval. La première conversion en CAMUS est l'analyse de Binlog sur Kafka dans le format de laOh but.


La deuxième conversion faite par Camus a été déterminée par le cadre ETL de la mission américaine. Dans notre système de planification de la mission, seule la résolution de la dépendance inverse sur la mise en file d'attente de la ligne, des files d'attente croisées croisées ne peut pas configurer des dépendances. Dans l'ensemble du processus de MySQL2Hive, les tâches de Kafka2hive devraient être effectuées toutes les heures (toutes les heures) et la tâche consolidée une fois par jour (QIAN File d'attente). Le lancement de la tâche consolidée doit dépendre strictement de l'achèvement des heures de Kafka2hive.

Pour résoudre ce problème, nous avons introduit la tâche Checkdone. La mission de Checkdone est une tâche de jour, principalement responsable du test de Kafka2Hive avant de réussir les tests d'achèvement. En cas de succès réussi, la tâche Checkdone est mise en œuvre avec succès. La tâche de consolidation en aval peut donc être démarrée correctement.


Logique découverte par CHECKDONE

a découvert la section CheckdOne? Une fois que chaque tâche de Kafka2Hive a terminé avec succès la transmission de données, CAMUS est responsable de la journalisation du temps de démarrage de la tâche dans le répertoire HDFS correspondant. Checkdone scannera toutes les horaires avant la journée, si l'horodatage maximum a dépassé les 0 points, indiquant que la tâche Kafka2Hive dans la journée est terminée, l'inspection a donc terminé le test.

De plus, car Camus lui-même a complété le processus de lecture de Kafka, puis écrit des fichiers HDFS, doit remplir la partition de nid d'abeille pour exécuter les requêtes du courant. Par conséquent, la dernière étape de la tâche entière Kafka2Hive est de télécharger la partition d'abeille. De cette manière, toute la tâche réussit.


Chaque mission de Kafka2Hive est responsable de la lecture d'un sujet spécifique, d'écrire des données de binlog dans une table dans la bibliothèque originative_binlog, c'est l'original_binlog.db dans le diagramme avant, ce qui est stocké correspondant à mysql db tous binlog.

Structure de dossier de fichier sur HDFS après avoir terminé Kafka2Hive. Si MySQL DB s'appelle l'utilisateur, le binlog correspondant est stocké dans la table originale_binlog.user. Dans le dossier prêt à l'emploi, toutes les tâches de Kafka2hive réussies pour toutes les tâches de Kafka2Hive réussies de la journée sont stockées pour inspection. Binlog de chaque table, est disposé en une partition, telle que le binlog de la table UserInfo, stockée dans la partition de table_name = userinfo. Sous chaque niveau de partition de premier niveau, la partition secondaire est agencée selon DT. Les fichiers xxx.lzo et xxx.lzo.index sur la photo sont stockés dans les données Binlog compressées LZO.


Unified

Après avoir enregistré avec succès la position, l'étape suivante est basée sur Binlog pour récupérer des données MySQL. Le processus de consolidation a fait deux choses, crée d'abord les données Binlog créées à la date dans la table Delta, puis effectue la consolidation basée sur la clé primaire avec les données de stock existantes. réLes données dans la table Delta sont les dernières données de la journée. Lorsqu'une données est modifiée en une journée, seules les données de modification finales ne sont stockées que dans la table Delta.


Au cours des données Delta Data and Stock, la seule clé est nécessaire pour déterminer s'il s'agit des mêmes données. Si les mêmes données apparaissent dans la table de dépôt, il apparaîtra dans la table Delta, indiquant que ces données sont mises à jour et que les données de la table Delta sélectionnée sont le résultat final; Sinon, il n'y a pas de changement, conservez les données dans la table de stock d'origine. Résultat final. Les données sur les résultats de la fusion inséreront la nervure ORIGIDB.Table dans l'image.

Exemples de débit


L'exemple suivant sera décrit spécifiquement dans le flux unifié.

ID de feuille de données Total, deux colonnes, dans laquelle ID est la clé principale. Lors de l'extraction de données Delta, plusieurs mises à jour sur les mêmes données, une seule des mises à jour finales. Par conséquent, la valeur de la valeur de valeurDernière mise à jour = 120 est enregistrée dans la table Delta pour ID = 1. Après que les données Delta et les données de stock fusionneront, dans le résultat final, une nouvelle donnée est insérée (ID = 4) et les deux données ont été mises à jour (ID =. 1 et ID = 2) et les données ne peuvent pas être modifiées (ID = 3).

Par défaut, nous utilisons la clé principale de la table MySQL comme clé unique de la présente décision, les entreprises peuvent également être configurées différemment avec la clé unique de MySQL suivre la situation actuelle.


L'architecture globale est basée sur la collecte de données basée sur des binogog et réduit les données SAO décrites ci-dessus. Les éléments suivants ont principalement introduit les problèmes commerciaux réels dans deux aspects.


Pratique 1: Soutien aux branches

Avec l'expansion de l'échelle de l'entreprise, la barre de succursale de MySQL est de plus en plus, la quantité de ferraille de nombreuses entreprises est de quelques mille niveaux. Classeurs de développement de donnéesGénéralement besoin de synthétiser ces données ensemble pour une analyse. Si vous êtes synchronisé manuellement pour chaque solution, il est difficile pour nous d'aller à la nid d'abeille, ce qui est difficile pour nous. Par conséquent, nous devons compléter la synthèse de la classe ODS.

En premier lieu, lorsque Binlog a été recueilli en temps réel, nous soutenons la rédaction de Binlog pour différents dB avec le même thème de Kafka. Lorsque les utilisateurs peuvent s'abonner au rachat de Binlog, les utilisateurs sont testés en même temps avec la même logique commerciale. En collectant dans la classe d'acquisition Binlog, toutes les succursales Binlog enregistreront dans la même table de groupe, simplement lire une table d'abeille lorsque la fusion est effectuée en aval.


Configuration du support correspondant régulier de la tâche consolidée. En configurant des expressions courantes pour répondre aux règles de nommage des points métier, la tâche consolidée peut comprendre les tables MySQL dont vous avez besoin pour coïncider, de sorte que les données de partition correspondantes soient sélectionnées.

De cette manière, des branchesTerminé dans la classe ODS à travers deux niveaux.


a une optimisation technique. Lorsque Kafka2Hive, nous traitons le nom de la table en fonction des règles de l'entreprise et convertissons le nom de la table physique en logique. Nom de la table. Par exemple: userInfo Ce nom de table sera converti en userinfo et ses données binlog stockées dans l'original Table_Binlog.user_name = partition userinfo. Le but est de prévenir de petits fichiers HDFS de la pression excessive et de base due à la partition de nid d'abeille.

Pratique 2: Support clair

Le fonctionnement clair est très courant dans MySQL, car la ruche ne prend pas en charge la suppression, si vous souhaitez supprimer les données supprimées dans MySQL dans la ruche, devrait être fait par "rond-point".


Pour le processus de consolidation Pour gérer l'événement Supprimer, les deux étapes suivantes sont utilisées:


Premièrement, extraire les données d'événement Étant donné que le binlog lui-même a enregistré le type d'événement, cette étape est facile à faire. Montant des données (tableau A)Supprimer avec des données supprimées (tableau B) et si les données peuvent être connectées aux deux parties, les données seront supprimées. Par conséquent, les données d'enregistrement NULL correspond au tableau B sélectionné, ce qui signifie que les données doivent être conservées.

Après cela, les données obtenues ci-dessus sont conservées et conservées normalement en fonction du débit décrit ci-dessus.


Résumé et perspectives

est la base de la production d'entrepôt de données, la Binlog MySQL2Hive Service est fournie par la plate-forme de données de groupe Floral. KY, les bases incluent différents secteurs d'activité dans Le groupe américain, il a été en mesure de répondre à la demande de synchronisation des données de la plupart des entreprises et de mettre en œuvre des données DB correctement et efficacement. Dans le développement futur, nous nous concentrerons sur un point unique de CanalManager et construire une structure de la salle des machines croisées pour soutenir le développement d'entreprises plus stables. Cet article introduit l'architecture de ce service du flux de Binlog pour acheter LDonnées SAO basées sur Binlog et introduisent certains de nos problèmes et solutions typiques dans la pratique. J'espère fournir d'autres développeurs certaines valeurs de référence, mais également les festivals souhaitent que les gens communiquent avec nous.

Sujets