תבנית Datastream ל-Spanner

התבנית Datastream to Spanner היא צינור סטרימינג שקורא אירועים של Datastream מקטגוריה של Cloud Storage וכותב אותם למסד נתונים של Spanner. הוא מיועד להעברת נתונים ממקורות Datastream אל Spanner. מציינים את הפרמטר gcsPubSubSubscription כדי לקרוא נתונים מהתראות Pub/Sub, או את הפרמטר inputFilePattern כדי לקרוא נתונים ישירות מקבצים ב-Cloud Storage.

כל הטבלאות שנדרשות להעברה צריכות להיות קיימות במסד הנתונים של Spanner ביעד לפני הרצת התבנית. לכן, צריך להשלים את העברת הסכימה ממסד נתונים של מקור אל Spanner של היעד לפני העברת הנתונים. יכול להיות שיהיו נתונים בטבלאות לפני ההעברה. התבנית הזו לא מעבירה שינויים בסכימה של Datastream למסד הנתונים של Spanner.

עקביות הנתונים מובטחת רק בסוף ההעברה, כשכל הנתונים נכתבים ב-Spanner. כדי לאחסן פרטי הזמנות לכל רשומה שנכתבת ל-Spanner, התבנית הזו יוצרת טבלה נוספת (שנקראת טבלת צל) לכל טבלה במסד הנתונים של Spanner. השלב הזה נועד לוודא שהנתונים עקביים בסוף ההעברה. טבלאות ה-shadow לא נמחקות אחרי ההעברה, ואפשר להשתמש בהן למטרות אימות בסוף ההעברה.

