תבנית של סנכרון שינויים בזרמי נתונים ב-Spanner ל-Pub/Sub

תבנית ה-Spanner change streams to Pub/Sub היא צינור עיבוד נתונים בסטרימינג שמעביר בסטרימינג רשומות של שינויים בנתוני Spanner וכותב אותן לנושאים ב-Pub/Sub באמצעות Dataflow Portable Runner.

כדי להוציא את הנתונים לנושא חדש ב-Pub/Sub, צריך קודם ליצור את הנושא. אחרי שיוצרים נושא, Pub/Sub יוצר ומצרף אליו מינוי באופן אוטומטי. אם מנסים להוציא נתונים לנושא Pub/Sub שלא קיים, צינור הנתונים של Dataflow זורק חריגה, והצינור נתקע כי הוא מנסה ליצור חיבור באופן רציף.

אם נושא Pub/Sub הנדרש כבר קיים, אפשר להוציא נתונים לנושא הזה.

מידע נוסף זמין במאמרים מידע על מקורות נתונים של שינויים, יצירת חיבורים למקורות נתונים של שינויים באמצעות Dataflow ושיטות מומלצות לשימוש במקורות נתונים של שינויים.

הדרישות לגבי צינורות עיבוד נתונים

  • מופע Spanner חייב להתקיים לפני שמריצים את צינור הנתונים.
  • מסד הנתונים של Spanner צריך להתקיים לפני שמריצים את צינור הנתונים.
  • מופע המטא-נתונים של Spanner צריך להתקיים לפני שמריצים את צינור העיבוד.
  • מסד הנתונים של המטא-נתונים של Spanner צריך להתקיים לפני שמריצים את צינור הנתונים.
  • השינוי ב-Spanner צריך להתבצע לפני שמריצים את צינור הנתונים.
  • נושא ה-Pub/Sub צריך להתקיים לפני שמריצים את צינור הנתונים.

פרמטרים של תבניות

פרמטרים נדרשים

  • spannerInstanceId: מכונת Spanner שממנה יתבצע קריאה של נתוני שינויים.
  • spannerDatabase: מסד הנתונים של Spanner שממנו יקראו מקורות נתונים של שינויים.
  • spannerMetadataInstanceId: מופע Spanner לשימוש בטבלת המטא-נתונים של מחבר הנתונים של זרמי השינויים.
  • spannerMetadataDatabase: מסד הנתונים של Spanner שבו יש להשתמש עבור טבלת המטא-נתונים של מחבר הנתונים של שינוי הזרמים.
  • spannerChangeStreamName: השם של Spanner change stream שממנו ייקראו הנתונים.
  • pubsubTopic: נושא Pub/Sub לפלט של זרמי שינויים.

