Mereplikasi topik Kafka dengan MirrorMaker 2.0

Tutorial ini menunjukkan cara mereplikasi data antar-cluster Managed Service untuk Apache Kafka, dengan menggunakan konektor Sumber MirrorMaker 2.0.

Cluster dapat berada dalam project yang sama atau dalam project yang berbeda, dan dapat berada di region yang sama atau region yang berbeda. Untuk tutorial ini, Anda akan menyiapkan replikasi di seluruh region, tetapi dalam project yang sama. Namun, langkah-langkahnya sama untuk kombinasi lainnya.

Arsitektur

Untuk skenario ini, ada tiga cluster:

  • Cluster Kafka yang datanya direplikasi. Cluster ini disebut cluster sumber, karena merupakan sumber data.

  • Cluster Kafka tempat data yang direplikasi ditulis. Cluster ini disebut target cluster.

  • Connect cluster, yang memungkinkan Anda membuat dan mengelola konektor Sumber MirrorMaker 2.0.

Cluster Connect dilampirkan ke cluster target. Untuk meminimalkan latensi operasi tulis, tempatkan cluster Connect di region yang sama dengan cluster target.

Diagram berikut menunjukkan komponen ini:

Arsitektur skenario replikasi data Kafka

Replikasi data dilakukan oleh konektor Sumber MirrorMaker 2.0. Dua konektor MirrorMaker 2.0 lainnya bersifat opsional untuk skenario ini:

  • Konektor Checkpoint MirrorMaker 2.0: Memungkinkan failover yang lancar, dengan memastikan bahwa konsumen di cluster target dapat melanjutkan pemrosesan dari titik yang sama dengan cluster sumber.

  • Konektor Detak Jantung MirrorMaker 2.0: Membuat pesan detak jantung berkala di cluster Kafka sumber, yang memungkinkan Anda memantau kondisi dan status replikasi data.

Tutorial ini tidak menggunakan konektor opsional ini. Untuk mengetahui informasi selengkapnya, lihat Kapan harus menggunakan MirrorMaker 2.0.

Sebelum memulai

Konsol

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  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. Pastikan Anda memiliki peran berikut di project: Managed Kafka Cluster Editor, Managed Kafka Connect Cluster Editor, Managed Kafka Connector Editor

    Memeriksa peran

    1. Di konsol Google Cloud , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Akun utama, temukan semua baris yang mengidentifikasi Anda atau grup yang Anda termasuk di dalamnya. Untuk mengetahui grup mana saja yang Anda ikuti, hubungi administrator Anda.

    4. Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Grant access.
    4. Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah alamat email untuk Akun Google.

    5. Klik Pilih peran, lalu telusuri peran.
    6. Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
    7. Klik Simpan.

gcloud

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan Managed Kafka API, jika belum diaktifkan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable managedkafka.googleapis.com
  8. Instal Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  13. Aktifkan Managed Kafka API, jika belum diaktifkan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable managedkafka.googleapis.com
  14. Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/managedkafka.clusterEditor, roles/managedkafka.connectClusterEditor, roles/managedkafka.connectorEditor

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

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.

Buat cluster Kafka sumber

Pada langkah ini, Anda akan membuat cluster Managed Service untuk Apache Kafka. Cluster ini adalah cluster sumber, yang berisi data untuk direplikasi.

Konsol

  1. Buka halaman Managed Service untuk Apache Kafka > Clusters.

    Buka Cluster

  2. Klik Create.

  3. Di kotak Nama cluster, masukkan nama untuk cluster.

  4. Dalam daftar Region, pilih lokasi untuk cluster.

  5. Untuk Network configuration, konfigurasikan subnet tempat cluster dapat diakses.

    1. Untuk Project, pilih project Anda.
    2. Untuk Network, pilih jaringan VPC di project Anda.
    3. Untuk Subnet, pilih subnet.
    4. Klik Done.
  6. Klik Create.

Saat cluster sedang dibuat, status cluster adalah Creating. Setelah cluster selesai dibuat, statusnya adalah Active.

gcloud

Untuk membuat cluster Kafka sumber, jalankan perintah 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

Ganti kode berikut:

  • SOURCE_KAFKA_CLUSTER: nama untuk cluster Kafka
  • SOURCE_REGION: lokasi cluster

    Untuk mengetahui informasi tentang lokasi yang didukung, lihat Lokasi Managed Service untuk Apache Kafka.

  • PROJECT_ID: project ID Anda

  • SOURCE_SUBNET: subnet tempat Anda ingin men-deploy cluster; misalnya, default

Perintah berjalan secara asinkron dan menampilkan ID operasi:

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

