Bermigrasi dari Pub/Sub Lite ke Apache Kafka untuk BigQuery

Dokumen ini menjelaskan cara memigrasikan data dari topik Pub/Sub Lite ke topik Apache Kafka for BigQuery.

Sebelum memulai

  1. Aktifkan Google Kubernetes Engine API.
  2. Mengidentifikasi topik Pub/Sub Lite yang akan dimigrasikan. Tentukan nama topik target di Apache Kafka untuk BigQuery. Tentukan juga Apache Kafka untuk Cluster BigQuery yang menjadi tujuan migrasi Anda.

Alur kerja migrasi

Untuk memigrasikan data, Anda harus menyelesaikan tugas-tugas berikut. Detail spesifik dari tugas-tugas ini akan ditampilkan nanti di halaman ini.

  1. Membuat akun layanan Google Kubernetes Engine.
  2. Membuat cluster Google Kubernetes Engine.
  3. Sesuaikan image Docker dengan detail konfigurasi topik Anda.
  4. Men-deploy image docker ke cluster Google Kubernetes Engine.

    Di dalam gambar, Kafka Connect dan plugin Pub/Sub Lite untuk Kafka Connect digunakan untuk berlangganan langganan Pub/Sub Lite baru, dan memublikasikan ke Apache Kafka untuk BigQuery.

Membuat akun layanan Google Kubernetes Engine

Bagian ini menjelaskan cara membuat akun layanan IAM yang memiliki izin yang diperlukan untuk menjalankan cluster Google Kubernetes Engine.

  1. Di Konsol Google Cloud, Buat akun layanan IAM baru dengan izin minimum yang diperlukan untuk mengoperasikan Google Kubernetes Engine.

  2. Berikan peran IAM tambahan berikut ke akun layanan. Peran ini memfasilitasi proses migrasi.

    • Peran Klien Kafka Terkelola (roles/managedkafka.client)
    • Peran Pelanggan Pub/Sub Lite (roles/pubsublite.subscriber)
    • Peran Viewer Pub/Sub Lite (roles/pubsublite.Viewer)
    • Peran Pembaca Artifact Registry (roles/artifactregistry.reader)

Membuat cluster GKE

Bagian ini menjelaskan cara membuat cluster GKE yang menggunakan akun layanan yang Anda buat dari langkah sebelumnya.

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Create.

    Halaman Create an Autopilot cluster akan muncul.

  3. Pada tab Setelan Lanjutan, ubah akun layanan ke akun layanan IAM yang Anda buat di langkah sebelumnya.

  4. Anda juga dapat mengonfigurasi setelan lainnya sesuai kebutuhan.

  5. Untuk membuat cluster, klik Create.

Membuat gambar Docker Kafka Connect

Bagian ini menjelaskan cara membuat dan menyesuaikan image Docker Kafka Connect untuk topik Anda.

  1. Buat clone repositori GitHub migrasi Pub/Sub Lite.
  2. Untuk akun layanan IAM yang Anda buat sebelumnya, buat kunci akun json.

    Gunakan alat base64 untuk mengenkode kunci json. Misalnya,

    Linux

    base64 -w 0 < my_service_account.json > password.txt
    

    Mac

    base64 < account_key_json > password.txt
    
  3. Dalam file secret di repositori GitHub, perbarui file berikut dengan informasi yang sesuai untuk menautkan repositori ke project Google Cloud, Pub/Sub Lite, dan Kafka Anda.

    .gcp/gmk_sasl_service_account → sensitive
    <service-account-name>@<gcp-project>.iam.gserviceaccount.com
    
    .gcp/gmk_sasl_service_account_key → sensitive
    <base64 encoded sasl service account key>
    
    .gcp/kafka_ssl_truststore_location → sensitive
    <full path of the ssl truststore jks file location>
    
    .gcp/kafka_ssl_truststore_password → sensitive
    <password for the ssl truststore jks>
    
    .gcp/gmk_bootstrap_servers → environment specific
    bootstrap.<google-managed-kafka-cluster-name>.<google-managed-kafka-cluster-region name>.managedkafka.<google-managed-cluster-host-project-name>.cloud.goog:9092
    
    .gcp/kafka_connect_group_id → environment specific
    <Kafka Connect group id (unique per worker group) for the Kafka connect workers in distributed mode>
    
    .gcp/kafka_config_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the config>
    
    .gcp/kafka_offset_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the offsets>
    
    .gcp/kafka_status_storage_topic → environment specific
    <Kafka topic name used by Kafka Connect for tracking the status>
    
    .gcp/kafka_sink_topic → environment specific
    <target sink Kafka topic name used by Kafka Connect for migrating the data from the Pub/Sub Lite topic>
    
    .gcp/pubsub_lite_gcp_project → environment specific
    <Google Cloud project that hosts the Pub/Sub Lite source subscription to be used for migrating the Pub/Sub Lite topic to sink the Kafka topic>
    
    .gcp/pubsub_lite_gcp_location → environment specific
    <Google Cloud location for the Pub/Sub Lite source subscription tor migrate the Pub/Sub Lite topic to sink Kafka topic>
    
    .gcp/pubsub_lite_subscription → environment specific
    <Pub/Sub Lite source subscription name to be used for migrating the pubsub lite topic to Kafka topic>
    
  4. Bangun image Docker dengan menjalankan file docker/build-image.sh.

    ./push-image.sh
    
  5. Perbarui image docker/push-image.sh dengan nama project Google Cloud Anda.

  6. Kirim image ke Artifact Registry dengan menjalankan file docker/push-image.sh.

    ./push-image.sh
    

