תבנית Datastream ל-Spanner

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

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

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

כל השגיאות שמתרחשות במהלך הפעולה, כמו אי התאמות בסכימה, קובצי 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: סוג מצב ההרצה. ברירת המחדל היא regular. משתמשים במצב retryDLQ כדי לעבד קבצים עם שגיאות חמורות בלבד במקביל לצינור ההעברה הפעיל. משתמשים במצב retryAllDLQ רק כשצינור הנתונים הרגיל מושבת. במצב הזה מתבצע עיבוד של ספריות עם ניסיונות חוזרים וספריות עם שגיאות חמורות. אל תריצו את retryAllDLQ במקביל לצינור פעיל כלשהו, כי זה יגרום להתנגשויות.
  • 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. ערך ברירת המחדל מספיק ברוב המקרים.
  • sourceConfigURL: נתיב Cloud Storage לקובץ הגדרות של רסיס להעברות עם רסיסים. הוא מצפה לקובץ HOCON או JSON. קובץ לדוגמה זמין בכתובת v2/datastream-to-spanner/src/test/resources/DatastreamToSpannerSingleDFShardedMigrationIT/sharding-config.conf במאגר. לדוגמה, gs://my-bucket/my-shard-config.conf. לדוגמה, gs://my-bucket/my-shard-config.conf.
  • 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. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

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

  5. בתפריט הנפתח Dataflow template (תבנית Dataflow), בוחרים בתבנית Cloud Datastream to Spanner (מ-Cloud Datastream אל Spanner).
  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

כדי להריץ את התבנית באמצעות 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",
      "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 לספריית תור השגיאות.

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