Répliquer des sujets Kafka avec MirrorMaker 2.0

Ce tutoriel explique comment répliquer des données entre des clusters Managed Service pour Apache Kafka à l'aide du connecteur source MirrorMaker 2.0.

Les clusters peuvent se trouver dans le même projet ou dans des projets différents, et dans la même région ou dans des régions différentes. Pour ce tutoriel, vous allez configurer la réplication entre régions, mais au sein du même projet. Toutefois, la procédure est la même pour les autres combinaisons.

Architecture

Dans ce scénario, il existe trois clusters :

  • Cluster Kafka dont les données sont répliquées. Ce cluster est appelé cluster source, car il est la source des données.

  • Cluster Kafka dans lequel les données répliquées sont écrites. Ce cluster est appelé cluster cible.

  • Un cluster Connect, qui vous permet de créer et de gérer le connecteur source MirrorMaker 2.0.

Le cluster Connect est associé au cluster cible. Pour minimiser la latence des opérations d'écriture, placez le cluster Connect dans la même région que le cluster cible.

Le schéma suivant montre ces composants :

Architecture du scénario de réplication des données Kafka

La réplication des données est effectuée par le connecteur source MirrorMaker 2.0. Deux autres connecteurs MirrorMaker 2.0 sont facultatifs pour ce scénario :

  • Connecteur de point de contrôle MirrorMaker 2.0 : permet un basculement fluide en s'assurant que les consommateurs du cluster cible peuvent reprendre le traitement au même point que le cluster source.

  • Connecteur de pulsation MirrorMaker 2.0 : génère des messages de pulsation périodiques sur le cluster Kafka source, ce qui vous permet de surveiller l'état et le statut de la réplication des données.

Ce tutoriel n'utilise pas ces connecteurs facultatifs. Pour en savoir plus, consultez Quand utiliser MirrorMaker 2.0.

Avant de commencer

Console

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Managed Kafka API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Managed Kafka API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  8. Assurez-vous de disposer du ou des rôles suivants dans le projet : Éditeur de cluster Kafka géré, Éditeur de cluster Kafka Connect géré, Éditeur de connecteur Kafka géré

    Vérifier les rôles

    1. Dans la console Google Cloud , accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez le projet.
    3. Dans la colonne Compte principal, recherchez toutes les lignes qui vous identifient ou identifient un groupe dont vous faites partie. Pour savoir à quels groupes vous appartenez, contactez votre administrateur.

    4. Pour toutes les lignes qui vous spécifient ou vous incluent, consultez la colonne Rôle pour vous assurer que la liste inclut les rôles requis.

    Attribuer les rôles

    1. Dans la console Google Cloud , accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez le projet.
    3. Cliquez sur  Accorder l'accès.
    4. Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.

    5. Cliquez sur Sélectionner un rôle, puis recherchez le rôle.
    6. Pour attribuer des rôles supplémentaires, cliquez sur  Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
    7. Cliquez sur Enregistrer.

gcloud

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  7. Activez l'API Managed Kafka, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable managedkafka.googleapis.com
  8. Installez la Google Cloud CLI.

  9. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  10. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  11. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  12. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  13. Activez l'API Managed Kafka, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable managedkafka.googleapis.com
  14. Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet.
    • USER_IDENTIFIER : identifiant de votre compte utilisateur . Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous accordez à votre compte utilisateur.

Créer le cluster Kafka source

Lors de cette étape, vous allez créer un cluster Managed Service pour Apache Kafka. Ce cluster est le cluster source, qui contient les données à répliquer.

Console

  1. Accédez à la page Managed Service pour Apache Kafka > Clusters.

    accéder aux clusters

  2. Cliquez sur Créer.

  3. Dans la zone Nom du cluster, saisissez le nom du cluster.

  4. Dans la liste Région, sélectionnez un emplacement pour le cluster.

  5. Pour Configuration réseau, configurez le sous-réseau où le cluster est accessible.

    1. Pour Project (Projet), sélectionnez votre projet.
    2. Pour Réseau, sélectionnez un réseau VPC dans votre projet.
    3. Pour Sous-réseau, sélectionnez un sous-réseau.
    4. Cliquez sur OK.
  6. Cliquez sur Créer.

Pendant la création du cluster, son état est Creating. Une fois le cluster créé, l'état est Active.

gcloud

Pour créer le cluster Kafka source, exécutez la commande managed-kafka clusters create.

