שימוש בתמונות מצב של Dataflow

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

אפשר ליצור תמונת מצב של Dataflow של כל משימת סטרימינג שפועלת. שימו לב: כל משימה חדשה שתיצרו מתמונת מצב תשתמש ב-Streaming Engine. אפשר גם להשתמש בתמונת מצב של Dataflow כדי להעביר את צינור הנתונים הקיים למנוע הסטרימינג היעיל והניתן להרחבה, עם זמן השבתה מינימלי.

במדריך הזה מוסבר איך ליצור תמונות מצב, לנהל תמונות מצב וליצור משימות מתמונות מצב.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

יצירת תמונת מצב

המסוף

  1. נכנסים לדף Jobs ב-Dataflow במסוף Google Cloud .

    מעבר אל Jobs

    מוצגת רשימה של משימות Dataflow עם הסטטוס שלהן. אם לא מופיעים ג'ובים של סטרימינג, צריך להריץ ג'וב חדש של סטרימינג. דוגמה לעבודת סטרימינג אפשר לראות במאמר מדריך למתחילים בנושא שימוש בתבניות.

  2. בוחרים משרה.
  3. בסרגל התפריטים בדף פרטי המשרה, לוחצים על יצירת תמונת מצב.
  4. בתיבת הדו-שיח יצירת תמונת מצב, בוחרים באחת מהאפשרויות הבאות:
    • ללא מקורות נתונים: בוחרים באפשרות הזו כדי ליצור תמונת מצב של סטטוס העבודה של Dataflow בלבד.
    • עם מקורות נתונים: בוחרים באפשרות הזו כדי ליצור תמונת מצב של מצב העבודה של Dataflow וגם תמונת מצב של מקור Pub/Sub.
  5. לוחצים על יצירה.

gcloud

כדי ליצור תמונת מצב:

gcloud dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

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

  • JOB_ID: מזהה משימת הסטרימינג
  • DURATION: משך הזמן (בימים) לפני שתוקף ה-snapshot יפוג, ולאחר מכן לא ניתן יהיה ליצור עוד עבודות מה-snapshot. הדגל snapshot-ttl הוא אופציונלי, ולכן אם לא מציינים אותו, תוקף התמונה יפוג תוך 7 ימים. מציינים את הערך בפורמט הבא: 5d. משך הזמן המקסימלי שאפשר לציין הוא 30 ימים (30d).
  • REGION: האזור שבו פועלת משימת הסטרימינג

הדגל snapshot-sources מציין אם ליצור תמונת מצב של מקורות Pub/Sub יחד עם תמונת המצב של Dataflow. אם true, מקורות Pub/Sub מצולמים באופן אוטומטי, ומזהי התמונות של Pub/Sub מוצגים בתגובת הפלט. אחרי שמריצים את הפקודה create, מריצים את הפקודה list או את הפקודה describe כדי לבדוק את סטטוס התמונה.

ההנחיות הבאות חלות כשיוצרים תמונות מצב של Dataflow:

  • על צילומי מצב של Dataflow חל חיוב על שימוש בדיסק.
  • קובצי ה-snapshot נוצרים באותו אזור שבו מתבצעת המשימה.
  • אם מיקום העובד של העבודה שונה מהאזור של העבודה, יצירת התמונה תכשל. אפשר לעיין במדריך בנושא אזורי Dataflow.
  • אפשר לצלם תמונות מצב רק של משימות שאינן Streaming Engine אם המשימות הופעלו או עודכנו אחרי 1 בפברואר 2021.
  • תמונות מצב של Pub/Sub שנוצרו באמצעות תמונות מצב של Dataflow מנוהלות על ידי שירות Pub/Sub וכרוכות בתשלום.
  • התוקף של תמונת מצב ב-Pub/Sub יפוג תוך 7 ימים ממועד היצירה שלה. משך החיים המדויק שלו נקבע בזמן היצירה לפי הפיגור הקיים במינוי המקור. ספציפית, משך החיים של תמונת המצב ב-Pub/Sub הוא 7 days - (age of oldest unacked message in the subscription). לדוגמה, נניח שיש מינוי שההודעה הכי ישנה שלו שלא אושרה היא בת 3 ימים. אם נוצר snapshot ב-Pub/Sub מהמינוי הזה, תוקף ה-snapshot יפוג תוך 4 ימים. ה-snapshot תמיד יתעד את ה-backlog בן 3 הימים כל עוד ה-snapshot קיים. מידע נוסף זמין במאמר הפניה לתמונת מצב של Pub/Sub.
  • במהלך פעולת יצירת תמונת המצב, עבודת Dataflow מושהית ומופעלת מחדש אחרי שתמונת המצב מוכנה. משך הזמן הדרוש תלוי בגודל של מצב צינור הנתונים. לדוגמה, הזמן שנדרש לצילום תמונות מצב במשימות של Streaming Engine קצר יותר בדרך כלל מהזמן שנדרש במשימות שלא מבוססות על Streaming Engine.
  • אפשר לבטל את העבודה בזמן שיצירת התמונה מתבצעת, ואז התמונה תבוטל.
  • אי אפשר לעדכן או לרוקן את העבודה בזמן שמתבצעת יצירת תמונת מצב. צריך להמתין עד שהעבודה תחזור לפעולה מתהליך יצירת התמונה לפני שאפשר לעדכן או לנקז את העבודה.