פרמטרים אופציונליים

  • spannerProjectId: הפרויקט שממנו ייקראו נתוני ה-Change Streams. בפרויקט הזה נוצר גם טבלת המטא-נתונים של המחבר של זרמי השינויים. ברירת המחדל של הפרמטר הזה היא הפרויקט שבו צינור ה-Dataflow פועל.
  • spannerDatabaseRole: תפקיד מסד הנתונים ב-Spanner שבו יש להשתמש כשמריצים את התבנית. הפרמטר הזה נדרש רק אם משתמש ה-IAM שמריץ את התבנית הוא משתמש עם בקרת גישה פרטנית. לתפקיד במסד הנתונים צריכה להיות הרשאת SELECT בפיד השינויים והרשאת EXECUTE בפונקציית הקריאה של פיד השינויים. מידע נוסף זמין במאמר בנושא בקרת גישה ברמת גרנולריות גבוהה לזרמי שינויים (https://cloud.google.com/spanner/docs/fgac-change-streams).
  • spannerMetadataTableName: השם של טבלת המטא-נתונים של מחבר Spanner change streams שבה רוצים להשתמש. אם לא מספקים את הטבלה, מערכת Spanner יוצרת אותה באופן אוטומטי במהלך השינוי של צינור עיבוד הנתונים. כשמעדכנים צינור קיים, צריך לציין את הפרמטר הזה. אין להשתמש בפרמטר הזה במקרים אחרים.
  • startTimestamp: תאריך ושעת ההתחלה (https://tools.ietf.org/html/rfc3339), כולל, לשימוש בקריאת זרמי שינויים. לדוגמה, ex- 2021-10-12T07:20:50.52Z. ברירת המחדל היא חותמת הזמן של תחילת הצינור, כלומר השעה הנוכחית.
  • endTimestamp: חותמת הזמן של סיום התקופה (בפורמט DateTime‏ https://tools.ietf.org/html/rfc3339), כולל, שמשמשת לקריאת נתוני שינויים. לדוגמה, ex- 2021-10-12T07:20:50.52Z. ברירת המחדל היא זמן אינסופי בעתיד.
  • spannerHost: נקודת הקצה של Cloud Spanner שאליה מתקשרים בתבנית. משמש רק לבדיקה. לדוגמה, https://spanner.googleapis.com. ברירת המחדל היא: https://spanner.googleapis.com.
  • outputDataFormat: הפורמט של הפלט. הפלט עטוף בהרבה PubsubMessages ונשלח לנושא ב-Pub/Sub. הפורמטים המותרים הם JSON ו-AVRO. ברירת המחדל היא JSON.
  • pubsubAPI: Pub/Sub API שמשמש להטמעה של צינור עיבוד הנתונים. ממשקי ה-API המותרים הם pubsubio ו-native_client. במספר קטן של שאילתות לשנייה (QPS), זמן האחזור של native_client קצר יותר. במספר גדול של QPS, ‏ pubsubio מספק ביצועים טובים ויציבים יותר. ערך ברירת המחדל הוא pubsubio.
  • pubsubProjectId: הפרויקט של נושא Pub/Sub. ברירת המחדל של הפרמטר הזה היא הפרויקט שבו צינור ה-Dataflow פועל.
  • rpcPriority: העדיפות של הבקשה לשיחות Spanner. הערכים המותרים הם HIGH,‏ MEDIUM ו-LOW. ברירת המחדל היא: HIGH).
  • includeSpannerSource: קובע אם לכלול את מזהה מסד הנתונים ומזהה המופע של Spanner כדי לקרוא את מקור הנתונים של השינויים בנתוני הודעת הפלט. ברירת המחדל היא: false.
  • outputMessageMetadata: ערך המחרוזת של השדה המותאם אישית outputMessageMetadata בהודעת הפלט של pub/sub. ברירת המחדל היא ריק, והשדה outputMessageMetadata מאוכלס רק אם הערך הזה לא ריק. כשמזינים את הערך כאן, צריך להוסיף תו בריחה (escape) לכל התווים המיוחדים (למשל: מירכאות כפולות).
  • useSpannerEmulatorHost: האם להשתמש במארח Spanner שהוגדר ב-getSpannerHost() כמארח האמולטור. ברירת המחדל היא: false.
  • spannerChangeStreamTvfNameList: רשימה של שמות של Spanner Change Stream TVF, מופרדים באמצעות נקודה-פסיק, שאותם רוצים לשאול ולאחד. ברירת המחדל היא ריק.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימת האזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר בנושא מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Cloud Spanner change streams to Pub/Sub (העברת נתוני שינויים מ-Cloud Spanner ל-Pub/Sub).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

gcloud

במעטפת או בטרמינל, מריצים את התבנית:

    gcloud dataflow flex-template run JOB_NAME \
        --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/ \
        --region REGION_NAME \
        --parameters \
    spannerInstanceId=SPANNER_INSTANCE_ID,\
    spannerDatabase=SPANNER_DATABASE,\
    spannerMetadataInstanceId=SPANNER_METADATA_INSTANCE_ID,\
    spannerMetadataDatabase=SPANNER_METADATA_DATABASE,\
    spannerChangeStreamName=SPANNER_CHANGE_STREAM,\
    pubsubTopic=PUBSUB_TOPIC
    

מחליפים את מה שכתוב בשדות הבאים:

  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/‎
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • SPANNER_INSTANCE_ID: מזהה מכונת Spanner
  • SPANNER_DATABASE: מסד נתונים של Spanner
  • SPANNER_METADATA_INSTANCE_ID: מזהה מופע של מטא-נתונים של Spanner
  • SPANNER_METADATA_DATABASE: מסד נתונים של מטא-נתונים ב-Spanner
  • SPANNER_CHANGE_STREAM: Spanner change stream
  • PUBSUB_TOPIC: נושא ה-Pub/Sub לפלט של זרמי שינויים

API

כדי להריץ את התבנית באמצעות REST API, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.

  POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
  {
    "launch_parameter": {
        "jobName": "JOB_NAME",
        "parameters": {
            "spannerInstanceId": "SPANNER_INSTANCE_ID",
            "spannerDatabase": "SPANNER_DATABASE",
            "spannerMetadataInstanceId": "SPANNER_METADATA_INSTANCE_ID",
            "spannerMetadataDatabase": "SPANNER_METADATA_DATABASE",
            "spannerChangeStreamName": "SPANNER_CHANGE_STREAM",
            "pubsubTopic": "PUBSUB_TOPIC"
        },
        "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/",
    }
  }
  

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רוצים להריץ את משימת Dataflow Google Cloud
  • JOB_NAME: שם ייחודי של המשימה לפי בחירתכם
  • VERSION: הגרסה של התבנית שרוצים להשתמש בה

    אפשר להשתמש בערכים הבאים:

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/‎
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • LOCATION: האזור שבו רוצים לפרוס את עבודת Dataflow, לדוגמה: us-central1
  • SPANNER_INSTANCE_ID: מזהה מכונת Spanner
  • SPANNER_DATABASE: מסד נתונים של Spanner
  • SPANNER_METADATA_INSTANCE_ID: מזהה מופע של מטא-נתונים של Spanner
  • SPANNER_METADATA_DATABASE: מסד נתונים של מטא-נתונים ב-Spanner
  • SPANNER_CHANGE_STREAM: Spanner change stream
  • PUBSUB_TOPIC: נושא ה-Pub/Sub לפלט של זרמי שינויים

המאמרים הבאים