Untuk melacak progres operasi pembuatan, gunakan perintah gcloud managed-kafka operations describe:

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

Untuk mengetahui informasi selengkapnya, lihat Memantau operasi pembuatan cluster.

Membuat topik Kafka

Setelah cluster sumber siap, buat topik sebagai berikut:

Konsol

  1. Buka halaman Managed Service untuk Apache Kafka > Clusters.

    Buka Cluster

  2. Klik nama cluster.

  3. Di halaman detail cluster, klik Create Topic.

  4. Di kotak Topic name, masukkan nama untuk topik.

  5. Klik Create.

gcloud

Untuk membuat topik Kafka, jalankan perintah managed-kafka topics create.

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

Ganti kode berikut:

  • TOPIC_NAME: nama topik Kafka yang akan dibuat
  • SOURCE_KAFKA_CLUSTER: nama cluster sumber
  • SOURCE_REGION: region tempat Anda membuat cluster sumber

Buat cluster Kafka target

Pada langkah ini, Anda akan membuat cluster Managed Service untuk Apache Kafka kedua. Cluster ini adalah target cluster, tempat MirrorMaker 2.0 mereplikasi data.

Konsol

  1. Buka halaman Managed Service untuk Apache Kafka > Clusters.

    Buka Cluster

  2. Klik Create.

  3. Di kotak Nama cluster, masukkan nama untuk cluster.

  4. Dalam daftar Region, pilih lokasi untuk cluster. Pilih region yang berbeda dengan tempat cluster sumber berada.

  5. Untuk Konfigurasi jaringan, konfigurasi subnet tempat cluster target dapat diakses. Subnet harus berada di jaringan VPC yang sama dengan subnet cluster sumber.

    1. Untuk Project, pilih project Anda.
    2. Untuk Jaringan, pilih jaringan VPC yang sama dengan subnet cluster sumber.
    3. Untuk Subnet, pilih subnet.
    4. Klik Done.
  6. Klik Create.

Saat cluster sedang dibuat, status cluster adalah Creating. Setelah cluster selesai dibuat, statusnya adalah Active.

gcloud

Untuk membuat cluster Kafka target, jalankan perintah 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

Ganti kode berikut:

  • TARGET_KAFKA_CLUSTER: nama untuk cluster Kafka
  • TARGET_REGION: lokasi cluster; pilih region yang berbeda dari lokasi cluster sumber.

    Untuk mengetahui informasi tentang lokasi yang didukung, lihat Lokasi Managed Service untuk Apache Kafka.

  • PROJECT_ID: project ID Anda

  • TARGET_SUBNET: subnet tempat Anda ingin men-deploy cluster; misalnya, default

    Pilih subnet di VPC yang sama dengan cluster sumber.

Membuat cluster Connect

Pada langkah ini, Anda akan membuat cluster Connect. Membuat cluster Connect biasanya memerlukan waktu 20-30 menit.

Sebelum memulai langkah ini, pastikan cluster Kafka target dari langkah sebelumnya telah dibuat sepenuhnya.

Konsol

  1. Buka halaman Managed Service untuk Apache Kafka > Connect Clusters.

    Buka Connect Clusters

  2. Klik Create.

  3. Untuk Connect cluster name, masukkan string. Contoh: my-connect-cluster.

  4. Untuk Primary Kafka cluster, pilih cluster Kafka target yang Anda buat pada langkah sebelumnya. (Jangan pilih cluster Kafka sumber Anda.)

  5. Untuk Location, Network configuration, dan Worker subnet, Anda dapat menggunakan nilai default, atau menyesuaikannya dengan persyaratan spesifik Anda.

  6. Untuk mengizinkan cluster Connect menyelesaikan domain DNS cluster sumber, lakukan langkah-langkah berikut:

    1. Luaskan Resolvable DNS domains.

    2. Klik Tambahkan domain DNS.

    3. Dalam daftar Kafka cluster, pilih cluster Kafka sumber.

  7. Klik Create.

Saat cluster sedang dibuat, status cluster adalah Creating. Setelah cluster selesai dibuat, statusnya adalah Active.

gcloud

Untuk membuat cluster Connect, jalankan perintah 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

Ganti kode berikut:

  • CONNECT_CLUSTER: nama untuk cluster Connect
  • TARGET_REGION: region tempat Anda membuat cluster Kafka target
  • PROJECT_ID: project ID Anda
  • TARGET_SUBNET: subnet tempat Anda membuat cluster Kafka target
  • TARGET_KAFKA_CLUSTER: nama cluster Kafka target
  • SOURCE_KAFKA_CLUSTER: nama cluster Kafka sumber
  • SOURCE_REGION: region tempat Anda membuat cluster Kafka sumber

