Tutorial ini menunjukkan cara mengonfigurasi dan men-deploy penskala otomatis Kafka sebagai layanan Cloud Run. Autoscaler ini melakukan logika penskalaan untuk beban kerja konsumen Kafka, seperti deployment kumpulan pekerja Cloud Run. Penskala otomatis Kafka membaca metrik dari cluster Kafka Anda, dan menggunakan penskalaan manual untuk pool worker atau layanan Cloud Run untuk menskalakan beban kerja konsumen Kafka berdasarkan metrik jeda konsumen Kafka.
Diagram berikut menunjukkan cara layanan penskalaan otomatis Kafka membaca metrik dari cluster Kafka untuk menskalakan otomatis kumpulan worker konsumen Kafka.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk men-deploy dan menjalankan layanan ini, minta administrator Anda untuk memberi Anda peran IAM berikut:
- Cloud Run Developer (
roles/run.developer
) - Service Account User (
roles/iam.serviceAccountUser
) - Pembaca Artifact Registry (
roles/artifactregistry.reader
) - Admin Cloud Scheduler
(
roles/cloudscheduler.admin
) untuk membuat tugas Cloud Scheduler guna memicu pemeriksaan penskalaan otomatis - Cloud Tasks Queue Admin
(
roles/cloudtasks.queueAdmin
) untuk membuat antrean Cloud Tasks untuk pemeriksaan penskalaan otomatis - Security Admin
(
roles/iam.securityAdmin
) untuk memberikan izin ke akun layanan
Sebelum memulai
Untuk mengonfigurasi dan menggunakan penskala otomatis Kafka, Anda memerlukan resource berikut.
- Cluster Kafka
- Konsumen yang di-deploy
Cluster Kafka
- Cluster Kafka harus berjalan di Compute Engine, Google Kubernetes Engine, atau Managed Service for Apache Kafka.
- Topik Kafka yang dikonfigurasi, dengan peristiwa yang dipublikasikan ke topik tersebut.
Konsumen Cloud Run yang di-deploy
- Workload konsumen Kafka harus di-deploy ke Cloud Run sebagai layanan atau kumpulan pekerja. Harus dikonfigurasi untuk terhubung ke cluster, topik, dan grup konsumen Kafka Anda. Untuk contoh konsumen Kafka, lihat Cloud Run Kafka Autoscaler Example Consumer.
- Beban kerja konsumen Anda harus berada di Google Cloud project yang sama dengan cluster Kafka Anda.
Praktik terbaik
- Hubungkan konsumen Kafka Anda ke jaringan VPC menggunakan VPC Langsung. VPC Langsung memungkinkan Anda terhubung ke cluster Kafka menggunakan alamat IP pribadi, dan juga memungkinkan Anda mempertahankan traffic di jaringan VPC.
- Konfigurasi pemeriksaan keaktifan untuk konsumen Kafka Anda yang memeriksa apakah konsumen menarik peristiwa atau tidak. Health check membantu memastikan bahwa instance yang tidak responsif akan otomatis dimulai ulang jika berhenti memproses peristiwa, meskipun jika penampung tidak mengalami error.
Membangun penskala otomatis Kafka
Anda dapat menggunakan Cloud Build untuk membangun image container penskala otomatis Kafka dari kode sumbernya.
Meng-cloning repository
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.git
Buka folder repositori:
cd cloud-run-kafka-scaler
Untuk menentukan nama gambar output, perbarui %ARTIFACT_REGISTRY_IMAGE%
dalam file cloudbuild.yaml
yang disertakan, misalnya: us-central1-docker.pkg.dev/my-project/my-repo/my_kafka_autoscaler
.
gcloud builds submit --tag us-central1-docker.pkg.dev/my-project/my-repo/my_kafka_autoscaler
Perintah ini akan membangun image container dan mengirimkannya ke Artifact Registry. Catat jalur gambar lengkap (SCALER_IMAGE_PATH
) karena Anda akan memerlukannya nanti.
Perhatikan bahwa gambar yang dihasilkan tidak akan berjalan secara lokal. Image ini dimaksudkan untuk ditumpuk di atas image dasar Java. Untuk mengetahui informasi selengkapnya, termasuk cara menyusun ulang image container untuk dijalankan secara lokal, lihat Mengonfigurasi pembaruan image dasar otomatis.
Tentukan konfigurasi penskalaan otomatis Kafka
Anda dapat mengonfigurasi penskalaan otomatis Kafka menggunakan secret. Autoscaler memuat ulang konfigurasinya secara berkala, yang berarti Anda dapat mengirimkan versi secret baru untuk mengubah konfigurasi tanpa perlu men-deploy ulang autoscaler.
Mengonfigurasi properti klien Kafka
Anda dapat mengonfigurasi koneksi ke Kafka Admin API dengan memasang secret sebagai volume saat men-deploy penskala otomatis Kafka.
Buat file bernama kafka_client_config.txt
dan sertakan properti
konfigurasi klien Admin
Kafka yang ingin Anda tambahkan. Properti bootstrap.servers
wajib diisi:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Ganti BOOTSTRAP_SERVER_LIST dengan daftar HOST:PORT
untuk cluster Kafka.
Mengonfigurasi autentikasi Kafka
Jika server Kafka Anda memerlukan autentikasi, sertakan properti
konfigurasi yang diperlukan dalam file kafka_client_config.txt
. Misalnya, untuk
terhubung ke cluster Managed Service for Apache Kafka
dengan menggunakan
kredensial default aplikasi
dengan Google OAuth, rahasia ini harus menyertakan properti berikut:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
Ganti BOOTSTRAP_SERVER_LIST dengan daftar HOST:PORT
untuk cluster Kafka.
Penggunaan kredensial default aplikasi dengan cluster Managed Service for Apache Kafka
juga memerlukan pemberian peran Managed Kafka Client
(roles/managedkafka.client
) kepada akun layanan penskalaan otomatis Kafka:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
Ganti kode berikut:
- SCALER_SERVICE_ACCOUNT: nama akun layanan Kafka autoscaler.
- PROJECT_ID: ID project untuk layanan autoscaler Kafka.
Untuk membuat secret, yang akan dipasang sebagai volume saat deployment, gunakan file
kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Ganti ADMIN_CLIENT_SECRET_NAME dengan nama secret autentikasi Kafka.
Mengonfigurasi penskalaan
Penskala otomatis Kafka membaca konfigurasi penskalaannya dari volume /scaler-config/scaling
. Isi volume ini harus diformat sebagai YAML. Sebaiknya pasang volume rahasia untuk konfigurasi ini.
Buat file bernama scaling_config.yaml
dengan konfigurasi berikut:
spec: scaleTargetRef: name: projects/PROJECT_ID/locations/REGION/workerpools/CONSUMER_SERVICE_NAME metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: TARGET_CPU_UTILIZATION activationThreshold: CPU_ACTIVATION_THRESHOLD tolerance: CPU_TOLERANCE windowSeconds: CPU_METRIC_WINDOW - type: External external: metric: name: consumer_lag target: type: AverageValue averageValue: LAG_THRESHOLD activationThreshold: LAG_ACTIVATION_THRESHOLD tolerance: LAG_TOLERANCE
Ganti kode berikut:
- PROJECT_ID: project ID workload konsumen Kafka yang akan di-autoscaling.
- REGION: region workload konsumen Kafka yang akan di-autoscaling.
- CONSUMER_SERVICE_NAME: nama workload konsumen Kafka yang akan diskalakan otomatis.
- TARGET_CPU_UTILIZATION: target penggunaan CPU untuk perhitungan penskalaan otomatis, misalnya:
60
. - LAG_THRESHOLD: nilai minimum untuk metrik
consumer_lag
guna memicu penskalaan otomatis, misalnya:1000
. - (Opsional) CPU_ACTIVATION_THRESHOLD: nilai minimum aktivasi untuk CPU. Jika semua metrik tidak aktif, konsumen target akan diskalakan menjadi nol. Setelan defaultnya adalah
0
. - (Opsional) CPU_TOLERANCE: nilai minimum yang mencegah perubahan penskalaan jika berada dalam rentang yang ditentukan. Dinyatakan sebagai persentase dari target pemakaian CPU. Setelan defaultnya adalah
0.1
. - (Opsional) CPU_METRIC_WINDOW: jangka waktu, dalam detik, yang digunakan untuk menghitung pemakaian CPU rata-rata. Setelan defaultnya adalah
120
. - (Opsional) LAG_ACTIVATION_THRESHOLD: nilai minimum aktivasi untuk metrik
consumer_lag
. Jika semua metrik tidak aktif, konsumen target akan diskalakan menjadi nol. Setelan defaultnya adalah0
. - (Opsional) LAG_TOLERANCE: nilai minimum yang mencegah perubahan penskalaan jika berada dalam rentang yang ditentukan. Dinyatakan sebagai persentase jeda konsumen target. Setelan defaultnya adalah
0.1
.
Secara opsional, Anda dapat mengonfigurasi properti penskalaan lanjutan menggunakan blok behavior:
.
Blok ini mendukung banyak properti yang sama dengan
kebijakan penskalaan HPA Kubernetes.
Jika Anda tidak menentukan blok behavior
, konfigurasi default berikut akan digunakan:
behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 50 periodSeconds: 30 selectPolicy: Min scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 - type: Instances value: 4 periodSeconds: 15 selectPolicy: Max
Untuk membuat volume secret, yang akan dipasang di deployment,
salin konfigurasi ke dalam file bernama scaling_config.yaml
, lalu
jalankan perintah berikut:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Ganti SCALING_CONFIG_SECRET_NAME dengan nama scaling secret.
Men-deploy penskala otomatis Kafka
Setelah menyelesaikan prasyarat, Anda dapat men-deploy layanan penskalaan otomatis Kafka dan infrastruktur pendukungnya. Modul Terraform dan skrip shell disediakan untuk menyederhanakan proses ini.
gcloud
Bagian ini menjelaskan setiap perintah gcloud yang diperlukan untuk men-deploy penskala otomatis secara manual. Untuk sebagian besar kasus, sebaiknya gunakan skrip shell atau modul Terraform.
Membuat akun layanan
Persyaratan akun layanan bergantung pada interval pemeriksaan penskalaan otomatis yang Anda konfigurasi. Anda dapat mengonfigurasi penskala otomatis Kafka untuk melakukan pemeriksaan penskalaan otomatis pada interval yang fleksibel:
- Satu menit atau lebih: Cloud Scheduler memicu pemeriksaan penskalaan otomatis dengan permintaan POST pada interval yang dipilih.
Kurang dari satu menit: Cloud Scheduler memicu pembuatan beberapa Cloud Tasks setiap menit, berdasarkan frekuensi yang dikonfigurasi.
Satu menit atau lebih
Akun layanan penskala otomatis Kafka
Buat akun layanan untuk penskala otomatis Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Ganti SCALER_SERVICE_ACCOUNT dengan nama akun layanan penskala otomatis Kafka.
Autoscaler Kafka memerlukan izin berikut untuk memperbarui jumlah instance konsumen Kafka:
iam.serviceaccounts.actAs
untuk akun layanan konsumen Kafka.roles/artifactregistry.reader
untuk repositori yang berisi image konsumen Kafka.run.workerpools.get
danrun.workerpools.update
. Izin ini disertakan dalam peran Admin Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
untuk secret autentikasi Kafka dan penskalaan.roles/monitoring.viewer
untuk project konsumen Kafka. Peran ini diperlukan untuk membaca metrik pemanfaatan CPU.roles/monitoring.metricWriter
untuk project konsumen Kafka. Peran ini bersifat opsional, tetapi memungkinkan autoscaler memancarkan metrik kustom untuk kemampuan observasi yang lebih baik.
gcloud iam service-accounts add-iam-policy-binding CONSUMER_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding CONSUMER_IMAGE_REPO \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" \
--location=REPO_REGION
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud secrets add-iam-policy-binding ADMIN_CLIENT_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding SCALING_CONFIG_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.viewer" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter" \
--condition=None
Ganti kode berikut:
- PROJECT_ID: project ID tempat layanan penskala otomatis Kafka berada.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: email akun layanan untuk konsumen Kafka. Contohnya,
example@PROJECT-ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: akun layanan untuk autoscaler Kafka.
- ADMIN_CLIENT_SECRET_NAME: nama secret autentikasi Kafka.
- SCALING_CONFIG_SECRET_NAME: nama secret penskalaan.
- CONSUMER_IMAGE_REPO: ID atau ID yang memenuhi syarat sepenuhnya untuk repositori dengan image container untuk konsumen Kafka.
- REPO_REGION: lokasi repositori image konsumen.
Kurang dari satu menit
Menyiapkan Cloud Tasks
Cloud Scheduler hanya dapat memicu pada interval satu menit atau lebih. Untuk interval yang kurang dari satu menit, gunakan Cloud Tasks untuk memicu penskala otomatis Kafka. Penyiapan Cloud Tasks memerlukan hal berikut:
- Membuat antrean Cloud Tasks untuk tugas pemeriksaan penskalaan otomatis.
- Membuat akun layanan yang digunakan Cloud Tasks untuk memanggil penskala otomatis Kafka dengan peran Cloud Run Invoker.
gcloud tasks queues create CLOUD_TASKS_QUEUE_NAME \
--location=REGION
gcloud iam service-accounts create TASKS_SERVICE_ACCOUNT
gcloud run services add-iam-policy-binding SCALER_SERVICE_NAME \
--member="serviceAccount:TASKS_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Ganti kode berikut:
- CLOUD_TASKS_QUEUE_NAME: antrean Cloud Tasks yang dikonfigurasi untuk memicu pemeriksaan penskalaan otomatis.
- TASKS_SERVICE_ACCOUNT: akun layanan yang harus digunakan Cloud Tasks untuk memicu pemeriksaan penskalaan otomatis.
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- PROJECT_ID: ID project untuk layanan autoscaler Kafka.
- REGION: lokasi layanan autoscaler Kafka.
Menyiapkan akun layanan penskala otomatis Kafka
Buat akun layanan untuk penskala otomatis Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Ganti SCALER_SERVICE_ACCOUNT dengan nama akun layanan penskala otomatis Kafka.
Untuk memperbarui jumlah instance konsumen Kafka, dan membuat tugas untuk pemeriksaan penskalaan otomatis, penskalaan otomatis Kafka memerlukan izin berikut:
iam.serviceaccounts.actAs
untuk akun layanan konsumen Kafka.roles/artifactregistry.reader
untuk repositori yang berisi image konsumen Kafkarun.workerpools.get
danrun.workerpools.update
. Izin ini disertakan dalam peran Admin Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
untuk kedua secret tersebut untuk penskalaan dan autentikasi Kafka.roles/monitoring.viewer
untuk project konsumen Kafka. Peran ini diperlukan untuk membaca metrik pemanfaatan CPU.roles/monitoring.metricWriter
untuk project konsumen Kafka. Peran ini bersifat opsional, tetapi memungkinkan autoscaler memancarkan metrik kustom untuk kemampuan observasi yang lebih baik.- Peran Cloud Tasks Enqueuer (
roles/cloudtasks.enqueuer
).
gcloud iam service-accounts add-iam-policy-binding CONSUMER_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding CONSUMER_IMAGE_REPO \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" \
--location=REPO_REGION
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud secrets add-iam-policy-binding ADMIN_CLIENT_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding SCALING_CONFIG_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.viewer" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter" \
--condition=None
gcloud tasks queues add-iam-policy-binding CLOUD_TASKS_QUEUE_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudtasks.enqueuer" \
--location=REGION
Ganti kode berikut:
- PROJECT_ID: project ID tempat layanan penskala otomatis Kafka berada.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: email akun layanan untuk konsumen Kafka. Contohnya,
example@PROJECT_ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: akun layanan untuk autoscaler Kafka.
- CONSUMER_IMAGE_REPO: ID atau ID yang sepenuhnya memenuhi syarat untuk repositori dengan image container untuk konsumen Kafka.
- ADMIN_CLIENT_SECRET_NAME: nama secret autentikasi Kafka.
- SCALING_CONFIG_SECRET_NAME: nama secret penskalaan.
- REPO_REGION: lokasi repositori image konsumen.
- CLOUD_TASKS_QUEUE_NAME: antrean Cloud Tasks yang dikonfigurasi untuk memicu pemeriksaan penskalaan otomatis.
- REGION: lokasi layanan autoscaler Kafka.
Mengonfigurasi variabel lingkungan
Satu menit atau lebih
Autoscaler Kafka menggunakan variabel lingkungan untuk menentukan konsumen Kafka dan aspek lain dari beban kerja target. Untuk keamanan, sebaiknya konfigurasikan informasi sensitif sebagai secret.
Buat file YAML bernama scaler_env_vars.yaml
dengan variabel berikut:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
Ganti kode berikut:
- KAFKA_TOPIC_ID: ID topik yang menjadi langganan konsumen Kafka.
- CONSUMER_GROUP_ID: ID grup konsumen yang digunakan oleh konsumen Kafka target. Nilai ini harus cocok, atau penskalaan otomatis akan gagal.
- CYCLE_SECONDS: periode siklus penskalaan otomatis, dalam detik.
- OUTPUT_SCALER_METRICS: setelan untuk mengaktifkan metrik. Tetapkan nilai ke
true
untuk mengaktifkan output metrik kustom, atau kefalse
jika tidak.
Kurang dari satu menit
Autoscaler Kafka menggunakan variabel lingkungan untuk menentukan konsumen Kafka dan aspek lain dari beban kerja target. Untuk keamanan, sebaiknya konfigurasikan informasi sensitif sebagai secret.
Buat file YAML bernama scaler_env_vars.yaml
dengan variabel berikut:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS FULLY_QUALIFIED_CLOUD_TASKS_QUEUE_NAME: CLOUD_TASKS_QUEUE_NAME INVOKER_SERVICE_ACCOUNT_EMAIL: TASKS_SERVICE_ACCOUNT_EMAIL
Ganti kode berikut:
- KAFKA_TOPIC_ID: ID topik yang menjadi langganan konsumen Kafka.
- CONSUMER_GROUP_ID: ID grup konsumen yang digunakan oleh konsumen Kafka target. Nilai ini harus cocok, atau penskalaan otomatis akan gagal.
- CYCLE_SECONDS: periode siklus penskalaan otomatis, dalam detik.
- OUTPUT_SCALER_METRICS: setelan untuk mengaktifkan metrik. Tetapkan nilai ke
true
untuk mengaktifkan output metrik kustom, ataufalse
jika tidak. - CLOUD_TASKS_QUEUE_NAME: nama lengkap antrean Cloud Tasks
untuk memicu pemeriksaan penskalaan otomatis. Formatnya adalah sebagai berikut:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL: akun layanan yang harus digunakan Cloud Tasks
untuk memicu pemeriksaan penskalaan otomatis. Contohnya,
example@PROJECT_ID.iam.gserviceaccount.com
.
Deploy penskala otomatis Kafka menggunakan image yang disediakan, dan hubungkan ke VPC Kafka dengan pemasangan volume rahasia dan file scaler_env_vars.yaml
:
gcloud run deploy SCALER_SERVICE_NAME \
--image=SCALER_IMAGE_URI \
--env-vars-file=scaler_env_vars.yaml \
--service-account=SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--network=KAFKA_VPC_NETWORK \
--subnet=KAFKA_VPC_SUBNET \
--update-secrets=/kafka-config/kafka-client-properties=ADMIN_CLIENT_SECRET_NAME:latest \
--update-secrets=/scaler-config/scaling=SCALING_CONFIG_SECRET_NAME:latest
--labels=created-by=kafka-autoscaler
Ganti kode berikut:
- SCALER_IMAGE_URI: URI untuk image autoscaler Kafka.
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- SCALER_SERVICE_ACCOUNT: nama akun layanan Kafka Autoscaler.
- PROJECT_ID: ID project untuk layanan autoscaler Kafka.
- KAFKA_VPC_NETWORK: jaringan VPC yang terhubung ke cluster Kafka.
- KAFKA_VPC_SUBNET: subnet VPC yang terhubung ke cluster Kafka.
- ADMIN_CLIENT_SECRET_NAME: nama secret autentikasi Kafka.
- SCALING_CONFIG_SECRET_NAME: nama secret penskalaan.
Menyiapkan pemeriksaan penskalaan otomatis berkala
Di bagian ini, Anda akan menggunakan Cloud Scheduler untuk memicu pemeriksaan penskalaan otomatis berkala:
- Satu menit atau lebih: Konfigurasi Cloud Scheduler untuk memicu pada interval yang dipilih
- Kurang dari satu menit: Mengonfigurasi Cloud Scheduler untuk memicu setiap menit
Buat akun layanan pemanggil
Untuk mengizinkan Cloud Scheduler memanggil penskala otomatis Kafka, Anda harus membuat akun layanan dengan peran Pemanggil (roles/run.invoker
) di layanan penskala otomatis Kafka:
gcloud iam service-accounts create SCALER_INVOKER_SERVICE_ACCOUNT
gcloud run services add-iam-policy-binding SCALER_SERVICE_NAME \
--member="serviceAccount:SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Ganti kode berikut:
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- SCALER_INVOKER_SERVICE_ACCOUNT: nama akun layanan pemanggil.
- PROJECT_ID: ID project untuk layanan autoscaler Kafka.
Buat tugas Cloud Scheduler
Satu menit atau lebih
Buat tugas Cloud Scheduler dengan interval pemeriksaan penskalaan otomatis yang dipilih:
gcloud scheduler jobs create http kafka-scaling-check \
--location=REGION \
--schedule="CRON_SCHEDULE" \
--time-zone="TIMEZONE" \
--uri=https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app \
--oidc-service-account-email=SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--http-method=POST
Ganti kode berikut:
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- SCALER_INVOKER_SERVICE_ACCOUNT: nama akun layanan pemanggil.
- PROJECT_ID: ID project atau layanan autoscaler Kafka.
- PROJECT_NUMBER: nomor project untuk layanan autoscaler Kafka.
- REGION: lokasi layanan autoscaler Kafka.
- TIMEZONE: zona waktu, misalnya:
America/Los_Angeles
. - CRON_SCHEDULE: jadwal yang dipilih dalam format Crontab. Misalnya, untuk setiap menit:
"* * * * *"
.
Kurang dari satu menit
Buat tugas Cloud Scheduler yang dijalankan setiap menit:
gcloud scheduler jobs create http kafka-scaling-check \
--location=REGION \
--schedule="* * * * *" \
--time-zone="TIMEZONE" \
--uri=https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app \
--oidc-service-account-email=SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--http-method=POST
Ganti kode berikut:
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- SCALER_INVOKER_SERVICE_ACCOUNT: nama akun layanan pemanggil.
- PROJECT_ID: project ID layanan autoscaler Kafka.
- PROJECT_NUMBER: nomor project untuk layanan autoscaler Kafka.
- REGION: lokasi layanan autoscaler Kafka.
- TIMEZONE: zona waktu, misalnya:
America/Los_Angeles
.
terraform
Direktori terraform/
berisi modul Terraform yang dapat digunakan kembali untuk menyediakan penskala otomatis Kafka dan resource terkaitnya.
Modul ini mengotomatiskan pembuatan:
- Layanan Cloud Run penskala otomatis Kafka
- Mendukung akun layanan dan binding IAM
- Antrean Cloud Tasks
- Tugas Cloud Scheduler
Untuk mengetahui petunjuk mendetail, contoh penggunaan, dan deskripsi semua variabel input/output, lihat terraform readme
.
Anda perlu memberikan variabel yang diperlukan ke modul Terraform, termasuk detail dari prasyarat, seperti ID project, region, email SA konsumen, nama rahasia, jalur image penskala, dan ID topik.
shell
Skrip setup_kafka_scaler.sh
disediakan dengan penskala otomatis untuk membuat dan mengonfigurasi semua resource yang diperlukan secara otomatis.
Menetapkan variabel lingkungan
Sebelum menjalankan skrip, pastikan Anda telah menetapkan semua variabel lingkungan yang diperlukan:
# Details for already-deployed Kafka consumer
export PROJECT_ID=PROJECT_ID
export REGION=REGION
export CONSUMER_SERVICE_NAME=DEPLOYED_KAFKA_CONSUMER
export CONSUMER_SA_EMAIL=KAFKA_CONSUMER_ACCOUNT_EMAIL # For example, NAME@PROJECT_ID.iam.gserviceaccount.com
export TOPIC_ID=KAFKA_TOPIC_ID
export CONSUMER_GROUP_ID=KAFKA_CONSUMER_GROUP_ID
export NETWORK=VPC_NETWORK
export SUBNET=VPC_SUBNET
# Details for new items to be created during this setup
export CLOUD_TASKS_QUEUE_NAME=CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS
export TASKS_SERVICE_ACCOUNT=TASKS_SERVICE_ACCOUNT_NAME
export SCALER_SERVICE_NAME=KAFKA_AUTOSCALER_SERVICE_NAME
export SCALER_IMAGE_PATH=KAFKA_AUTOSCALER_IMAGE_URI
export SCALER_CONFIG_SECRET=KAFKA_AUTOSCALER_CONFIG_SECRET_NAME
export CYCLE_SECONDS=SCALER_CHECK_FREQUENCY # For example, 15; this value should be at least 5 seconds.
export OUTPUT_SCALER_METRICS=false # If you want scaling metrics to outputted to Cloud Monitoring set this to true and ensure your scaler service account has permission to write metrics (for example, via roles/monitoring.metricWriter).
Ganti kode berikut:
- PROJECT_ID: project ID tempat layanan penskala otomatis Kafka berada.
- REGION: lokasi layanan autoscaler Kafka.
- DEPLOYED_KAFKA_CONSUMER: nama konsumen Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: email akun layanan untuk konsumen Kafka.
- KAFKA_TOPIC_ID: ID topik yang menjadi langganan konsumen Kafka.
- KAFKA_CONSUMER_GROUP_ID: ID grup konsumen yang digunakan oleh konsumen Kafka target. Nilai ini harus cocok, atau penskalaan otomatis akan gagal.
- VPC_NETWORK: jaringan VPC yang terhubung ke cluster Kafka.
- VPC_SUBNET: subnet VPC yang terhubung ke cluster Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: antrean Cloud Tasks yang dikonfigurasi untuk memicu pemeriksaan penskalaan otomatis.
- TASKS_SERVICE_ACCOUNT_NAME: akun layanan yang harus digunakan Cloud Tasks untuk memicu pemeriksaan penskalaan otomatis.
- KAFKA_AUTOSCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- KAFKA_AUTOSCALER_IMAGE_URI: URI untuk image autoscaler Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: nama secret penskalaan.
- SCALER_CHECK_FREQUENCY: periode siklus penskalaan otomatis, dalam detik.
Jalankan skrip penyiapan
Jalankan skrip setup_kafka_scaler.sh
yang disediakan:
./setup_kafka_scaler.sh
Skrip akan melakukan tindakan berikut:
- Membuat antrean Cloud Tasks yang digunakan untuk memicu pemeriksaan penskalaan otomatis.
- Membuat akun layanan penskala otomatis Kafka, dan memberikan izin yang diperlukan.
- Mengonfigurasi dan men-deploy penskala otomatis Kafka.
- Membuat tugas Cloud Scheduler yang secara berkala memicu pemeriksaan penskalaan otomatis.
Saat skrip setup_kafka_scaler.sh
berjalan, skrip akan menampilkan variabel lingkungan yang dikonfigurasi. Pastikan variabel lingkungan sudah benar sebelum Anda melanjutkan.
Memberikan izin tambahan
Untuk mengubah jumlah instance konsumen Kafka, akun layanan penskalaan otomatis Kafka harus memiliki izin lihat pada image container yang di-deploy. Misalnya, jika image konsumen di-deploy dari Artifact Registry, jalankan perintah berikut:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SCALER_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" # Or appropriate role for your registry
Memverifikasi bahwa penskalaan otomatis Kafka berfungsi
Penskalaan layanan penskalaan otomatis Kafka dipicu dengan permintaan ke URL layanan
(SCALER_SERVICE_NAME-
PROJECT_NUMBER.
REGION.run.app
).
Anda dapat mengirim permintaan POST
ke layanan penskalaan otomatis Kafka untuk memicu penghitungan penskalaan otomatis:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Ganti kode berikut:
- SCALER_SERVICE_NAME: nama layanan penskala otomatis Kafka Anda.
- PROJECT_NUMBER: nomor project untuk layanan autoscaler Kafka.
- REGION: lokasi layanan autoscaler Kafka.
Permintaan POST
memicu penghitungan penskalaan otomatis, output ke logging, dan mengubah jumlah instance berdasarkan rekomendasi.
Log layanan penskalaan otomatis Kafka Anda harus menyertakan pesan seperti [SCALING] Recommended instances X
.
Jika flag OUTPUT_SCALER_METRICS
diaktifkan, Anda juga dapat menemukan metrik Cloud Monitoring penskala di bagian custom.googleapis.com/cloud-run-kafkascaler
.
Konfigurasi penskalaan lanjutan
spec: metrics: behavior: scaleDown: stabilizationWindowSeconds: [INT] policies: - type: [Percent, Instances] value: [INT] periodSeconds: [INT] selectPolicy: [Min, Max] scaleUp: stabilizationWindowSeconds: [INT] policies: - type: [Percent, Instances] value: [INT] periodSeconds: [INT] selectPolicy: [Min, Max]
Daftar berikut menjelaskan beberapa elemen sebelumnya:
scaleDown
: perilaku saat mengurangi jumlah instance (penurunan skala).scaleUp
: perilaku saat meningkatkan jumlah instance (menskalakan).stabilizationWindowSeconds
: tertinggi (scaleDown
) atau terendah (scaleUp
). jumlah instance yang dihitung selama periode berjalan. Menetapkan nilai ke0
berarti nilai yang dihitung terbaru akan digunakan.selectPolicy
: hasil yang akan diterapkan saat beberapa kebijakan dikonfigurasi.Min
: perubahan terkecilMax
: perubahan terbesarPercent
: perubahan per periode dibatasi hingga persentase total instance yang dikonfigurasi.Instances
: perubahan per periode dibatasi hingga jumlah instance yang dikonfigurasi.periodSeconds
: jangka waktu kebijakan diterapkan.
Misalnya, spesifikasi lengkap, menggunakan konfigurasi default, akan terlihat seperti berikut:
spec: scaleTargetRef: name: projects/PROJECT-ID/locations/us-central1/workerpools/kafka-consumer-worker metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 activationThreshold: 0 tolerance: 0.1 windowSeconds: 120 - type: External external: metric: name: consumer_lag target: type: AverageValue averageValue: 1000 activationThreshold: 0 tolerance: 0.1 behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 50 periodSeconds: 30 selectPolicy: Min scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 - type: Instances value: 4 periodSeconds: 15 selectPolicy: Max