במדריך הזה נלמד איך להגדיר ולפרוס כלי לשינוי גודל אוטומטי של Kafka כשירות Cloud Run. הכלי הזה להתאמה אוטומטית לעומס מבצע לוגיקה של התאמה לעומס עבור עומס עבודה של צרכן Kafka, כמו פריסה של מאגר עובדים ב-Cloud Run. הכלי Kafka autoscaler קורא מדדים מאשכול Kafka, ומשתמש בהרחבה ידנית של מאגר עובדים או שירות ב-Cloud Run כדי להרחיב עומס עבודה של צרכן Kafka על סמך מדד הפיגור של צרכן Kafka.
בתרשים הבא מוצג איך שירות של Kafka לשינוי גודל אוטומטי קורא מדדים מאשכול Kafka כדי לשנות את הגודל האוטומטי של מאגר עובדים של צרכן Kafka.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לפריסה ולהפעלה של השירות הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Developer (
roles/run.developer) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) - קורא של Artifact Registry (
roles/artifactregistry.reader) - Cloud Scheduler Admin
(
roles/cloudscheduler.admin) כדי ליצור את המשימה ב-Cloud Scheduler להפעלת בדיקות של התאמה אוטומטית לעומס - אדמין של תור ב-Cloud Tasks
(
roles/cloudtasks.queueAdmin) כדי ליצור את התור ב-Cloud Tasks לבדיקות של התאמה אוטומטית לעומס - Security Admin
(
roles/iam.securityAdmin) כדי להעניק הרשאות לחשבונות שירות
לפני שמתחילים
כדי להגדיר את התכונה לשינוי אוטומטי של גודל האשכול ב-Kafka ולהשתמש בה, צריך את המשאבים הבאים:
- אשכול Kafka
- צרכן שנפרס
אשכול Kafka
- אשכול Kafka צריך לפעול ב-Compute Engine, ב-Google Kubernetes Engine או בשירות המנוהל ל-Apache Kafka.
- נושא Kafka שמוגדר עם אירועים שמפורסמים בנושא הזה.
פריסת צרכן Cloud Run
- צריך לפרוס עומס עבודה של צרכן Kafka ב-Cloud Run כשירות או כמאגר עובדים. צריך להגדיר אותו כך שיתחבר לאשכול Kafka, לנושא ולקבוצת הצרכנים. דוגמה לצרכן Kafka מופיעה במאמר Cloud Run Kafka Autoscaler Example Consumer.
- עומס העבודה של הצרכן צריך להיות באותו Google Cloud פרויקט כמו אשכול Kafka.
שיטות מומלצות
- מחברים את צרכני Kafka לרשת ה-VPC באמצעות Direct VPC. Direct VPC מאפשר לכם להתחבר לאשכול Kafka באמצעות כתובות IP פרטיות, וגם לשמור את תעבורת הנתונים ברשת ה-VPC.
- מגדירים בדיקת תקינות של פעילות לצרכני Kafka כדי לבדוק אם הצרכן מושך אירועים. בדיקת תקינות עוזרת לוודא שמכונות לא תקינות מופעלות מחדש באופן אוטומטי אם הן מפסיקות לעבד אירועים, גם אם הקונטיינר לא קורס.
איך בונים את הכלי לשינוי גודל אוטומטי של Kafka
אפשר להשתמש ב-Cloud Build כדי ליצור קובץ אימג' של קונטיינר של Kafka autoscaler מקוד המקור שלו.
משכפלים את המאגר:
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.gitעוברים לתיקיית המאגר:
cd cloud-run-kafka-scaler
כדי לציין את שם תמונת הפלט, מעדכנים את %ARTIFACT_REGISTRY_IMAGE% בקובץ cloudbuild.yaml המצורף, לדוגמה: 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
הפקודה הזו יוצרת את קובץ האימג' של קונטיינר ומעבירה אותו בדחיפה ל-Artifact Registry. חשוב לתעד את נתיב התמונה המלא (SCALER_IMAGE_PATH) כי תצטרכו אותו בהמשך.
שימו לב שהתמונה שמתקבלת לא תפעל באופן מקומי. היא מיועדת להצבה כשכבה מעל תמונת בסיס של Java. מידע נוסף, כולל איך להרכיב מחדש את קובץ האימג' של הקונטיינר כדי להריץ אותו באופן מקומי, זמין במאמר בנושא הגדרת עדכונים אוטומטיים של תמונת הבסיס.
הגדרת התאמה אוטומטית של Kafka
אפשר להגדיר את Kafka Autoscaler באמצעות סודות. ההגדרה של שינוי הגודל האוטומטי מתעדכנת מעת לעת, כך שאפשר להוסיף גרסאות חדשות של סודות כדי לשנות את ההגדרה בלי לפרוס מחדש את שינוי הגודל האוטומטי.
הגדרת מאפייני לקוח Kafka
כדי להגדיר את החיבור ל-Kafka Admin API, צריך לצרף סוד כנפח כשפורסים את Kafka autoscaler.
יוצרים קובץ בשם kafka_client_config.txt וכוללים בו את כל המאפיינים של הגדרת לקוח אדמין של Kafka שרוצים להוסיף. חובה לציין את המאפיין bootstrap.servers:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
מחליפים את BOOTSTRAP_SERVER_LIST ברשימה HOST:PORT של אשכול Kafka.
הגדרת אימות ב-Kafka
אם שרת Kafka שלכם דורש אימות, צריך לכלול את מאפייני ההגדרה הנדרשים בקובץ kafka_client_config.txt. לדוגמה, כדי להתחבר לאשכול של שירות מנוהל ל-Apache Kafka באמצעות אישורי ברירת מחדל של אפליקציה עם Google OAuth, הסוד צריך לכלול את המאפיינים הבאים:
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;
מחליפים את BOOTSTRAP_SERVER_LIST ברשימה HOST:PORT של אשכול Kafka.
שימוש בפרטי כניסה שמוגדרים כברירת מחדל באפליקציה עם אשכול של שירות מנוהל ל-Apache Kafka מחייב גם הענקת התפקיד Managed Kafka Client (roles/managedkafka.client) לחשבון השירות של שירות ההתאמה האוטומטית של Kafka:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_SERVICE_ACCOUNT: השם של חשבון השירות של שירות ההתאמה האוטומטית של Kafka.
- PROJECT_ID: מזהה הפרויקט של שירות ההתאמה האוטומטית של Kafka.
כדי ליצור את הסוד, שיועלה כנפח בפריסה, משתמשים בקובץ kafka_client_config.txt:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
מחליפים את ADMIN_CLIENT_SECRET_NAME בשם של הסוד לאימות Kafka.
הגדרת שינוי גודל
הכלי לשינוי גודל אוטומטי של Kafka קורא את הגדרות שינוי הגודל מהווליום /scaler-config/scaling. התוכן של הנפח הזה צריך להיות בפורמט YAML. מומלץ לצרף נפח סודי להגדרה הזו.
יוצרים קובץ בשם scaling_config.yaml עם ההגדרות הבאות:
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
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט של עומס העבודה של צרכן Kafka שרוצים להגדיר לו שינוי גודל אוטומטי.
- REGION: האזור של עומס העבודה של צרכן Kafka שרוצים להגדיר לו שינוי גודל אוטומטי.
- CONSUMER_SERVICE_NAME: השם של עומס העבודה של צרכן Kafka שרוצים להגדיר עבורו שינוי גודל אוטומטי.
- TARGET_CPU_UTILIZATION: יעד ניצול המעבד (CPU) לחישובים של שינוי גודל אוטומטי. לדוגמה:
60. - LAG_THRESHOLD: ערך הסף של המדד
consumer_lagלהפעלת שינוי גודל אוטומטי, לדוגמה:1000. - (אופציונלי) CPU_ACTIVATION_THRESHOLD: ערך הסף להפעלה של ה-CPU. אם כל המדדים לא פעילים, צרכן היעד מוקטן לאפס. ברירת המחדל היא
0. - (Optional) CPU_TOLERANCE: סף שמונע שינויים בהתאמת הגודל אם הוא נמצא בטווח שצוין. הערך מוצג כאחוז מניצול המעבד היעד. ברירת המחדל היא
0.1. - (אופציונלי) CPU_METRIC_WINDOW: תקופת זמן בשניות, שעל פיה מחושב ניצול המעבד הממוצע. ברירת המחדל היא
120. - (אופציונלי) LAG_ACTIVATION_THRESHOLD: סף ההפעלה של המדד
consumer_lag. אם כל המדדים לא פעילים, צרכן היעד מוקטן לאפס. ברירת המחדל היא0. - (Optional) LAG_TOLERANCE: סף שמונע שינויים בהתאמת הגודל אם הוא נמצא בטווח שצוין. הערך מוצג כאחוז מהפיגור של הצרכן ביחס ליעד. ברירת המחדל היא
0.1.
אפשר גם להגדיר מאפייני קנה מידה מתקדמים באמצעות בלוק behavior:.
הבלוק הזה תומך בהרבה מאותם מאפיינים כמו מדיניות שינוי הגודל של HPA ב-Kubernetes.
אם לא מציינים בלוק behavior, נעשה שימוש בהגדרת ברירת המחדל הבאה:
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
כדי ליצור את אמצעי האחסון של הסוד, שיוטמע ב-deployment, מעתיקים את ההגדרה לקובץ בשם scaling_config.yaml, ואז מריצים את הפקודה הבאה:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
מחליפים את SCALING_CONFIG_SECRET_NAME בשם של ה-Secret של שינוי הגודל.
פריסת הכלי לשינוי גודל אוטומטי של Kafka
אחרי שמשלימים את הדרישות המוקדמות, אפשר לפרוס את שירות ההתאמה האוטומטית של Kafka ואת התשתית שתומכת בו. כדי לפשט את התהליך הזה, אנחנו מספקים מודול Terraform וסקריפט מעטפת.
gcloud
בקטע הזה מוסבר על כל פקודת gcloud שנדרשת לפריסה ידנית של התכונה לשינוי גודל הקבוצה באופן אוטומטי. ברוב המקרים, מומלץ להשתמש במקום זאת בסקריפט מעטפת או במודול Terraform.
יצירה של חשבון שירות
הדרישות לגבי חשבון השירות תלויות במרווח הזמן בין בדיקות ההתאמה האוטומטית לעומס שהגדרתם. אתם יכולים להגדיר את מידרוג אוטומטי של Kafka כך שיבצע בדיקות של התאמה אוטומטית לעומס במרווחי זמן גמישים:
- דקה אחת או יותר: Cloud Scheduler מפעיל את הבדיקה של התאמה אוטומטית לעומס באמצעות בקשת POST במרווח הזמן שנבחר.
פחות מדקה: Cloud Scheduler מפעיל את היצירה של מספר Cloud Tasks בכל דקה, על סמך התדירות שהוגדרה.
דקה אחת או יותר
חשבון שירות של Kafka autoscaler
יוצרים חשבון שירות עבור הכלי לשינוי גודל אוטומטי של Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
מחליפים את SCALER_SERVICE_ACCOUNT בשם של חשבון השירות של Kafka autoscaler.
ל-Kafka autoscaler נדרשות ההרשאות הבאות כדי לעדכן את מספר המופעים של Kafka consumer:
-
iam.serviceaccounts.actAsלחשבון השירות של צרכן Kafka. -
roles/artifactregistry.readerלמאגר שמכיל את תמונת הצרכן של Kafka. -
run.workerpools.getוגםrun.workerpools.updateההרשאות האלה כלולות בתפקיד אדמין של Cloud Run (roles/run.admin). -
roles/secretmanager.secretAccessorגם עבור סודות האימות של Kafka וגם עבור סודות ההרחבה. -
roles/monitoring.viewerלפרויקט הצרכן של Kafka. התפקיד הזה נדרש כדי לקרוא מדדים של ניצול המעבד. -
roles/monitoring.metricWriterלפרויקט הצרכן של Kafka. התפקיד הזה הוא אופציונלי, אבל הוא מאפשר למנגנון לשינוי גודל הקבוצה להפיק מדדים בהתאמה אישית כדי לשפר את יכולת הצפייה.
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
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט שבו נמצא שירות ההתאמה האוטומטית של Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: כתובת האימייל בחשבון השירות של צרכן Kafka. לדוגמה,
example@PROJECT-ID.iam.gserviceaccount.com. - SCALER_SERVICE_ACCOUNT: חשבון השירות של הכלי לשינוי גודל אוטומטי של Kafka.
- ADMIN_CLIENT_SECRET_NAME: השם של סוד האימות של Kafka.
- SCALING_CONFIG_SECRET_NAME: השם של הסוד של שינוי הגודל.
- CONSUMER_IMAGE_REPO: המזהה או המזהה המוגדר במלואו של המאגר עם קובץ האימג' של הקונטיינר עבור צרכן Kafka.
- REPO_REGION: המיקום של מאגר תמונות הצרכן.
פחות מדקה
הגדרת Cloud Tasks
אפשר להגדיר את Cloud Scheduler להפעלה במרווחי זמן של דקה אחת או יותר. למרווחי זמן של פחות מדקה, משתמשים ב-Cloud Tasks כדי להפעיל את הכלי לשינוי גודל אוטומטי של Kafka. כדי להגדיר את Cloud Tasks, צריך:
- יצירת תור Cloud Tasks למשימות של בדיקת התאמה אוטומטית לעומס.
- יצירת חשבון השירות שמשמש את Cloud Tasks להפעלת שינוי הגודל האוטומטי של Kafka באמצעות התפקיד 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"
מחליפים את מה שכתוב בשדות הבאים:
- CLOUD_TASKS_QUEUE_NAME: התור המוגדר של Cloud Tasks להפעלת בדיקות של שינוי גודל אוטומטי.
- TASKS_SERVICE_ACCOUNT: חשבון השירות שבו Cloud Tasks צריך להשתמש כדי להפעיל בדיקות של שינוי גודל אוטומטי.
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- PROJECT_ID: מזהה הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
הגדרת חשבון השירות של Kafka Autoscaler
יוצרים חשבון שירות עבור הכלי לשינוי גודל אוטומטי של Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
מחליפים את SCALER_SERVICE_ACCOUNT בשם של חשבון השירות של Kafka autoscaler.
כדי לעדכן את מספר המופעים של צרכני Kafka וליצור משימות לבדיקות של התאמה אוטומטית לעומס, צריך לתת ל-Kafka Autoscaler את ההרשאות הבאות:
-
iam.serviceaccounts.actAsלחשבון השירות של צרכן Kafka. -
roles/artifactregistry.readerלמאגר שמכיל את תמונת הצרכן של Kafka -
run.workerpools.getוגםrun.workerpools.updateההרשאות האלה כלולות בתפקיד אדמין של Cloud Run (roles/run.admin). -
roles/secretmanager.secretAccessorלשני הסודות לצורך שינוי קנה מידה ואימות של Kafka. -
roles/monitoring.viewerלפרויקט הצרכן של Kafka. התפקיד הזה נדרש כדי לקרוא מדדים של ניצול המעבד. -
roles/monitoring.metricWriterלפרויקט הצרכן של Kafka. התפקיד הזה הוא אופציונלי, אבל הוא מאפשר למנגנון לשינוי גודל הקבוצה להפיק מדדים בהתאמה אישית כדי לשפר את יכולת הצפייה. - התפקיד 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
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט שבו נמצא שירות ההתאמה האוטומטית של Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: כתובת האימייל בחשבון השירות של צרכן Kafka. לדוגמה,
example@PROJECT_ID.iam.gserviceaccount.com. - SCALER_SERVICE_ACCOUNT: חשבון השירות של הכלי לשינוי גודל אוטומטי של Kafka.
- CONSUMER_IMAGE_REPO: המזהה או המזהה המוגדר במלואו עבור המאגר עם קובץ האימג' של הקונטיינר עבור צרכן Kafka.
- ADMIN_CLIENT_SECRET_NAME: השם של סוד האימות של Kafka.
- SCALING_CONFIG_SECRET_NAME: השם של הסוד של שינוי הגודל.
- REPO_REGION: המיקום של מאגר תמונות הצרכן.
- CLOUD_TASKS_QUEUE_NAME: התור המוגדר של Cloud Tasks להפעלת בדיקות של שינוי גודל אוטומטי.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
הגדרת משתני סביבה
דקה אחת או יותר
הכלי לשינוי גודל אוטומטי של Kafka משתמש במשתני סביבה כדי לציין את צרכן Kafka ואספקטים אחרים של עומס העבודה של היעד. לצורך אבטחה, מומלץ להגדיר מידע רגיש כסודות.
יוצרים קובץ YAML בשם scaler_env_vars.yaml עם המשתנים הבאים:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
מחליפים את מה שכתוב בשדות הבאים:
- KAFKA_TOPIC_ID: מזהה הנושא שהצרכנים של Kafka נרשמים אליו.
- CONSUMER_GROUP_ID: מזהה קבוצת הצרכנים שצרכן היעד של Kafka משתמש בו. הערכים האלה צריכים להיות זהים, אחרת התאמה אוטומטית לעומס תיכשל.
- CYCLE_SECONDS: משך המחזור של שינוי הגודל האוטומטי, בשניות.
- OUTPUT_SCALER_METRICS: ההגדרה להפעלת המדדים. מגדירים את הערך ל-
trueכדי להפעיל את הפלט של מדדים מותאמים אישית, או ל-falseאחרת.
פחות מדקה
הכלי לשינוי גודל אוטומטי של Kafka משתמש במשתני סביבה כדי לציין את צרכן Kafka ואספקטים אחרים של עומס העבודה של היעד. לצורך אבטחה, מומלץ להגדיר מידע רגיש כסודות.
יוצרים קובץ YAML בשם scaler_env_vars.yaml עם המשתנים הבאים:
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
מחליפים את מה שכתוב בשדות הבאים:
- KAFKA_TOPIC_ID: מזהה הנושא שהצרכנים של Kafka נרשמים אליו.
- CONSUMER_GROUP_ID: מזהה קבוצת הצרכנים שצרכן היעד של Kafka משתמש בו. הערכים האלה צריכים להיות זהים, אחרת התאמה אוטומטית לעומס תיכשל.
- CYCLE_SECONDS: משך המחזור של שינוי הגודל האוטומטי, בשניות.
- OUTPUT_SCALER_METRICS: ההגדרה להפעלת המדדים. מגדירים את הערך ל-
trueכדי להפעיל פלט של מדדים מותאמים אישית, או ל-falseאחרת. - CLOUD_TASKS_QUEUE_NAME: השם המלא של התור ב-Cloud Tasks להפעלת בדיקות של שינוי גודל אוטומטי. הפורמט הוא:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME. - TASKS_SERVICE_ACCOUNT_EMAIL: חשבון השירות שבו Cloud Tasks צריך להשתמש כדי להפעיל בדיקות של שינוי גודל אוטומטי. לדוגמה,
example@PROJECT_ID.iam.gserviceaccount.com.
פורסים את Kafka autoscaler באמצעות התמונה שסופקה, ומתחברים ל-Kafka VPC באמצעות הקובץ 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
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_IMAGE_URI: ה-URI של תמונת המידרוג האוטומטי של Kafka.
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- SCALER_SERVICE_ACCOUNT: השם של חשבון השירות של שירות ההתאמה האוטומטית של Kafka.
- PROJECT_ID: מזהה הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- KAFKA_VPC_NETWORK: רשת ה-VPC שמחוברת לאשכול Kafka.
- KAFKA_VPC_SUBNET: רשת המשנה של ה-VPC שמחוברת לאשכול Kafka.
- ADMIN_CLIENT_SECRET_NAME: השם של סוד האימות של Kafka.
- SCALING_CONFIG_SECRET_NAME: השם של הסוד של שינוי הגודל.
הגדרה של בדיקות תקופתיות של התאמה אוטומטית לעומס (autoscaling)
בקטע הזה משתמשים ב-Cloud Scheduler כדי להפעיל בדיקות תקופתיות של התאמה אוטומטית לעומס:
- דקה אחת או יותר: הגדרת Cloud Scheduler להפעלה במרווח הזמן שנבחר
- פחות מדקה: הגדרת Cloud Scheduler להפעלה כל דקה
יצירת חשבון שירות להפעלת הפונקציה
כדי לאפשר ל-Cloud Scheduler להפעיל את קנה המידה האוטומטי של Kafka, צריך ליצור חשבון שירות עם התפקיד Invoker (מפעיל) (roles/run.invoker) בשירות קנה המידה האוטומטי של 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"
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: השם של חשבון השירות של הגורם המפעיל.
- PROJECT_ID: מזהה הפרויקט של שירות ההתאמה האוטומטית של Kafka.
יצירת משימה ב-Cloud Scheduler
דקה אחת או יותר
יוצרים משימה ב-Cloud Scheduler עם מרווח הזמן שנבחר לבדיקת שינוי הגודל האוטומטי:
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
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: השם של חשבון השירות של הגורם המפעיל.
- PROJECT_ID: מזהה הפרויקט או שירות ההתאמה האוטומטית של Kafka.
- PROJECT_NUMBER: מספר הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
- TIMEZONE: אזור הזמן, לדוגמה:
America/Los_Angeles. - CRON_SCHEDULE: לוח הזמנים שנבחר בפורמט Crontab. לדוגמה, בכל דקה:
"* * * * *".
פחות מדקה
יוצרים משימה ב-Cloud Scheduler שמופעלת כל דקה:
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
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: השם של חשבון השירות של הגורם המפעיל.
- PROJECT_ID: מזהה הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- PROJECT_NUMBER: מספר הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
- TIMEZONE: אזור הזמן, לדוגמה:
America/Los_Angeles.
terraform
הספרייה terraform/ מכילה מודול Terraform לשימוש חוזר, שאפשר להשתמש בו כדי להקצות את התכונה לשינוי גודל אוטומטי של Kafka ואת המשאבים שמשויכים אליה.
המודול הזה מאפשר ליצור באופן אוטומטי:
- שירות Cloud Run של Kafka autoscaler
- תמיכה בחשבונות שירות ובקישורי IAM
- תור ב-Cloud Tasks
- משימה ב-Cloud Scheduler
הוראות מפורטות, דוגמאות לשימוש ותיאורים של כל משתני הקלט והפלט מופיעים במאמר terraform readme.
צריך לספק את המשתנים הנדרשים למודול Terraform, כולל פרטים מהדרישות המוקדמות, כמו מזהה הפרויקט, האזור, כתובת האימייל של חשבון ה-SA של הצרכן, שמות הסודות, נתיב תמונת הסקיילר ומזהה הנושא.
מעטפת
setup_kafka_scaler.sh סקריפט מסופק עם הכלי לשינוי גודל אוטומטי כדי ליצור ולהגדיר באופן אוטומטי את כל המשאבים הנדרשים.
הגדרה של משתני סביבה
לפני שמריצים את הסקריפט, צריך לוודא שהגדרתם את כל משתני הסביבה הנדרשים:
# 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).
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט שבו נמצא שירות ההתאמה האוטומטית של Kafka.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
- DEPLOYED_KAFKA_CONSUMER: שם צרכן Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: כתובת האימייל בחשבון השירות של צרכן Kafka.
- KAFKA_TOPIC_ID: מזהה הנושא שהצרכנים של Kafka נרשמים אליו.
- KAFKA_CONSUMER_GROUP_ID: מזהה קבוצת הצרכנים שצרכן היעד של Kafka משתמש בו. הערכים האלה צריכים להיות זהים, אחרת התאמה אוטומטית לעומס תיכשל.
- VPC_NETWORK: רשת ה-VPC שמחוברת לאשכול Kafka.
- VPC_SUBNET: רשת המשנה של ה-VPC שמחוברת לאשכול Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: התור המוגדר של Cloud Tasks להפעלת בדיקות של שינוי גודל אוטומטי.
- TASKS_SERVICE_ACCOUNT_NAME: חשבון השירות שבו Cloud Tasks צריך להשתמש כדי להפעיל בדיקות של שינוי גודל אוטומטי.
- KAFKA_AUTOSCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- KAFKA_AUTOSCALER_IMAGE_URI: ה-URI של תמונת המידרוג האוטומטי של Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: השם של הסוד של שינוי הגודל.
- SCALER_CHECK_FREQUENCY: משך המחזור של שינוי הגודל האוטומטי, בשניות.
הפעלת סקריפט ההגדרה
מריצים את הסקריפט setup_kafka_scaler.sh שמופיע:
./setup_kafka_scaler.sh
הסקריפט מבצע את הפעולות הבאות:
- יוצר את תור Cloud Tasks שמשמש להפעלת בדיקות של התאמה אוטומטית לעומס.
- יוצר את חשבון השירות של Kafka autoscaler ומעניק את ההרשאות הנדרשות.
- הכלי מגדיר ומפעיל את התכונה לשינוי אוטומטי של גודל האשכול ב-Kafka.
- יוצר את המשימה של Cloud Scheduler שמפעילה מעת לעת בדיקות של התאמה אוטומטית לעומס.
כשמריצים את הסקריפט setup_kafka_scaler.sh, הוא מציג את משתני הסביבה שהוגדרו. לפני שממשיכים, צריך לוודא שמשתני הסביבה נכונים.
מתן הרשאות נוספות
כדי לשנות את מספר המופעים של צרכן Kafka, לחשבון השירות של שירות ה-Kafka autoscaler צריכה להיות הרשאת צפייה בתמונת הקונטיינר שנפרסה. לדוגמה, אם תמונת הצרכן נפרסה מ-Artifact Registry, מריצים את הפקודה הבאה:
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
איך מוודאים שהשינוי האוטומטי של קנה המידה ב-Kafka פועל
התאמה לעומס (scaling) של שירות ההתאמה לעומס של Kafka מופעלת באמצעות בקשה לכתובת ה-URL של השירות (SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app).
אתם יכולים לשלוח בקשת POST לשירות של Kafka למידרוג אוטומטי כדי להפעיל את החישוב של התאמה אוטומטית לעומס:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
מחליפים את מה שכתוב בשדות הבאים:
- SCALER_SERVICE_NAME: השם של שירות ההרחבה האוטומטית של Kafka.
- PROJECT_NUMBER: מספר הפרויקט של שירות ההתאמה האוטומטית של Kafka.
- REGION: המיקום של שירות ההתאמה האוטומטית של Kafka.
POST בקשות מפעילות את החישוב של התאמה אוטומטית לעומס, מוציאות פלט לרישום ביומן, ומשנות את מספר המופעים על סמך ההמלצה.
היומנים של שירות ה-autoscaler של Kafka צריכים לכלול הודעות כמו [SCALING] Recommended instances X.
אם הדגל OUTPUT_SCALER_METRICS מופעל, אפשר גם למצוא מדדים של Cloud Monitoring לגבי שינוי קנה מידה בקטע custom.googleapis.com/cloud-run-kafkascaler.
הגדרות מתקדמות של שינוי גודל
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]
ברשימה הבאה מתואר חלק מהרכיבים הקודמים:
-
scaleDown: ההתנהגות כשמצמצמים את מספר המכונות (הקטנת קנה מידה). -
scaleUp: ההתנהגות כשמגדילים את מספר המכונות (הגדלת קנה מידה). -
stabilizationWindowSeconds: הערך הגבוה ביותר (scaleDown) או הנמוך ביותר (scaleUp) של מספר המקרים המחושב במהלך תקופה מתמשכת. הגדרת הערך ל-0פירושה שהמערכת תשתמש בערך המחושב העדכני ביותר. -
selectPolicy: התוצאה שתופעל כשמוגדרות כמה מדיניות. -
Min: השינוי הקטן ביותר -
Max: השינוי הגדול ביותר -
Percent: השינויים בכל תקופה מוגבלים לאחוז המוגדר מכלל המופעים. -
Instances: השינויים בכל תקופה מוגבלים למספר המופעים שהוגדר. -
periodSeconds: משך הזמן שבו המדיניות נאכפת.
לדוגמה, המפרט המלא, עם הגדרות ברירת המחדל, נראה כך:
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