שימוש בדף 'תמונות מצב'

אחרי שיוצרים snapshot, אפשר להשתמש בדף Snapshots בGoogle Cloud מסוףGoogle Cloud כדי לראות ולנהל את ה-snapshots של הפרויקט.

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

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

מחיקת תמונת מצב

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

המסוף

  1. נכנסים לדף Snapshots של Dataflow במסוף Google Cloud .

    כניסה לדף Snapshots

  2. בוחרים את התמונה של מצב המערכת ולוחצים על מחיקה.
  3. בתיבת הדו-שיח מחיקת תמונת מצב, לוחצים על מחיקה כדי לאשר.

gcloud

כדי למחוק תמונת מצב:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

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

  • SNAPSHOT_ID: מזהה ה-snapshot
  • REGION: האזור שבו קיים קובץ ה-snapshot

מידע נוסף זמין במאמר בנושא הפקודה delete.

יצירת משרה מתמונת מצב

אחרי שיוצרים תמונת מצב, אפשר לשחזר את המצב של משימת Dataflow על ידי יצירת משימה חדשה מתמונת המצב הזו.

Java

כדי ליצור משימה חדשה מתמונת מצב, משתמשים בדגלים --createFromSnapshot ו---enableStreamingEngine.

  • במעטפת או במסוף, יוצרים משימה חדשה מ-snapshot. לדוגמה:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -Dexec.args="--project=PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --inputFile=gs://apache-beam-samples/shakespeare/* \
        --output=gs://STORAGE_BUCKET/output \
        --runner=DataflowRunner \
        --enableStreamingEngine \
        --createFromSnapshot=SNAPSHOT_ID \
        --region=REGION"

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

    • MAIN_CLASS או MODULE: בצינורות Java, המיקום של המחלקה הראשית שמכילה את קוד צינור עיבוד הנתונים. בצינורות Python, המיקום של המודול שמכיל את קוד הצינור. לדוגמה, כשמשתמשים בדוגמה של ספירת מילים, הערך הוא org.apache.beam.examples.WordCount.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • STORAGE_BUCKET: הקטגוריה של Cloud Storage שבה משתמשים בשביל נכסי עבודה זמניים והפלט הסופי
    • SNAPSHOT_ID: מזהה ה-snapshot של ה-snapshot שממנו רוצים ליצור משימה חדשה
    • REGION: המיקום שבו רוצים להריץ את משימת Dataflow החדשה

Python

כדי ליצור תמונות מצב של Dataflow, צריך להשתמש ב-Apache Beam SDK ל-Python בגרסה 2.29.0 ואילך.

