תבנית 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. ברירת המחדל היא ריקה.
  • ‫shadowTableSpannerInstanceId: מופע נפרד אופציונלי לטבלאות צללים. אם לא מציינים את המיקום, טבלאות הצללים נוצרות במופע הראשי. אם מציינים את המאפיין הזה, צריך לוודא שמציינים גם את shadowTableSpannerDatabaseId. ברירת המחדל היא ריקה.
  • ‫shadowTableSpannerDatabaseId: מסד נתונים נפרד ואופציונלי לטבלאות צללים. אם לא מציינים, טבלאות הצללים ייווצרו במסד הנתונים הראשי. אם מציינים את הפרמטר הזה, צריך לציין גם את הפרמטר shadowTableSpannerInstanceId. ברירת המחדל היא ריקה.
  • ‫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/VERSION/flex/Cloud_Datastream_to_Spanner \
    --parameters \
inputFilePattern=GCS_FILE_PATH,\
streamName=STREAM_NAME,\
instanceId=CLOUDSPANNER_INSTANCE,\
databaseId=CLOUDSPANNER_DATABASE,\
deadLetterQueueDirectory=DLQ
  

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

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

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

    • latest כדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית ההורה ללא תאריך בדלי – gs://dataflow-templates/latest/
    • שם הגרסה, כמו 2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הזו בתיקיית ההורה המתאימה עם התאריך בדלי – gs://dataflow-templates/
  • ‫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/VERSION/flex/Cloud_Datastream_to_Spanner",
      "parameters": {
          "inputFilePattern": "GCS_FILE_PATH",
          "streamName": "STREAM_NAME"
          "instanceId": "CLOUDSPANNER_INSTANCE"
          "databaseId": "CLOUDSPANNER_DATABASE"
          "deadLetterQueueDirectory": "DLQ"
      }
   }
}
  

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

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

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

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

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