Perintah berjalan secara asinkron dan menampilkan ID operasi:

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

Untuk melacak progres operasi pembuatan, gunakan perintah gcloud managed-kafka operations describe:

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

Untuk mengetahui informasi selengkapnya, lihat Memantau operasi pembuatan cluster.

Membuat konektor Sumber MirrorMaker 2.0

Pada langkah ini, Anda akan membuat konektor Sumber MirrorMaker 2.0. Konektor ini mereplikasi pesan dari cluster Kafka sumber ke cluster Kafka target.

Konsol

  1. Buka halaman Managed Service untuk Apache Kafka > Connect Clusters.

    Buka Connect Clusters

  2. Klik nama cluster Connect.

  3. Klik Buat konektor.

  4. Untuk Nama konektor, masukkan string. Contoh: mm2-connector.

  5. Di daftar Plugin konektor, pilih MirrorMaker 2.0 Source.

  6. Untuk Source cluster, pilih Managed Service untuk Apache Kafka Cluster.

  7. Di daftar Kafka cluster, pilih cluster sumber Anda.

  8. Di kotak Nama topik yang dipisahkan koma atau regex topik, masukkan nama topik Kafka yang ingin Anda replikasi.

  9. Klik Create.

gcloud

  1. Jalankan perintah gcloud managed-kafka clusters describe untuk mendapatkan alamat bootstrap dari cluster Kafka sumber.

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

    Ganti kode berikut:

    • SOURCE_KAFKA_CLUSTER: nama cluster Kafka sumber
    • SOURCE_REGION: region cluster sumber
    • PROJECT_ID: project ID Anda
  2. Jalankan kembali perintah sebelumnya untuk mendapatkan alamat bootstrap cluster Kafka target.

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

    Ganti kode berikut:

    • TARGET_KAFKA_CLUSTER: nama cluster Kafka target
    • TARGET_REGION: region cluster target
  3. Untuk membuat konektor Sumber MirrorMaker 2.0, jalankan perintah 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
    

    Ganti kode berikut:

    • CONNECTOR_NAME: nama untuk konektor, seperti mm2-connector
    • CONNECT_CLUSTER: nama cluster Connect Anda
    • SOURCE_CLUSTER_BOOTSTRAP_ADDRESS: alamat bootstrap cluster sumber, dari langkah 1.
    • TARGET_CLUSTER_BOOTSTRAP_ADDRESS: alamat bootstrap cluster target, dari langkah 2.
    • TOPIC_NAME: nama topik yang akan direplikasi. Parameter ini juga dapat menentukan daftar nama topik yang dipisahkan koma atau ekspresi reguler.

Konektor Sumber MirrorMaker 2.0 membuat topik baru di cluster target bernama "source.TOPIC_NAME", dengan TOPIC_NAME adalah nama topik di cluster sumber.

Melihat hasilnya

Untuk memverifikasi bahwa pesan direplikasi, Anda dapat menggunakan alat command line Kafka. Untuk mengetahui informasi tentang cara menyiapkan Kafka CLI, lihat Menyiapkan mesin klien dalam dokumen Membuat dan menggunakan pesan dengan CLI.

Misalnya, untuk mengirim pesan ke cluster sumber, masukkan perintah berikut di command line:

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

Untuk membaca pesan duplikat dari cluster target, masukkan perintah berikut di command line:

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

Outputnya akan terlihat seperti berikut:

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

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Konsol

  1. Hapus cluster Connect.

    1. Buka halaman Managed Service untuk Apache Kafka > Connect Clusters.

      Buka Connect Clusters

    2. Pilih cluster Connect, lalu klik Delete.

  2. Hapus cluster Kafka sumber.

    1. Buka halaman Managed Service untuk Apache Kafka > Clusters.

      Buka Cluster

    2. Pilih cluster Kafka, lalu klik Delete.

  3. Ulangi langkah sebelumnya untuk menghapus cluster Kafka target.

gcloud

  1. Untuk menghapus cluster Connect, gunakan perintah gcloud managed-kafka connect-clusters delete.

    gcloud managed-kafka connect-clusters delete CONNECT_CLUSTER \
      --location=TARGET_REGION --async
    
  2. Untuk menghapus cluster Kafka sumber, gunakan perintah gcloud managed-kafka clusters delete.

    gcloud managed-kafka clusters delete SOURCE_KAFKA_CLUSTER \
      --location=SOURCE_REGION --async
    
  3. Ulangi langkah sebelumnya untuk menghapus cluster Kafka target.

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

Langkah berikutnya