Migration d'Apache Kafka vers Pubsub

Migration d'Apache Kafka vers Pubsub

À propos de cet atelier de programmation

subjectDernière mise à jour : oct. 4, 2023
account_circleRédigé par Timothy Itodo & Sri Harshini Donthineni

1. Introduction

Cet atelier de programmation est un guide par étapes qui explique comment migrer des applications d'Apache Kafka vers Google Cloud Pubsub à l'aide de l'approche de migration par étapes.

Pour en savoir plus sur les différences entre Kafka et Pubsub, et sur l'approche de migration par étapes, cliquez ici.

Ce que vous allez faire

Dans cette démonstration, vous allez:

  • Configurer un cluster Kafka autogéré sur GCE
  • Déployer une application Kafka simple qui diffuse des chaînes aléatoires
  • Configurer Pub/Sub
  • Migrer de Kafka vers Pubsub à l'aide du connecteur Kafka pour Pub/Sub

Points abordés

  • Configurer un cluster Kafka autogéré sur GCE
  • Migrer une application Kafka vers une application Pub/Sub

Prérequis

  • Accédez à Google Cloud Platform (avec des autorisations d'écriture pour BigQuery et Pub/Sub).
  • gcloud CLI installée.
  • Java 8 ou version ultérieure installé.

Coût

Dans ce document, vous utiliserez les produits/services facturables suivants:

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

2. Configurer Kafka

Dans cet atelier de programmation, nous allons démarrer Kafka à l'aide de ZooKeeper. Java 8 ou version ultérieure doit être installé dans votre environnement local.

1. Installer Kafka

Téléchargez Kafka et extrayez-le. Pour ce faire, nous vous recommandons d'effectuer le téléchargement binaire:

curl -O https://downloads.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz
tar
-xzf kafka_2.13-3.5.1.tgz
cd kafka_2
.13-3.5.1

2. Démarrer zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

3. Démarrer le courtier

Pour démarrer l'agent de service Kafka, ouvrez une autre session de terminal et exécutez la commande suivante:

bin/kafka-server-start.sh config/server.properties

4. Créer un sujet Kafka

Créez un sujet Kafka pour l'application Kafka, ouvrez une nouvelle session de terminal et exécutez la commande suivante:

export TOPIC= "my-topic"
bin
/kafka-topics.sh --create --topic $TOPIC --bootstrap-server localhost:9092

5. Confirmer la création des sujets

bin/kafka-topics.sh --describe --topic $TOPIC --bootstrap-server localhost:9092

Le résultat de la commande cmd ci-dessus doit ressembler à ce qui suit:

Topic: my-topic   TopicId: gf4ena9rSmyQXMTDj1bBmQ PartitionCount: 1   ReplicationFactor: 1    Configs:
 
Topic: my-topic Partition: 0    Leader: 0   Replicas: 0 Isr: 0

3. Créer une application Kafka

Dans cet atelier de programmation, nous allons créer une application Java Kafka avec un producteur et deux clients. Le producteur envoie régulièrement des chaînes aléatoires et un code temporel à un sujet kafka.

Pour illustrer la migration par étapes, nous allons créer deux clients pour cette application.

  • Consommateur 1 - affiche les messages lus
  • Consommateur 2 – Écrit les messages dans BigQuery

Ouvrez un nouveau terminal et exécutez les commandes suivantes. N'exécutez pas ces commandes dans le répertoire de téléchargement Kafka.

1. Définir des variables constantes

export PROJECT_ID="<your project id>"
export DATASET_ID="<dataset name>"
export TABLE_ID="<table name>"
export TOPIC="my-topic"

2. Télécharger l'application Kafka src

git clone https://github.com/itodotimothy6/kafka-to-pubsub-demo.git
cd kafka
-to-pubsub-demo

3. Configurer et authentifier gcloud

gcloud config set project $PROJECT_ID
gcloud auth application
-default login
gcloud services enable bigquery
.googleapis.com

4. Créer une table BigQuery

Cette table est utilisée par le deuxième consommateur pour écrire la sortie. La définition du schéma de la table est "message:STRING, timestamp:STRING".

bq mk --dataset --data_location US $PROJECT_ID:$DATASET_ID 
bq mk
--table $PROJECT_ID:$DATASET_ID.$TABLE_ID message:STRING,timestamp:STRING

5. Exécuter le producteur pour commencer à envoyer des messages au sujet

mvn clean install
mvn
exec:java \
 
-Dexec.mainClass="org.kafka.SimpleKafkaProducer" \
 
-Dexec.args="$TOPIC"

Les journaux de sortie doivent ressembler à ceci:

...
Message sent: {"message":"283b7961-44cd-46d4-9061-5a22b8a1bdd7","timestamp":"2023-09-15 12:17:09"}
Message sent: {"message":"e4c2110a-ebbe-4c96-88d1-56ffdc2a3e9a","timestamp":"2023-09-15 12:17:14"}
...

6. Exécuter le premier consommateur qui déconnecte les messages du sujet vers la console

mvn clean install
mvn
exec:java \
 
-Dexec.mainClass="org.kafka.SimpleKafkaConsumer1" \
 
-Dexec.args="$TOPIC"

Les journaux de sortie doivent ressembler à ceci:

...
Received message: {"message":"72d46b42-5014-4d28-a6e3-04b65de63826","timestamp":"2023-09-15 12:32:47"}
Received message: {"message":"631464dc-2651-4cce-826f-c9442beb3e98","timestamp":"2023-09-15 12:32:52"}
...

7. Exécuter le deuxième client qui écrit les messages du sujet kafka dans une table BigQuery

mvn clean install
mvn
exec:java \
 
-Dexec.mainClass="org.kafka.SimpleKafkaConsumer2" \
 
-Dexec.args="$TOPIC $PROJECT_ID $DATASET_ID $TABLE_ID"

Les journaux de sortie doivent ressembler à ceci:

...
Message inserted to BigQuery successfully.
Message inserted to BigQuery successfully.
...

8. Vérifier que les messages sont bien écrits dans BigQuery à partir de la console GCP

8734b356c59543af.png

4. Configurer Pub/Sub

1. Activer Pub/Sub

gcloud services enable pubsub.googleapis.com

2. Créer un sujet Pub/Sub

Ce sujet remplacera à terme le sujet kafka. Pour plus de simplicité, nous pouvons utiliser le même nom que le sujet "kafka".

export TOPIC = "my-topic"
gcloud pubsub topics create $TOPIC

5. Migration par étapes

Maintenant que nous avons configuré notre application Kafka et que nous disposons d'un sujet Pub/Sub pour la migration, nous allons procéder à la migration de Kafka vers Pub/Sub.

Dans cette démonstration de migration, nous utiliserons le connecteur Kafka du groupe Google Cloud Pub/Sub, qui vous permet de migrer votre infrastructure Kafka par phases.

Phase 1

Configurer le connecteur Pub/Sub pour transférer tous les messages du sujet Kafka vers le sujet Pub/Sub

1. Procurez-vous le fichier JAR du connecteur Kafka-to-pubsub en créant le dépôt du connecteur.

git clone https://github.com/googleapis/java-pubsub-group-kafka-connector
cd java
-pubsub-group-kafka-connector/
mvn clean
package -DskipTests=True

Si l'opération réussit, le fichier jar obtenu devrait s'afficher à l'adresse target/pubsub-group-kafka-connector-${VERSION}.jar.

Créez une variable avec le chemin d'accès complet au fichier JAR.

export KAFKA_CONNECT_JAR="path/to/target/pubsub-group-kafka-connector-${VERSION}.jar"

2. Mettre à jour les configurations Kafka installées avec les configurations Kafka Connect

Remplacez le répertoire par votre dossier de téléchargement kafka précédent.

cd kafka_2.13-3.5.1

Ouvrez /config/connect-standalone.properties dans le dossier de téléchargement Kafka et ajoutez le chemin d'accès du fichier JAR téléchargé à plugin.path et annulez la mise en commentaire de la ligne si nécessaire. Vous pouvez également exécuter la commande cmd ci-dessous

echo "plugin.path=$KAFKA_CONNECT_JAR" >> config/connect-standalone.properties

3. Créez un fichier de configuration CloudPubSubSinkConnector avec le sujet Kafka, le projet Pub/Sub et le sujet Pub/Sub nécessaires à la migration. Consultez l'exemple du CloudPubSubSinkConnector fichier de configuration ici.

cat <<EOF > config/cps-sink-connector.properties
name
=CPSSinkConnector
connector
.class=com.google.pubsub.kafka.sink.CloudPubSubSinkConnector
tasks
.max=10
key
.converter=org.apache.kafka.connect.storage.StringConverter
value
.converter=org.apache.kafka.connect.converters.ByteArrayConverter
topics
=$TOPIC
cps
.project=$PROJECT_ID
cps
.topic=$TOPIC
EOF

4. Démarrez le connecteur pour commencer à transférer les messages du sujet Kafka vers Pub/Sub.

bin/connect-standalone.sh \
config
/connect-standalone.properties \
config
/cps-sink-connector.properties

Vérifier dans la console GCP que les messages sont transférés vers votre sujet Pub/Sub

Phase 2

Mettez à jour les applications consommateur pour recevoir des messages du sujet Pub/Sub pendant que votre producteur continue de publier des messages sur Kafka.

1. Mettez à jour le client qui affiche les messages dans la console pour vous abonner à Pub/Sub. Dans l'exemple kafka-to-pubsub-demo src, SimplePubsubscriber1 est mis à jour pour lire les données du sujet Pub/Sub.

Créer un abonnement Pub/Sub

export SUBSCRIPTION_ID="sub1"
gcloud pubsub subscriptions create $SUBSCRIPTION_ID
--topic=$TOPIC

Exécuter l'application d'abonné mise à jour

cd kafka-to-pubsub-demo
mvn
exec:java \
 
-Dexec.mainClass="org.pubsub.SimplePubsubSubscriber1" \
 
-Dexec.args="$PROJECT_ID $SUBSCRIPTION_ID"

Les journaux de sortie doivent ressembler à ceci :

...
Id: 8827699929893588
Data: {"message":"08afe1db-2ace-466d-bcf9-77ffc80a7f58","timestamp":"2023-09-15 15:57:34"}
Id: 8827853608001203
Data: {"message":"557960f7-5f2e-4156-84de-e270127c99de","timestamp":"2023-09-15 15:57:39"}
...

2. Mettez à jour le client qui écrit dans BigQuery pour vous abonner à Pub/Sub. Dans l'exemple kafka-to-pubsub-demo src, SimplePubsubscriber1 est mis à jour pour lire les données du sujet Pub/Sub.

Créer un abonnement Pub/Sub

export SUBSCRIPTION_ID="sub2"
gcloud pubsub subscriptions create $SUBSCRIPTION_ID
--topic=$TOPIC

Exécuter l'application d'abonné mise à jour

cd kafka-to-pubsub-demo
mvn
exec:java \
 
-Dexec.mainClass="org.pubsub.SimplePubsubSubscriber2" \
 
-Dexec.args="$PROJECT_ID $SUBSCRIPTION_ID $DATASET_ID $TABLE_ID"

Les journaux de sortie doivent ressembler à ceci :

...
Message inserted to BigQuery successfully.
Message inserted to BigQuery successfully.
...

Phase 3

Mettre à jour vos producteurs pour publier directement dans Pub/Sub

  1. Mettez à jour l'attribut "src" du producteur Kafka pour qu'il écrive dans Pub/Sub au lieu de Kafka. Dans l'exemple de code src kafka-to-pubsub-demo, SimplePubsubPublisher est mis à jour de manière à envoyer des messages au sujet Pub/Sub.
  2. Arrêtez le connecteur. Pour arrêter le connecteur, arrêtez le connecteur en cours d'exécution dans la session de terminal kafka-connect.
  3. Exécuter l'application d'éditeur mise à jour
cd kafka-to-pubsub-demo
mvn
exec:java \
 
-Dexec.mainClass="org.pubsub.SimplePubsubPublisher" \
 
-Dexec.args="$PROJECT_ID $TOPIC"

6. Félicitations

Félicitations ! Vous avez terminé l'atelier de programmation sur la migration des applications Kafka autogérées vers Pub/Sub.

Voici quelques liens pour en savoir plus