Men-deploy Workload Kafka Connect

Bagian ini menjelaskan cara men-deploy image Docker Kafka Connect ke cluster Google Kubernetes Engine.

  1. Instal dan konfigurasikan kubectl dengan plugin autentikasi.
  2. Buat kubeconfig untuk cluster Google Kubernetes Engine Anda.
  3. Membuat dan memberi akun layanan Google Kubernetes Engine dengan izin yang benar untuk meniru identitas akun IAM Anda.

    $KSA_NAME = KUBERNETES_SERVICE_ACCOUNT_NAME
    $PROJECT_ID = GOOGLE_CLOUD_PROJECT_ID
    $IAM_SA_NAME = IAM_SERVICE_ACCOUNT_NAME
    
    kubectl create serviceaccount $KSA_NAME \
        --namespace=default
    
    gcloud iam service-accounts add-iam-policy-binding \
    $IAM_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/$KSA_NAME]"
    
    kubectl annotate serviceaccount $KSA_NAME \
        --namespace default \
    iam.gke.io/gcp-service-account=$IAM_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  4. Buka file K8s.yaml di editor teks dan perbarui nilai berikut.

    1. Ganti <workflow_name> dengan nama untuk alur kerja Kafka Connect Anda.
    2. Ganti <gke_service_account> dengan nama akun layanan Google Kubernetes Engine.
  5. Jalankan file K8s.yaml.

    kubectl create -f k8s.yaml
    

    Tindakan ini akan membuat workload Kafka Connect yang berjalan di cluster Google Kubernetes Engine dan meluncurkan konektor Pub/Sub Lite untuk memindahkan data dari topik Pub/Sub Lite ke Apache Kafka untuk BigQuery.

Memantau tugas

Setelah tugas berjalan, Anda dapat memeriksanya dengan menghubungkannya ke endpoint REST Kafka Connect.

  1. Di konsol Google Cloud, buka Halaman detail deployment > Workload.
  2. Klik deployment Kubernetes Anda.

    Halaman detail deployment akan terbuka.

  3. Di bagian Mengekspos layanan, klik Ekspos, lalu tambahkan port 8083.

  4. Aktifkan penerusan port.

    Link default yang Anda dapatkan saat menyiapkan penerusan port menampilkan output yang mirip dengan berikut ini:

    {"version":"3.4.0","commit":"2e1947d240607d53","kafka_cluster_id":"6H6qWA0dQnuK31hBPqYUDg"}
    

    Jika Anda menambahkan /connectors ke link, konektor yang berjalan akan tercantum, Misalnya:

    ["PubSubLiteSourceConnector"]
    

    Misalnya, memeriksa link ini url:8083/connectors/PubSubLiteSourceConnector/status akan menghasilkan daftar tugas, dan statusnya.

    {"name":"PubSubLiteSourceConnector","connector":{"state":"RUNNING","worker_id":"10.53.0.157:8083"},"tasks":[{"id":0,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":1,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":2,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":3,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":4,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":5,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":6,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":7,"state":"RUNNING","worker_id":"10.53.0.157:8083"},{"id":8,"state":"RUNNING","worker_id":"10.53.0.139:8083"},{"id":9,"state":"RUNNING","worker_id":"10.53.0.157:8083"}],"type":"source"}
    

Migrasi Bertahap

Setelah topik Pub/Sub Lite dimigrasikan ke Kafka, Anda dapat memigrasikan pelanggan dan penerbit. Untuk melakukannya, ikuti langkah-langkah berikut.

  1. Memigrasikan subscriber. Memberi tahu pelanggan Anda untuk memahami topik Kafka, bukan topik Pub/Sub Lite.

    Hal ini harus dilakukan secara bertahap dalam lingkungan pengembangan yang terkontrol.

    Idealnya, Anda harus mempertahankan dua set pelanggan untuk memastikan bahwa pesan yang identik diterima dari Kafka dan Pub/Sub Lite. Setelah perilaku yang benar diverifikasi, Anda dapat menghentikan pelanggan Pub/Sub Lite Anda.

  2. Memigrasikan Penayang. Memperbarui penayang untuk langsung memublikasikan ke topik Kafka, bukan topik Pub/Sub Lite.

    Seperti halnya migrasi pelanggan, hal ini harus dilakukan secara bertahap dalam lingkungan pengembangan yang terkontrol. Jika data duplikat tidak menjadi masalah, Anda dapat mempertahankan dua kumpulan penayang untuk memverifikasi perilakunya. Setelah Anda memverifikasi perilaku tersebut, nonaktifkan penerbit Pub/Sub Lite Anda.

  3. Setelah semua pelanggan dan penayang dimigrasikan, nonaktifkan alat migrasi dengan menghapus workload dan cluster.

  4. Hapus topik Pub/Sub Lite asli.

Langkah selanjutnya