כדי ליצור משימה חדשה מתמונת מצב, משתמשים בדגלים --createFromSnapshot ו---enableStreamingEngine.

  • במעטפת או במסוף, יוצרים משימה חדשה מ-snapshot. לדוגמה:
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

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

    • MAIN_CLASS או MODULE: בצינורות Java, המיקום של המחלקה הראשית שמכילה את קוד צינור עיבוד הנתונים. בצינורות Python, המיקום של המודול שמכיל את קוד הצינור. לדוגמה, כשמשתמשים בדוגמה של ספירת מילים, הערך הוא org.apache.beam.examples.WordCount.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • STORAGE_BUCKET: הקטגוריה של Cloud Storage שבה משתמשים בשביל נכסי עבודה זמניים והפלט הסופי
    • SNAPSHOT_ID: מזהה ה-snapshot של ה-snapshot שממנו רוצים ליצור משימה חדשה
    • REGION: המיקום שבו רוצים להריץ את משימת Dataflow החדשה

ההגבלות הבאות חלות כשיוצרים משימות מתמונות מצב של Dataflow:

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

  • אם תמונת מצב של Dataflow לא כוללת תמונות מצב של מקורות Pub/Sub, ועבודת המקור משתמשת במקור Pub/Sub, צריך לציין נושא Pub/Sub כשיוצרים עבודות מתמונת המצב הזו של Dataflow.

  • משימות חדשות שנוצרו מתמונת מצב עדיין כפופות לבדיקת תאימות לעדכון.

מגבלות ידועות

המגבלות הבאות חלות על תמונות מצב של Dataflow:

  • אי אפשר ליצור עבודות מתמונות מצב באמצעות תבניות או עורך Dataflow SQL.
  • אי אפשר לעדכן או לרוקן משימה בזמן שמתבצעת יצירת תמונת מצב. צריך להמתין עד שהעבודה תחזור לפעולה מתהליך הצילום של התמונה לפני שאפשר לעדכן או לרוקן את העבודה.
  • אפשר להגדיר את משך הזמן עד לתפוגה של התמונה רק באמצעות Google Cloud CLI.
  • אין תמיכה בתמונות מצב של יעד. לדוגמה, אי אפשר ליצור תמונת מצב של BigQuery כשיוצרים תמונת מצב של Dataflow.

פתרון בעיות

בקטע הזה מפורטות הוראות לפתרון בעיות נפוצות שמתגלות במהלך אינטראקציה עם תמונות מצב של Dataflow.

לפני שפונים לתמיכה, חשוב לוודא שאין בעיות שקשורות למגבלות הידועות ולפתרון הבעיות שמוסבר בקטעים הבאים.

הבקשה ליצירת תמונת מצב נדחית

אחרי ששולחים בקשה ליצירת תמונת מצב, דרךGoogle Cloud המסוף או ה-CLI של gcloud, שירות Dataflow מבצע בדיקה של תנאים מוקדמים ומחזיר הודעות שגיאה. יכולות להיות סיבות שונות לדחיית הבקשה ליצירת תמונת מצב, שמפורטות בהודעות השגיאה – למשל, אם סוג העבודה לא נתמך או אם אזור מסוים לא זמין.

אם הבקשה נדחית כי המשימה ישנה מדי, צריך לעדכן את המשימה לפני שמבקשים תמונת מצב.

יצירת תמונת המצב נכשלה

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

יצירת משימה מתמונת מצב נכשלה

כשיוצרים משימה מ-snapshot, צריך לוודא שה-snapshot קיים ושלא פג התוקף שלו. המשימה החדשה צריכה לפעול ב-Streaming Engine.

לפתרון בעיות נפוצות ביצירת משימות, אפשר לעיין במדריך לפתרון בעיות של Dataflow. בפרט, משימות חדשות שנוצרו מתמונות מצב עוברות בדיקת תאימות לעדכון, שבה נדרשת תאימות בין המשימה החדשה לבין משימת המקור שצולמה בתמונת המצב.

משימה שנוצרה מתמונת מצב מתקדמת לאט

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

במשימות שנוצרו מתמונות מצב של Dataflow שכוללות תמונות מצב של מקור Pub/Sub, יכול להיות שיהיו למשימה החדשה הרבה נתונים מצטברים של Pub/Sub לעיבוד. שינוי אוטומטי של קנה מידה (autoscaling) של סטרימינג יכול לעזור למשימה החדשה לנקות את ה-backlog מהר יותר.

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