gcloud managed-kafka clusters create SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/SOURCE_REGION/subnetworks/SOURCE_SUBNET \
--async

Remplacez les éléments suivants :

  • SOURCE_KAFKA_CLUSTER : nom du cluster Kafka
  • SOURCE_REGION : emplacement du cluster

    Pour en savoir plus sur les emplacements acceptés, consultez Emplacements Managed Service pour Apache Kafka.

  • PROJECT_ID : ID de votre projet

  • SOURCE_SUBNET : sous-réseau dans lequel vous souhaitez déployer le cluster (par exemple, default)

La commande s'exécute de manière asynchrone et renvoie un ID d'opération :

Check operation [projects/PROJECT_ID/locations/SOURCE_SUBNET/operations/OPERATION_ID] for status.

Pour suivre la progression de l'opération de création, utilisez la commande gcloud managed-kafka operations describe :

gcloud managed-kafka operations describe OPERATION_ID \
  --location=SOURCE_REGION

Pour en savoir plus, consultez Surveiller l'opération de création du cluster.

Créer un sujet Kafka

Lorsque le cluster source est prêt, créez un sujet comme suit :

Console

  1. Accédez à la page Managed Service pour Apache Kafka > Clusters.

    accéder aux clusters

  2. Cliquez sur le nom du cluster.

  3. Sur la page d'informations du cluster, cliquez sur Créer un sujet.

  4. Dans la zone Nom du thème, saisissez un nom pour le thème.

  5. Cliquez sur Créer.

gcloud

Pour créer un sujet Kafka, exécutez la commande managed-kafka topics create.

gcloud managed-kafka topics create TOPIC_NAME \
--cluster=SOURCE_KAFKA_CLUSTER \
--location=SOURCE_REGION \
--partitions=10 \
--replication-factor=3

Remplacez les éléments suivants :

  • TOPIC_NAME : nom du sujet Kafka à créer
  • SOURCE_KAFKA_CLUSTER : nom du cluster source
  • SOURCE_REGION : région dans laquelle vous avez créé le cluster source.

Créer le cluster Kafka cible

Dans cette étape, vous allez créer un deuxième cluster Managed Service pour Apache Kafka. Ce cluster est le cluster cible vers lequel MirrorMaker 2.0 réplique les données.

Console

  1. Accédez à la page Managed Service pour Apache Kafka > Clusters.

    accéder aux clusters

  2. Cliquez sur Créer.

  3. Dans la zone Nom du cluster, saisissez le nom du cluster.

  4. Dans la liste Région, sélectionnez un emplacement pour le cluster. Choisissez une région différente de celle où se trouve le cluster source.

  5. Pour Configuration réseau, configurez le sous-réseau où le cluster cible est accessible. Le sous-réseau doit se trouver dans le même réseau VPC que le sous-réseau du cluster source.

    1. Pour Project (Projet), sélectionnez votre projet.
    2. Pour Réseau, sélectionnez le même réseau VPC que le sous-réseau du cluster source.
    3. Pour Sous-réseau, sélectionnez le sous-réseau.
    4. Cliquez sur OK.
  6. Cliquez sur Créer.

Pendant la création du cluster, son état est Creating. Une fois le cluster créé, l'état est Active.

gcloud

Pour créer le cluster Kafka cible, exécutez la commande managed-kafka clusters create.

gcloud managed-kafka clusters create TARGET_KAFKA_CLUSTER \
--location=TARGET_REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
--async

Remplacez les éléments suivants :

  • TARGET_KAFKA_CLUSTER : nom du cluster Kafka
  • TARGET_REGION : emplacement du cluster. Choisissez une région différente de celle où se trouve le cluster source.

    Pour en savoir plus sur les emplacements acceptés, consultez Emplacements Managed Service pour Apache Kafka.

  • PROJECT_ID : ID de votre projet

  • TARGET_SUBNET : sous-réseau dans lequel vous souhaitez déployer le cluster (par exemple, default)

    Sélectionnez un sous-réseau dans le même VPC que le cluster source.

Créer un cluster Connect

Lors de cette étape, vous allez créer un cluster Connect. La création d'un cluster Connect prend généralement entre 20 et 30 minutes.

Avant de commencer cette étape, assurez-vous que le cluster Kafka cible de l'étape précédente est entièrement créé.

