איזון מחדש דינמי של עומס העבודה

התכונה Dynamic Work Rebalancing (איזון דינמי של עומס העבודה) בשירות Dataflow מאפשרת לשירות לחלק מחדש את עומס העבודה באופן דינמי על סמך תנאי זמן הריצה. התנאים האלה יכולים לכלול:

  • חוסר איזון במטלות העבודה
  • העובדים מסיימים את העבודה בזמן ארוך מהצפוי
  • העובדים מסיימים מהר יותר מהצפוי

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

מגבלות

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

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

Java

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

Python

אם מגדירים מספר קבוע של רסיסים לפלט הסופי של צינור הנתונים (לדוגמה, על ידי כתיבת נתונים באמצעות beam.io.WriteToText(..., num_shards=...)), Dataflow מגביל את ההפעלה המקבילית על סמך מספר הרסיסים שבוחרים.

Go

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

עבודה עם מקורות נתונים מותאמים אישית

Java

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

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

Python

אם צינור הנתונים משתמש במקור נתונים בהתאמה אישית שאתם מספקים, צריך להטמיע את RangeTracker, ‏ try_claim,‏ try_split, ‏ position_at_fraction וfraction_consumed כדי שהמקור יוכל לפעול עם התכונה 'איזון מחדש דינמי של עומסי עבודה'.

מידע נוסף זמין במאמר הפניית API בנושא RangeTracker.

Go

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

מידע נוסף זמין במאמר מידע על הפניית RTracker API.

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