כל השגיאות שמתרחשות במהלך הפעולה, כמו אי התאמה של סכימות, קובצי JSON פגומים או שגיאות שנובעות מהפעלת טרנספורמציות, מתועדות בתור שגיאות. תור השגיאות הוא תיקייה ב-Cloud Storage שבה מאוחסנים כל האירועים של Datastream שנתקלו בשגיאות, יחד עם סיבת השגיאה בפורמט טקסט. השגיאות יכולות להיות זמניות או קבועות, והן מאוחסנות בתיקיות המתאימות ב-Cloud Storage בתור השגיאות. המערכת מנסה לתקן שגיאות חולפות באופן אוטומטי, אבל לא שגיאות קבועות. במקרה של שגיאות קבועות, יש לכם אפשרות לבצע תיקונים באירועי השינוי ולהעביר אותם לדלי שאפשר לנסות בו שוב, בזמן שהתבנית פועלת.

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

  • סטרימינג של Datastream במצב פועל או לא התחיל.
  • קטגוריה של Cloud Storage שבה מתבצעת שכפול של אירועים מ-Datastream.
  • מסד נתונים של Spanner עם טבלאות קיימות. הטבלאות האלה יכולות להיות ריקות או להכיל נתונים.

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

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

  • instanceId: מכונת Spanner שבה השינויים משוכפלים.
  • databaseId: מסד הנתונים של Spanner שבו השינויים משוכפלים.

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

  • inputFilePattern: המיקום של קובץ Cloud Storage שמכיל את קובצי Datastream לשכפול. בדרך כלל זה נתיב הבסיס של הסטרימינג. התמיכה בתכונה הזו הושבתה. מומלץ להשתמש בתכונה הזו רק כדי לנסות שוב להזין רשומות שמגיעות לתור הודעות מתות (DLQ) חמור.
  • inputFileFormat: הפורמט של קובץ הפלט שנוצר על ידי Datastream. לדוגמה avro,json. ברירת המחדל היא avro.
  • sessionFilePath: נתיב קובץ הסשן ב-Cloud Storage שמכיל מידע על מיפוי מ-HarbourBridge.
  • projectId: מזהה הפרויקט ב-Spanner.
  • spannerHost: נקודת הקצה של Cloud Spanner שאליה מתבצעת קריאה בתבנית. לדוגמה, https://batch-spanner.googleapis.com. ברירת המחדל היא: https://batch-spanner.googleapis.com.
  • gcsPubSubSubscription: המינוי ל-Pub/Sub שבו נעשה שימוש במדיניות התראות של Cloud Storage. לשם, משתמשים בפורמט projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>.
  • streamName: השם או התבנית של מקור הנתונים שצריך לבצע בו סקר כדי לקבל מידע על הסכימה ועל סוג המקור.
  • shadowTablePrefix: הקידומת שמשמשת למתן שמות לטבלאות זמניות. ברירת מחדל: shadow_.
  • shouldCreateShadowTables: הדגל הזה מציין אם צריך ליצור טבלאות צל במסד הנתונים של Cloud Spanner. ברירת המחדל היא true.
  • rfcStartDateTime: תאריך ושעה להתחלה שמשמשים לאחזור מ-Cloud Storage (https://tools.ietf.org/html/rfc3339). ברירת המחדל היא: 1970-01-01T00:00:00.00Z.
  • fileReadConcurrency: מספר הקבצים של DataStream שייקראו בו-זמנית. ברירת המחדל היא 30.
  • deadLetterQueueDirectory: נתיב הקובץ שמשמש לאחסון הפלט של תור השגיאות. נתיב הקובץ שמוגדר כברירת מחדל הוא ספרייה במיקום הזמני של משימת Dataflow.
  • dlqRetryMinutes: מספר הדקות בין ניסיונות חוזרים של תור הודעות שלא ניתן למסור. ברירת המחדל היא 10.
  • dlqMaxRetryCount: המספר המקסימלי של פעמים שאפשר לנסות שוב שגיאות זמניות דרך DLQ. ברירת המחדל היא 500.
  • dataStreamRootUrl: כתובת הבסיס של Datastream API. ברירת המחדל היא: https://datastream.googleapis.com/.
  • datastreamSourceType: זהו סוג מסד הנתונים של המקור שאליו מתחבר Datastream. דוגמה – mysql/oracle. צריך להגדיר את הפרמטר הזה כשמבצעים בדיקה בלי מקור נתונים פעיל.
  • roundJsonDecimals: אם הדגל הזה מוגדר, המערכת מעגלת את הערכים העשרוניים בעמודות JSON למספר שאפשר לאחסן בלי לאבד דיוק. ברירת המחדל היא: false.
  • runMode: סוג מצב ההרצה, רגיל או עם retryDLQ. ברירת המחדל היא: רגיל.
  • transformationContextFilePath: נתיב קובץ הקשר של הטרנספורמציה באחסון בענן שמשמש לאכלוס נתונים שמשמשים בטרנספורמציות שמתבצעות במהלך העברות. לדוגמה: מזהה הרסיס לשם מסד הנתונים כדי לזהות את מסד הנתונים שממנו הועברה שורה.
  • directoryWatchDurationInMinutes: משך הזמן שבו צינור עיבוד הנתונים ימשיך לבצע בדיקות בספרייה ב-GCS. קובצי הפלט של Datastream מסודרים במבנה של ספריות שמציג את חותמת הזמן של האירוע, מקובצת לפי דקות. הפרמטר הזה צריך להיות בערך שווה לערך של העיכוב המקסימלי שיכול להתרחש בין אירוע שמתרחש במסד נתונים של מקור לבין אותו אירוע שנכתב ב-GCS על ידי Datastream. אחוזון 99.9 = 10 דקות. ברירת המחדל היא 10.
  • spannerPriority: העדיפות של הבקשה לקריאות ל-Cloud Spanner. הערך צריך להיות אחד מהערכים הבאים: [HIGH,MEDIUM,LOW]. ברירת המחדל היא HIGH.
  • dlqGcsPubSubSubscription: מינוי Pub/Sub שמשמש במדיניות התראות של Cloud Storage לספריית ניסיון חוזר של DLQ כשמפעילים במצב רגיל. לשם, משתמשים בפורמט projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. אם מגדירים את המאפיין הזה, המערכת מתעלמת מהמאפיינים deadLetterQueueDirectory ו-dlqRetryMinutes.
  • transformationJarPath: המיקום של קובץ ה-JAR בהתאמה אישית ב-Cloud Storage, שמכיל את לוגיקת ההמרה בהתאמה אישית לעיבוד רשומות בהעברה קדימה. ברירת המחדל היא ריק.
  • transformationClassName: שם המחלקה שמוגדר במלואו עם לוגיקת הטרנספורמציה המותאמת אישית. זהו שדה חובה אם מציינים את transformationJarPath. ברירת המחדל היא ריק.
  • transformationCustomParameters: מחרוזת שמכילה פרמטרים מותאמים אישית שיועברו למחלקת ההמרה המותאמת אישית. ברירת המחדל היא ריק.
  • filteredEventsDirectory: זהו נתיב הקובץ לאחסון האירועים שסוננו באמצעות טרנספורמציה מותאמת אישית. ברירת המחדל היא ספרייה במיקום הזמני של משימת Dataflow. ערך ברירת המחדל מספיק ברוב המקרים.
  • shardingContextFilePath: נתיב קובץ הקשר של הפיצול ב-Cloud Storage משמש לאכלוס מזהה הפיצול במסד הנתונים של Spanner לכל פיצול מקור.הוא מצפה לקובץ JSON בפורמט: {"StreamToDbAndShardMap": Map<stream_name, Map<db_name, shard_id>>}.
  • tableOverrides: אלה החלפות של שמות טבלאות מהמקור ל-Spanner. הם נכתבים בפורמט הבא: [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}]בדוגמה הזו מוצג מיפוי של הטבלה Singers לטבלה Vocalists ושל הטבלה Albums לטבלה Records. לדוגמה, [{Singers, Vocalists}, {Albums, Records}]. ברירת המחדל היא ריק.
  • columnOverrides: אלה החלפות של שמות עמודות מהמקור ל-Spanner. הם נכתבים בפורמט הבא: [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]הערה: SourceTableName צריך להישאר זהה גם במקור וגם בזוג Spanner. כדי לשנות את שמות הטבלאות, משתמשים ב-tableOverrides.בדוגמה מוצג מיפוי של SingerName ל-TalentName ושל AlbumName ל-RecordName בטבלאות Singers ו-Albums בהתאמה. לדוגמה, [{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]. ברירת המחדל היא ריק.
  • schemaOverridesFilePath: קובץ שמציין את הטבלה ואת הכינויים של שמות העמודות מהמקור אל Spanner. ברירת המחדל היא ריק.
  • shadowTableSpannerDatabaseId: מסד נתונים נפרד ואופציונלי לטבלאות צל. אם לא מציינים את מסד הנתונים, טבלאות הצללים ייווצרו במסד הנתונים הראשי. אם מציינים את הפרמטר הזה, צריך לציין גם את הפרמטר shadowTableSpannerInstanceId. ברירת המחדל היא ריק.
  • shadowTableSpannerInstanceId: מופע נפרד אופציונלי לטבלאות צללים. אם לא מציינים את המיקום, טבלאות הצללים נוצרות במופע הראשי. אם מציינים את הפרמטר הזה, צריך לוודא שמציינים גם את הפרמטר shadowTableSpannerDatabaseId. ברירת המחדל היא ריק.
  • failureInjectionParameter: פרמטר להזרקת כשלים. היא משמשת לבדיקה בלבד. ברירת המחדל היא ריק.

הפעלת התבנית

המסוף

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

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

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

gcloud

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

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Datastream_to_Spanner \
    --parameters \
inputFilePattern=GCS_FILE_PATH,\
streamName=STREAM_NAME,\
instanceId=CLOUDSPANNER_INSTANCE,\
databaseId=CLOUDSPANNER_DATABASE,\
deadLetterQueueDirectory=DLQ
  

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • GCS_FILE_PATH: הנתיב ב-Cloud Storage שמשמש לאחסון אירועים של Datastream. לדוגמה: gs://bucket/path/to/data/
  • CLOUDSPANNER_INSTANCE: מכונת Spanner.
  • CLOUDSPANNER_DATABASE: מסד הנתונים של Spanner.
  • DLQ: הנתיב ב-Cloud Storage לספריית תור השגיאות.

API

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

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launch_parameter": {
      "jobName": "JOB_NAME",
      "containerSpecGcsPath": "gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Datastream_to_Spanner",
      "parameters": {
          "inputFilePattern": "GCS_FILE_PATH",
          "streamName": "STREAM_NAME"
          "instanceId": "CLOUDSPANNER_INSTANCE"
          "databaseId": "CLOUDSPANNER_DATABASE"
          "deadLetterQueueDirectory": "DLQ"
      }
   }
}
  

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית, שאפשר למצוא אותה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
  • GCS_FILE_PATH: הנתיב ב-Cloud Storage שמשמש לאחסון אירועים של Datastream. לדוגמה: gs://bucket/path/to/data/
  • CLOUDSPANNER_INSTANCE: מכונת Spanner.
  • CLOUDSPANNER_DATABASE: מסד הנתונים של Spanner.
  • DLQ: הנתיב ב-Cloud Storage לספריית תור השגיאות.

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