Console

  1. Accédez à la page Managed Service pour Apache Kafka > Clusters de connexion.

    Accéder à "Connect Clusters"

  2. Cliquez sur Créer.

  3. Dans le champ Nom du cluster Connect, saisissez une chaîne. Exemple : my-connect-cluster

  4. Pour Cluster Kafka principal, sélectionnez le cluster Kafka cible que vous avez créé à l'étape précédente. (Ne sélectionnez pas votre cluster Kafka source.)

  5. Pour Emplacement, Configuration réseau et Sous-réseau du nœud de calcul, vous pouvez utiliser les valeurs par défaut ou les personnaliser en fonction de vos besoins spécifiques.

  6. Pour permettre au cluster Connect de résoudre le domaine DNS du cluster source, procédez comme suit :

    1. Développez Domaines DNS pouvant être résolus.

    2. Cliquez sur Ajouter un domaine DNS.

    3. Dans la liste Cluster Kafka, sélectionnez le cluster Kafka source.

  7. Cliquez sur Créer.

Pendant la création du cluster, son état est Creating. Une fois le cluster créé, l'état est Active.

gcloud

Pour créer un cluster Connect, exécutez la commande gcloud managed-kafka connect-clusters create.

gcloud managed-kafka connect-clusters create CONNECT_CLUSTER \
  --location=TARGET_REGION \
  --cpu=12 \
  --memory=12GiB \
  --primary-subnet=projects/PROJECT_ID/regions/TARGET_REGION/subnetworks/TARGET_SUBNET \
  --kafka-cluster=TARGET_KAFKA_CLUSTER \
  --dns-name=SOURCE_KAFKA_CLUSTER.SOURCE_REGION.managedkafka.PROJECT_ID.cloud.goog. \
  --async

Remplacez les éléments suivants :

  • CONNECT_CLUSTER : nom du cluster Connect
  • TARGET_REGION : région dans laquelle vous avez créé le cluster Kafka cible
  • PROJECT_ID : ID de votre projet
  • TARGET_SUBNET : sous-réseau dans lequel vous avez créé le cluster Kafka cible.
  • TARGET_KAFKA_CLUSTER : nom du cluster Kafka cible
  • SOURCE_KAFKA_CLUSTER : nom du cluster Kafka source
  • SOURCE_REGION : région dans laquelle vous avez créé le cluster Kafka source.

La commande s'exécute de manière asynchrone et renvoie un ID d'opération :

Check operation [projects/PROJECT_ID/locations/TARGET_REGION/operations/OPERATION_ID] for status.

Pour suivre la progression de l'opération de création, utilisez la commande gcloud managed-kafka operations describe :

gcloud managed-kafka operations describe OPERATION_ID \
  --location=TARGET_REGION

Pour en savoir plus, consultez Surveiller l'opération de création du cluster.

Créer un connecteur source MirrorMaker 2.0

Au cours de cette étape, vous allez créer un connecteur source MirrorMaker 2.0. Ce connecteur réplique les messages du cluster Kafka source vers le cluster Kafka cible.

Console

  1. Accédez à la page Managed Service pour Apache Kafka > Clusters de connexion.

    Accéder à "Connect Clusters"

  2. Cliquez sur le nom du cluster Connect.

  3. Cliquez sur Créer un connecteur.

  4. Saisissez une chaîne pour le nom du connecteur. Exemple : mm2-connector.

  5. Dans la liste Plug-in de connecteur, sélectionnez MirrorMaker 2.0 Source.

  6. Pour Cluster source, sélectionnez Cluster Managed Service pour Apache Kafka.

  7. Dans la liste Cluster Kafka, sélectionnez votre cluster source.

  8. Dans la zone Noms de sujets ou expressions régulières de sujets (séparés par une virgule), saisissez le nom du ou des sujets Kafka que vous souhaitez répliquer.

  9. Cliquez sur Créer.

