DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Flux Debezium vs DBConvert – DZone
    Uncategorized

    Flux Debezium vs DBConvert – DZone

    mars 14, 2023
    Flux Debezium vs DBConvert - DZone
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Dans une conception d’application contemporaine qui utilise des microservices et répond aux demandes d’analyse dynamique, il est courant de synchroniser les données de diverses bases de données dispersées dans une entreprise et intégrées à divers systèmes. Dans les applications modernes, la synchronisation en temps réel des bases de données est souvent nécessaire, de sorte que la synchronisation ne peut pas attendre qu’un travail par lots s’exécute quotidiennement ou même toutes les heures.

    Le concept « Change Data Capture » ​​répond à ce besoin de synchronisation en temps réel en capturant et en suivant toutes les modifications apportées aux données dans les bases de données source et en propageant ces modifications aux bases de données cibles en temps réel.

    Alors que les organisations continuent de générer et de stocker de grandes quantités de données, le besoin d’une réplication de données en temps réel efficace et fiable est devenu de plus en plus important. Deux solutions dans cet espace sont Débezium et Flux DBConvert.

    Les deux plates-formes promettent de répliquer les données entre différents types de bases de données, mais laquelle vous convient le mieux ? Dans cet article, nous comparerons DBConvert Streams et Debezium en termes de performances.

    Architecture Debezium/Kafka

    Architecture Debezium/Kafka
    Source: Debezius

    L’architecture de « Change Data Capture » utilisant Debezium et Kafka Connect implique plusieurs composants travaillant ensemble pour capturer, traiter et acheminer les modifications de données :

    • Base de données sources : La base de données source est l’endroit où les modifications se produisent, émettant des événements lors des insertions, des mises à jour et des suppressions.
    • Connecteur Debezium : Debezium fournit des connecteurs pour différentes bases de données, qui capturent les modifications de manière indépendante de la base de données et les convertissent dans un format de message standard.
    • Apache Kafka : Kafka est une plate-forme de streaming distribuée qui agit comme une file d’attente de messages et garantit que les messages sont livrés dans l’ordre et sans perte.
    • Kafka Connect : Kafka Connect est un composant de Kafka qui gère l’intégration entre Kafka et les systèmes externes. Il est utilisé pour extraire des données de Debezium et les pousser vers les systèmes de destination.
    • Applications grand public : Ces applications consomment les modifications de données capturées et les traitent en fonction du cas d’utilisation. Il peut s’agir d’applications d’analyse, d’entrepôts de données ou de toute autre application nécessitant des données en temps réel.

    Architecture de flux DBConvert

    Architecture DBConvert

    Dans l’architecture DBConvert Streams, le flux de données est le suivant :

    • Le composant de lecteur de source de base de données DBConvert Streams lit les modifications CDC à partir de la base de données source en amont.
    • Le composant lecteur source propage les modifications au courtier de messages NATS. DBConvert Streams (DBS) utilise NATS au lieu de Kafka dans son architecture pour Change Data Capture. Le courtier de messages NATS agit comme une file d’attente de messages, garantissant une livraison fiable et efficace.
    • Le composant d’écriture cible DBS consomme les événements du courtier de messages NATS et les écrit dans la base de données cible.

    Cette architecture permet l’intégration de données en temps réel entre différentes bases de données, ce qui permet aux équipes de développement de travailler plus facilement avec diverses bases de données et de réduire la quantité de code personnalisé nécessaire pour implémenter CDC.

    Différents formats de journal de base de données

    Il n’y a pas de norme commune pour le format des journaux de base de données. Chaque système de base de données utilise généralement son format propriétaire pour ses journaux de transactions. Ce manque de standardisation peut rendre difficile pour les développeurs de travailler avec la capture de données modifiées, en particulier dans les environnements multi-bases de données.

    Pour résoudre ce problème, Debezium et DBConvert Streams proposent des connecteurs pour les bases de données populaires, simplifiant ainsi la mise en œuvre de CDC.

    Des tests de performance

    Nous allons configurer l’environnement de test à l’aide de Docker Compose pour démarrer tous les services et effectuer des tests de performances pour comparer l’efficacité de Debezium et DBConvert Streams dans la réplication d’un million d’enregistrements d’une base de données source MySQL vers une base de données cible Postgres.

    Nous avons créé un référentiel GitHub pour stocker les scripts de test et les résultats :

    Conditions préalables

    Avant de continuer, assurez-vous d’avoir installé les prérequis nécessaires, notamment :

    • Docker
    • Docker Composer
    • Boucle

    Veuillez cloner le dépôt spécifié sur votre ordinateur local :

    git clone git@github.com:slotix/dbconvert-streams-public.git

    Structure du tableau

    Structure du tableau

    Bases de données source et cible

    mysql-source l’image de la base de données est basée sur slotix/dbs-mysql:8, qui dispose de tous les paramètres nécessaires pour activer la réplication MySQL CDC. Cette image contient également le initdb.sql script, qui crée une table avec la structure ci-dessus.

    postgres-target la base de données est basée sur l’officiel postgres:15-alpine image. Il recevra toutes les modifications apportées au mysql-source base de données.

    Ces bases de données sont généralement hébergées sur des serveurs physiques distincts dans un environnement de production. Cependant, nous les exécuterons sur une seule machine en utilisant des conteneurs séparés pour notre exemple.

    Test de débezium

    cd dbconvert-streams-public/examples/mysql2postgres/1-
    million-records-debezium
    export DEBEZIUM_VERSION=2.0
    docker-compose up --build -d

    Définir la variable d’environnement DEBEZIUM_VERSION à 2.0, puis exécutez le docker-compose up commande avec les options --build construire les images et -d pour démarrer les conteneurs en arrière-plan.

    Déploiement

    curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @source.json
    
    curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" http://localhost:8083/connectors/ -d @target.json

    Ces deux commandes curl créent des connecteurs Kafka Connect pour Debezium afin de lire les données de la base de données source MySQL et d’écrire des données dans la base de données cible Postgres.

    Visitez ce lien pour afficher une liste des connecteurs actifs et en cours d’exécution.

    Surveiller le nombre d’enregistrements sur la cible

    Pour nous assurer que le processus de réplication fonctionne correctement, nous surveillerons le nombre d’enregistrements sur la base de données cible à l’aide du script ci-dessous :

    #!/bin/bash
    
    count=0
    start_time=0
    while true; do
      output=$(docker compose exec postgres-target bash -c "psql -U \$POSTGRES_USER \$POSTGRES_DB -c 'select count(*) from products'")
      count=$(echo "$output" | sed -n '3p' | awk '{print $1}')
      if [[ $count -gt 1 && $start_time -eq 0 ]]; then
        start_time=$(date +%s)
        echo "Started at"
      fi
      if [[ $count -gt 1000000 ]]; then
        end_time=$(date +%s)
        elapsed_time=$((end_time - start_time))
        echo "Record count exceeded 1000000 after $elapsed_time seconds."
        break
      fi
      echo "$output" | sed -n '3p' | awk '{print $1}'
      sleep 1
    done


    Le script imprimera le nombre d’enregistrements dans la base de données cible chaque seconde. Une fois que le nombre d’enregistrements dépasse 1 million, le script imprimera le temps écoulé et quittera.

    Dans le terminal suivant, exécutez les commandes suivantes :

     export DEBEZIUM_VERSION=2.0 
     ./count.sh
     

    Remplir la table source avec des exemples de données

    Pour exécuter le script SQL qui remplit la table source avec des exemples de données, vous pouvez exécuter les commandes suivantes dans le premier terminal :

    docker compose exec -it \
        mysql-source \
        mysql -u root -p123456 -D source
       

    Dans l’invite MySQL, exécutez la commande suivante :

    INSERT INTO products (name, price, weight)
    SELECT
      CONCAT('Product', number) AS name,
      ROUND(RAND() * 100, 2) AS price,
      RAND() * 10 AS weight
    FROM
      (SELECT @row := @row + 1 AS number FROM
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t1,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t2,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t3,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t4,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t5,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t6,
        (SELECT @row := 0) r
      ) numbers
    LIMIT 1000000;

    Cette commande va insérer 1 million de lignes de données aléatoires dans une table nommée products.

    Résultats

    Une fois l’opération terminée, vous verrez quelque chose comme ça dans le terminal où le count.sh le script est en cours d’exécution :

    ....
    942882
    960702
    977532
    995352
    Record count exceeded 1000000 after 96 seconds.

    Cela signifie qu’il a fallu environ 96 secondes pour répliquer 1 million d’enregistrements de MySQL vers la base de données Postgres.

    Test de flux DBConvert

    Nous allons faire le même test avec DBConvert Streams :

    cd dbconvert-streams-public/examples/mysql2postgres/1-million-records
    docker-compose up --build -d

    La commande ci-dessus démarrera les services en arrière-plan, créera les images et utilisera le docker-compose.yml fichier pour configurer les services.

    Envoyer la configuration du flux

    Envoyez une requête à l’API DBConvert Streams avec les paramètres de configuration.

    Exécutez la commande curl :

    curl --request POST --url http://127.0.0.1:8020/api/v1/streams\?file=./mysql2pg.json

    Remplir la table source avec des exemples de données

    Connectez-vous au conteneur MySQL pour interagir avec la base de données MySQL exécutée à l’intérieur du conteneur :

    docker exec -it \
        mysql-source \
        mysql -uroot -p123456 -D source

    Dans l’invite MySQL, exécutez la commande suivante :

    INSERT INTO products (name, price, weight)
    SELECT
      CONCAT('Product', number) AS name,
      ROUND(RAND() * 100, 2) AS price,
      RAND() * 10 AS weight
    FROM
      (SELECT @row := @row + 1 AS number FROM
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) t1,
        (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
         UNION SELECT 7 UNION SELECT 8...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.