1. Pengantar
Codelab ini adalah panduan langkah demi langkah untuk menunjukkan migrasi aplikasi dari Apache Kafka ke Google Cloud Pubsub menggunakan pendekatan Migrasi Bertahap.
Anda dapat mempelajari lebih lanjut perbedaan antara Kafka dan Pubsub serta pendekatan Migrasi Bertahap di sini.
Yang akan Anda build
Dalam demo ini, Anda akan:
- Menyiapkan cluster Kafka yang dikelola sendiri di GCE
- Men-deploy aplikasi Kafka sederhana yang melakukan streaming string acak
- Menyiapkan Pub/Sub
- Bermigrasi dari Kafka ke Pubsub menggunakan Pub/Sub Kafka Connector
Yang akan Anda pelajari
- Cara menyiapkan cluster kafka yang dikelola sendiri di GCE
- Cara memigrasikan aplikasi Kafka ke aplikasi Pub/Sub
Yang Anda butuhkan
- Mengakses Google Cloud Platform (dengan izin tulis untuk BigQuery &Pub/Sub).
- gcloud CLI sudah diinstal.
- Java 8+ terinstal.
Biaya
Dalam dokumen ini, Anda akan menggunakan produk/layanan yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan, gunakan kalkulator harga.
2. Menyiapkan Kafka
Dalam codelab ini, kita akan memulai Kafka menggunakan ZooKeeper. Lingkungan lokal Anda harus telah menginstal Java 8+.
1. Menginstal Kafka
Download Kafka dan ekstrak. Rekomendasikan download biner untuk mengikuti:
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. Mulai penjaga kebun binatang
bin/zookeeper-server-start.sh config/zookeeper.properties
3. Mulai perantara
Untuk memulai layanan broker Kafka, buka sesi terminal lainnya dan jalankan:
bin/kafka-server-start.sh config/server.properties
4. Membuat topik kafka
Buat topik Kafka untuk aplikasi Kafka, buka sesi terminal baru, lalu jalankan:
export TOPIC= "my-topic"
bin/kafka-topics.sh --create --topic $TOPIC --bootstrap-server localhost:9092
5. Konfirmasi pembuatan topik
bin/kafka-topics.sh --describe --topic $TOPIC --bootstrap-server localhost:9092
Output dari cmd di atas akan terlihat seperti di bawah ini:
Topic: my-topic TopicId: gf4ena9rSmyQXMTDj1bBmQ PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: my-topic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
3. Membuat Aplikasi Kafka
Dalam codelab ini, kita akan membuat aplikasi java kafka yang memiliki 1 produsen dan 2 konsumen. Produser secara berkala mengirimkan string acak dan stempel waktu ke topik kafka.
Untuk menunjukkan Migrasi bertahap, kita akan membuat 2 konsumen untuk aplikasi ini.
- Konsumen 1 - Mencetak pesan yang sudah dibaca
- Konsumen 2 - Menulis pesan ke BigQuery
Buka terminal baru dan jalankan perintah berikut. Jangan jalankan perintah ini di direktori download Kafka
1. Menetapkan Variabel Konstan
export PROJECT_ID="<your project id>"
export DATASET_ID="<dataset name>"
export TABLE_ID="<table name>"
export TOPIC="my-topic"
2. Mendownload src aplikasi Kafka
git clone https://github.com/itodotimothy6/kafka-to-pubsub-demo.git
cd kafka-to-pubsub-demo
3. Mengonfigurasi dan mengautentikasi gcloud
gcloud config set project $PROJECT_ID
gcloud auth application-default login
gcloud services enable bigquery.googleapis.com
4. Membuat tabel BigQuery
Tabel ini digunakan oleh konsumen kedua untuk menulis {i>output<i}. Definisi skema tabel adalah "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. Jalankan produser untuk mulai mengirim pesan ke topik
mvn clean install
mvn exec:java \
-Dexec.mainClass="org.kafka.SimpleKafkaProducer" \
-Dexec.args="$TOPIC"
Log output akan terlihat seperti ini:
...
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. Menjalankan konsumen pertama yang logout dari pesan dalam topik ke konsol
mvn clean install
mvn exec:java \
-Dexec.mainClass="org.kafka.SimpleKafkaConsumer1" \
-Dexec.args="$TOPIC"
Log output akan terlihat seperti ini:
...
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. Menjalankan konsumen kedua yang menulis pesan dari topik kafka ke tabel BigQuery
mvn clean install
mvn exec:java \
-Dexec.mainClass="org.kafka.SimpleKafkaConsumer2" \
-Dexec.args="$TOPIC $PROJECT_ID $DATASET_ID $TABLE_ID"
Log output akan terlihat seperti ini:
...
Message inserted to BigQuery successfully.
Message inserted to BigQuery successfully.
...
8. Mengonfirmasi bahwa pesan berhasil ditulis ke BigQuery di konsol GCP
4. Menyiapkan Pub/Sub
1. Aktifkan Pub/Sub
gcloud services enable pubsub.googleapis.com
2. Membuat Topik Pub/Sub
Topik ini pada akhirnya akan menggantikan topik kafka. Untuk mempermudah, kita dapat menggunakan nama yang sama dengan topik kafka
export TOPIC = "my-topic"
gcloud pubsub topics create $TOPIC
5. Migrasi Bertahap
Setelah menyiapkan aplikasi Kafka dan memiliki topik Pub/Sub untuk migrasi, kami akan melanjutkan proses migrasi dari Kafka ke Pub/Sub.
Dalam demo migrasi ini, kami akan menggunakan Pub/Sub Kafka Connector milik Google Cloud Pub/Sub Group, yang memungkinkan Anda memigrasikan infrastruktur kafka secara bertahap.
Fase 1
Konfigurasikan konektor Pub/Sub untuk meneruskan semua pesan dari topik Kafka ke topik Pub/Sub
1. Dapatkan jar konektor kafka-to-pubsub dengan membuat repositori konektor
git clone https://github.com/googleapis/java-pubsub-group-kafka-connector
cd java-pubsub-group-kafka-connector/
mvn clean package -DskipTests=True
Anda akan melihat stoples yang dihasilkan di target/pubsub-group-kafka-connector-${VERSION}.jar
jika berhasil.
Buat variabel dengan jalur lengkap ke jar.
export KAFKA_CONNECT_JAR="path/to/target/pubsub-group-kafka-connector-${VERSION}.jar"
2. Mengupdate konfigurasi Kafka yang terinstal dengan konfigurasi Kafka Connect
Mengubah direktori ke folder download kafka Anda dari file sebelumnya
cd kafka_2.13-3.5.1
Buka /config/connect-standalone.properties
di folder download Kafka dan tambahkan jalur file dari jar konektor yang didownload ke plugin.path dan hapus tanda komentar pada baris jika diperlukan. Atau, Anda dapat menjalankan cmd di bawah
echo "plugin.path=$KAFKA_CONNECT_JAR" >> config/connect-standalone.properties
3. Buat CloudPubSubSinkConnector
file konfigurasi dengan topik kafka, project pubsub, dan topik pubsub yang diperlukan untuk migrasi. Lihat contoh CloudPubSubSinkConnector
file konfigurasi di sini.
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. Mulai konektor untuk mulai meneruskan pesan dari topik Kafka ke Pub/Sub
bin/connect-standalone.sh \
config/connect-standalone.properties \
config/cps-sink-connector.properties
Pastikan di konsol GCP bahwa pesan diteruskan ke topik Pub/Sub Anda
Fase 2
Update aplikasi konsumen untuk menerima pesan dari topik Pub/Sub, sementara produser Anda terus memublikasikan pesan ke Kafka
1. Mengupdate konsumen yang mencetak pesan ke konsol untuk berlangganan Pub/Sub. Dalam contoh kafka-to-pubsub-demo
src, SimplePubsubscriber1
diperbarui untuk membaca dari topik Pubsub.
Membuat langganan Pub/Sub
export SUBSCRIPTION_ID="sub1"
gcloud pubsub subscriptions create $SUBSCRIPTION_ID --topic=$TOPIC
Menjalankan aplikasi pelanggan yang diupdate
cd kafka-to-pubsub-demo
mvn exec:java \
-Dexec.mainClass="org.pubsub.SimplePubsubSubscriber1" \
-Dexec.args="$PROJECT_ID $SUBSCRIPTION_ID"
Log output akan terlihat mirip dengan
...
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. Mengupdate konsumen yang melakukan operasi tulis ke BigQuery untuk berlangganan Pub/Sub. Dalam contoh kafka-to-pubsub-demo
src, SimplePubsubscriber1
diperbarui untuk membaca dari topik Pubsub.
Membuat langganan Pub/Sub
export SUBSCRIPTION_ID="sub2"
gcloud pubsub subscriptions create $SUBSCRIPTION_ID --topic=$TOPIC
Menjalankan aplikasi pelanggan yang diupdate
cd kafka-to-pubsub-demo
mvn exec:java \
-Dexec.mainClass="org.pubsub.SimplePubsubSubscriber2" \
-Dexec.args="$PROJECT_ID $SUBSCRIPTION_ID $DATASET_ID $TABLE_ID"
Log output akan terlihat mirip dengan
...
Message inserted to BigQuery successfully.
Message inserted to BigQuery successfully.
...
Fase 3
Mengupdate produser untuk langsung memublikasikan ke Pub/Sub
- Memperbarui produser Kafka src untuk menulis ke Pub/Sub, bukan ke Kafka. Pada contoh
kafka-to-pubsub-demo
src,SimplePubsubPublisher
diupdate untuk mengirim pesan ke topik Pubsub. - Hentikan konektor. Anda dapat menghentikan konektor dengan menghentikan konektor yang berjalan dalam sesi terminal kafka-connect
- Menjalankan aplikasi penayang yang diupdate
cd kafka-to-pubsub-demo
mvn exec:java \
-Dexec.mainClass="org.pubsub.SimplePubsubPublisher" \
-Dexec.args="$PROJECT_ID $TOPIC"
6. Selamat
Selamat, Anda berhasil menyelesaikan codelab tentang memigrasikan aplikasi Kafka yang dikelola sendiri ke Pub/Sub.
Berikut beberapa link untuk informasi lebih lanjut