gcloud

  1. Exécutez la commande gcloud managed-kafka clusters describe pour obtenir l'adresse d'amorçage du cluster Kafka source.

    gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION \
      --project=PROJECT_ID \
      --format="value(bootstrapAddress)"
    

    Remplacez les éléments suivants :

    • SOURCE_KAFKA_CLUSTER : nom du cluster Kafka source
    • SOURCE_REGION : région du cluster source.
    • PROJECT_ID : ID de votre projet
  2. Exécutez à nouveau la commande précédente pour obtenir l'adresse d'amorçage du cluster Kafka cible.

    gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \
      --location=TARGET_REGION \
      --project=PROJECT_ID \
      --format="value(bootstrapAddress)"
    

    Remplacez les éléments suivants :

    • TARGET_KAFKA_CLUSTER : nom du cluster Kafka cible
    • TARGET_REGION : région du cluster cible
  3. Pour créer un connecteur source MirrorMaker 2.0, exécutez la commande gcloud managed-kafka connectors create.

    gcloud managed-kafka connectors create CONNECTOR_NAME \
      --location=TARGET_REGION \
      --connect-cluster=CONNECT_CLUSTER \
      --configs=connector.class=org.apache.kafka.connect.mirror.MirrorSourceConnector,\
    source.cluster.alias=source,\
    source.cluster.bootstrap.servers=SOURCE_CLUSTER_BOOTSTRAP_ADDRESS,\
    target.cluster.alias=target,\
    target.cluster.bootstrap.servers=TARGET_CLUSTER_BOOTSTRAP_ADDRESS,\
    tasks.max=3,\
    topics=TOPIC_NAME
    

    Remplacez les éléments suivants :

    • CONNECTOR_NAME : nom du connecteur, par exemple mm2-connector
    • CONNECT_CLUSTER : nom de votre cluster Connect
    • SOURCE_CLUSTER_BOOTSTRAP_ADDRESS : adresse d'amorçage du cluster source, à partir de l'étape 1.
    • TARGET_CLUSTER_BOOTSTRAP_ADDRESS : adresse d'amorçage du cluster cible, à partir de l'étape 2.
    • TOPIC_NAME : nom du thème à répliquer. Ce paramètre peut également spécifier une liste de noms de thèmes séparés par une virgule ou une expression régulière.

Le connecteur source MirrorMaker 2.0 crée un sujet dans le cluster cible nommé "source.TOPIC_NAME", où TOPIC_NAME est le nom du sujet dans le cluster source.

Afficher les résultats

Pour vérifier que les messages sont répliqués, vous pouvez utiliser les outils de ligne de commande Kafka. Pour savoir comment configurer la CLI Kafka, consultez Configurer une machine cliente dans le document Produire et consommer des messages avec la CLI.

Par exemple, pour envoyer un message au cluster source, saisissez ce qui suit sur la ligne de commande :

export BOOTSTRAP=$(gcloud managed-kafka clusters describe SOURCE_KAFKA_CLUSTER \
 --location=SOURCE_REGION \
 --project=PROJECT_ID \
 --format="value(bootstrapAddress)"
)

for msg in {1..10}; do
  echo "message $msg"
done | kafka-console-producer.sh --topic TOPIC_NAME \
       --bootstrap-server $BOOTSTRAP --producer.config client.properties

Pour lire les messages dupliqués à partir du cluster cible, saisissez la commande suivante sur la ligne de commande :

export BOOTSTRAP=$(gcloud managed-kafka clusters describe TARGET_KAFKA_CLUSTER \
 --location=TARGET_REGION \
 --project=PROJECT_ID \
 --format="value(bootstrapAddress)"
)

kafka-console-consumer.sh --topic source.TOPIC_NAME --from-beginning \
 --bootstrap-server $BOOTSTRAP --consumer.config client.properties

La sortie ressemble à ceci :

message 1
message 2
message 3
message 4
[...]

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Console

  1. Supprimez le cluster Connect.

    1. Accédez à la page Managed Service pour Apache Kafka > Clusters de connexion.

      Accéder à "Connect Clusters"

    2. Sélectionnez le cluster Connect, puis cliquez sur Supprimer.

  2. Supprimez le cluster Kafka source.

    1. Accédez à la page Managed Service pour Apache Kafka > Clusters.

      accéder aux clusters

    2. Sélectionnez le cluster Kafka, puis cliquez sur Supprimer.

  3. Répétez l'étape précédente pour supprimer le cluster Kafka cible.

gcloud

  1. Pour supprimer le cluster Connect, utilisez la commande gcloud managed-kafka connect-clusters delete.

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=TARGET_REGION --async
    
  2. Pour supprimer le cluster Kafka source, utilisez la commande gcloud managed-kafka clusters delete.

    gcloud managed-kafka clusters delete SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION --async
    
  3. Répétez l'étape précédente pour supprimer le cluster Kafka cible.

    gcloud managed-kafka clusters delete TARGET_KAFKA_CLUSTER \
      --location=TARGET_REGION --async
    

Étapes suivantes