כתיבת נתונים של שירות מנוהל ל-Apache Kafka ל-BigQuery

אם אתם צריכים לטעון הודעות בפורמט AVRO או JSON מנושא של שירות מנוהל ל-Apache Kafka לטבלה ב-BigQuery, אתם יכולים לעשות זאת באמצעות תבנית Dataflow. במסמך הזה מוסבר איך להגדיר צינור נתונים על סמך התבנית הזו באמצעות מסוף Google Cloud . אפשר גם להשתמש ב-API בארכיטקטורת REST או ב-Google Cloud CLI כדי להגדיר את צינור העיבוד הזה.

Google Cloud מוצרים בשימוש

תבנית Kafka to BigQuery Dataflow משתמשת במוצרים הבאים שניתנים לחיוב: Google Cloud אתם יכולים להשתמש במחשבון התמחור כדי ליצור הערכת עלויות בהתאם לשימוש החזוי.

  • ‫BigQuery: ‏ BigQuery הוא מחסן נתונים (data warehouse) ללא שרת של Google Cloud. בפתרון הזה,‏ BigQuery משמש כיעד לנתוני Kafka. ‫ BigQuery Streaming Write API משמש לכתיבת הנתונים ל-BigQuery. לאחר מכן תוכלו להשתמש ב-BigQuery כדי לנתח את הנתונים האלה באמצעות שאילתות SQL, ליצור מודלים של למידת מכונה באמצעות BigQuery ML ולהפעיל את אפליקציות הבינה העסקית שלכם.
  • ‫Dataflow: ‏ Dataflow הוא שירות לעיבוד נתונים שמנוהל באופן מלא. התבנית Kafka to BigQuery Dataflow משתמשת ב-Dataflow כדי ליצור צינור שקורא נתונים מנושא Kafka, מבצע את כל הטרנספורמציות הנדרשות וכותב אותם ל-BigQuery. התכונות של Dataflow להתאמה אוטומטית לעומס ולתיקון עצמי מבטיחות שצינור הנתונים יפעל בצורה אמינה ויעילה.
  • ‫Cloud Storage: למרות שהוא לא מעורב ישירות בזרימת הנתונים המרכזית, אפשר להשתמש ב-Cloud Storage כדי לאחסן את קובצי הסכימה של Avro אם אתם משתמשים בקידוד בינארי של Avro להודעות Kafka. כך צינור עיבוד הנתונים של Dataflow יוכל לפרש את מבנה הנתונים שלכם בצורה נכונה.

בנוסף, הפתרון משתמש גם בשירות מנוהל ל-Apache Kafka.

  • ‫שירות מנוהל ל-Apache Kafka: Google Cloud שירות שעוזר להפעיל את Apache Kafka. השירות המנוהל ל-Apache Kafka מאפשר לכם להתמקד בפיתוח מערכות מבוססות-אירועים ובצינורות עיבוד נתונים בזמן אמת, במקום להתעסק בניהול התשתית. מידע נוסף על התמחור של שירות מנוהל ל-Apache Kafka זמין במדריך התמחור.

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

לפני שמפעילים את תבנית Kafka to BigQuery Dataflow, צריך לוודא שביצעתם את הפעולות הבאות:

  1. יוצרים אשכול ונושא בשירות מנוהל ל-Apache Kafka.

    אחת הדרכים ליצור אשכול ונושא היא לפעול לפי המדריך לתחילת העבודה עם השירות המנוהל ל-Apache Kafka.

    אם הנושא מכיל רשומות Avro, דרישות נוספות לגבי משאבים מפורטות במאמר הגדרת פורמט ההודעות של Kafka

  2. מפעילים את ממשקי ה- Google Cloud API הבאים:

    • Dataflow

    • BigQuery

    • Cloud Storage

    gcloud services enable dataflow.googleapis.com bigquery.googleapis.com \
    storage.googleapis.com
    
  3. יוצרים מערך נתונים וטבלה ב-BigQuery. חשוב לוודא שהסכימה של הטבלה תואמת לסכימה של נושא הקלט של Kafka.

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

    מידע נוסף על יצירת מערך נתונים וטבלה ב-BigQuery זמין במאמרים יצירת מערך נתונים ויצירת טבלה ריקה עם הגדרת סכימה.

מקצים את התפקיד Managed Kafka client לחשבון השירות של העובד (worker) ב-Dataflow

כדי לקשר את עבודת Dataflow לשירות המנוהל ל-Apache Kafka, צריך להעניק הרשאות ספציפיות לחשבון השירות של עובד Dataflow. חשבון השירות הזה הוא הזהות שמשמשת את כל מכונות ה-VM של העובדים בעבודת Dataflow, וכל הבקשות שנשלחות ממכונות ה-VM האלה משתמשות בחשבון הזה.

כדי לאפשר גישה למשאבי Kafka, צריך להעניק את התפקיד roles/managedkafka.client לחשבון השירות של Dataflow worker. התפקיד הזה כולל את ההרשאה managedkafka.clusters.connect שנדרשת ליצירת חיבורים.

מידע נוסף על חשבון השירות של העובד זמין במאמר אבטחה והרשאות של צינורות ב-Google Cloud.

כדי להעניק את התפקיד Managed Kafka client לחשבון השירות של Dataflow:

המסוף

  1. נכנסים לדף IAM במסוף Google Cloud .
    כניסה לדף IAM
  2. מוודאים שהפרויקט מוגדר כפרויקט הצרכן שאליו יתבצעו גישות של לקוח השירות המנוהל ל-Apache Kafka.
  3. לוחצים על הענקת גישה.
  4. בדף החדש, בשדה Add Principals (הוספת חשבונות משתמשים), מזינים את כתובת האימייל של חשבון השירות של עובד Dataflow שבו אתם משתמשים.
  5. בקטע Assign roles (הקצאת תפקידים), בוחרים את התפקיד Managed Kafka client (לקוח מנוהל של Kafka).
  6. לוחצים על Save.

‫CLI של gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

  2. מריצים את הפקודה gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

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

    • ‫PROJECT_ID הוא מזהה הפרויקט.

    • ‫SERVICE_ACCOUNT_EMAIL היא כתובת האימייל של חשבון השירות של העובד (worker) ב-Dataflow.

הפעלת התבנית Kafka to BigQuery Dataflow

אפשר להפעיל את התבנית Kafka to BigQuery Dataflow מדף פרטי האשכול במסוף.

  1. נכנסים לדף Cluster במסוף Google Cloud .

    כניסה לדף Clusters

    מוצגת רשימה של האשכולות שיצרתם בפרויקט.

  2. כדי להציג את דף הפרטים של האשכול, לוחצים על שם האשכול.
  3. בדף הפרטים של האשכול, בקטע Topics (נושאים), לוחצים על הסמל של BigQuery Export (ייצוא ל-BigQuery) עבור כל נושא.

    הדף יצירת משימת Dataflow באמצעות התבנית Kafka to BigQuery נפתח.

מגדירים את השדות בתבנית בהתאם למידע שמופיע בקטעים הבאים.

מזינים שם משרה

בשדה שם המשימה, מזינים שם למשימת Dataflow.

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

בחירת נקודת קצה אזורית לצינור

בשדה Regional endpoint, מגדירים את נקודת הקצה האזורית למיקום של אשכול Kafka או של מערך הנתונים ב-BigQuery, כדי למזער את עמלות העברת הנתונים בין אזורים.

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

כדי לראות את המיקום של האשכול, פועלים לפי השלבים במאמר בנושא הצגת רשימה של אשכולות בשירות המנוהל ל-Apache Kafka.

בחירת תבנית Dataflow

בשדה תבנית Dataflow, משאירים את ערך ברירת המחדל Kafka to BigQuery.

הגדרת המקור

  1. בקטע מקור, משאירים את ערך ברירת המחדל שירות מנוהל ל-Apache Kafka.

  2. ערכי ברירת המחדל של Kafka cluster,‏ Kafka topic ו-Kafka source authentication mode כבר נבחרו על סמך הנושא שבחרתם. שומרים את הערכים האלה.

הגדרת פורמט ההודעות של Kafka

תבנית Dataflow תומכת בשלושה פורמטים של הודעות:

  • פורמט Avro Confluent wire: כל הודעת Kafka כוללת בייט magic, מזהה סכימה ורשומה בקידוד בינארי של Avro. כברירת מחדל, מפתח ההודעה לא נטען ל-BigQuery.

    בפורמטים של Avro (פורמט Confluent wire), אפשר להשתמש בסכימה אחת או בכמה סכימות:

    • סכימה אחת: כל ההודעות תואמות לסכימת Avro מוגדרת מראש.

    • סכימות מרובות: הודעות יכולות להשתמש בסכימות שונות. הפורמט הזה נתמך רק ב-Avro (פורמט Confluent wire).

  • ‫Avro (קידוד בינארי): ההודעות מכילות רק את המטען הייעודי (payload) של הרשומה, ללא מטא-נתונים. חובה לספק קובץ סכימת Avro ‏ (.avsc) שהועלה ל-Cloud Storage. כל ההודעות צריכות להיות בהתאם לסכימה היחידה הזו.

  • ‫JSON: לא נדרשת סכימה מוגדרת מראש לרשומות. רשומות שלא תואמות לסכימת הטבלה ב-BigQuery נשלחות לתור של הודעות שלא ניתן להעביר (אם הוא מוגדר), או שמוצגת הודעת שגיאה. הפורמט הנתמך הוא פורמט {"field": "value"}. הפורמט [{"name": "field", "value": "value"}] לא נתמך.

פורמט Avro Confluent

אם בוחרים באפשרות הזו בתור פורמט ההודעה של Kafka, צריך להגדיר את ההגדרות הנוספות הבאות:

מקור הסכימה: בשדה הזה מציינים את המקום שבו נמצאת הסכימה. בוחרים אחת מהאפשרויות האלה:

  • מאגר סכימות: הסכימות שלכם מאוחסנות במאגר סכימות של Confluent. האפשרות הזו שימושית להתפתחות של סכימות ולניהול של כמה גרסאות. חשוב לוודא שמאגר הסכימות נגיש לרשת של אשכול השירות המנוהל ל-Apache Kafka, ושהוא מתארח באותו אזור כמו העובדים של Dataflow. אפשר להשתמש במאגר סכימות גם במקרים של סכימה אחת וגם במקרים של כמה סכימות. מגדירים את ההגדרות הנוספות הבאות:

    • כתובת ה-URL של החיבור למאגר הסכימות: צריך לספק את כתובת ה-URL לחיבור למאגר הסכימות.

    • מצב אימות: אם המרשם דורש אימות, בוחרים באפשרות OAuth או TLS. אחרת, בוחרים באפשרות ללא.

  • קובץ סכימה יחיד: בוחרים באפשרות הזו אם כל ההודעות שלכם פועלות לפי סכימה קבועה אחת שמוגדרת בקובץ.

    • קובץ של סכימת Avro לקובץ של אחסון בענן: הנתיב לקובץ של סכימת Avro שמשמש לפענוח כל ההודעות בנושא.

שירות מנוהל ל-Apache Kafka לא מציע מאגר סכימות. התבנית תומכת רק בהעברת פרטי אימות למאגרי סכימות שתואמים לפורמט Confluent-wire.

קידוד בינארי של Avro

אם בוחרים באפשרות הזו בתור פורמט ההודעה של Kafka, צריך להגדיר את ההגדרות הנוספות הבאות:

  • קובץ של סכימת Avro לקובץ של אחסון בענן: הנתיב לקובץ של סכימת Avro שמשמש לפענוח כל ההודעות בנושא.

JSON

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

הגדרה של שמירת מפתח Kafka בטבלה ב-BigQuery

אם מפעילים את האפשרות Persist the Kafka message key to the BigQuery table (העברת מפתח ההודעה של Kafka לטבלה ב-BigQuery), צריך גם להוסיף לטבלת היעד שדה בשם _key מסוג BYTES. יכול להיות שהמפתח מייצג נתונים מובְנים, אבל התבנית מתייחסת אליו כמערך בייטים.

הגדרת אפשרויות ההפרש

  1. כדי להימנע מעיבוד מחדש של הודעות כשצריך להפעיל מחדש עובדים בודדים או את כל צינור הנתונים, בוחרים באפשרות Commit offsets to Kafka. כך תוכלו לוודא שצינור הנתונים ימשיך לעבד את הנתונים מהמקום שבו הוא הפסיק, ולמנוע עיבוד כפול ואי-התאמות פוטנציאליות בנתונים.

  2. בשדה Enter Consumer Group ID (הזנת מזהה קבוצת צרכנים), מזינים שם ייחודי לקבוצה של צינור הנתונים הזה. ברוב המקרים, רוצים שצינור הנתונים יקרא כל הודעה פעם אחת ושאפשר יהיה להפעיל אותו מחדש.

  3. בשדה Default Kafka start offset, צינור הנתונים של Dataflow מציע שתי אפשרויות של היסט התחלתי. צריך לבחור אחת מהאפשרויות האלה:

    • המוקדם ביותר: עיבוד הודעות מתחילת נושא Kafka.

    • האחרונה: עיבוד ההודעות מתחיל מההיסט האחרון שזמין.

הגדרת יעד

האפשרויות האלה קובעות איך צינור עיבוד הנתונים כותב נתונים ל-BigQuery.

השדה Table name strategy (אסטרטגיית שמות הטבלאות) קובע איך הנתונים יאורגנו בטבלאות BigQuery. יש שתי אפשרויות:

  • שם טבלה יחיד (ברירת מחדל): כל הנתונים מנושא Kafka נכנסים לטבלה אחת ב-BigQuery. זו האפשרות הפשוטה ביותר והמומלצת אם לנתוני Kafka יש את אותה סכימה.

    בשדה BigQuery output table (טבלת פלט של BigQuery), מציינים את שם הטבלה שבה יישמרו כל הנתונים מנושא Kafka.

  • שמות טבלאות דינמיים: יצירת כמה טבלאות ב-BigQuery על סמך הסכימה של ההודעות ב-Kafka. מומלץ להשתמש באפשרות הזו אם להודעות Kafka יש סכימות שונות. האפשרות הזו פועלת רק אם בצינור שלכם נעשה שימוש ב-Avro Confluent Wire או במאגר סכימות לטיפול במבנה ההודעה.

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

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

    • פרויקט הפלט של BigQuery: הפרויקט Google Cloud שבו נמצא מערך הנתונים שלכם ב-BigQuery.

    • מערך הנתונים של הפלט ב-BigQuery: מערך הנתונים בתוך הפרויקט שבו נוצרות הטבלאות.

    • קידומת לשמות של טבלאות ב-BigQuery (אופציונלי): אפשר להוסיף קידומת לשמות של הטבלאות שנוצרים אוטומטית כדי לשפר את הארגון.

הגדרת BigQuery Storage Write API

בקטע Number of streams for the BigQuery Storage Write API (מספר הזרמים של BigQuery Storage Write API), מתחילים עם 0 (ברירת המחדל). האפשרות הזו מאפשרת לצנרת לקבוע באופן אוטומטי את המספר הטוב ביותר של זרמים.

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

הגדרת תדירות ההפעלה

באפשרות Triggering frequency in seconds for the BigQuery Write API (תדירות ההפעלה בשניות של BigQuery Write API), מתחילים עם 5 שניות (ברירת מחדל). זהו איזון טוב לרוב תרחישי השימוש.

ההגדרה הזו קובעת באיזו תדירות הנתונים נכתבים ל-BigQuery.

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

הגדרת תור להודעות שלא ניתן להעביר

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

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

הגדרת הצפנה

כברירת מחדל, כל הנתונים במצב מנוחה ובזמן ההעברה מוצפנים על ידיGoogle-owned and Google-managed encryption key. אם יש לכם מפתחות הצפנה בניהול הלקוח (CMEK), אתם יכולים לבחור מפתחות משלכם. מידע נוסף על הגדרת CMEK זמין במאמר בנושא הגדרת הצפנת הודעות.

הגדרה של רשתות

צריך לציין את הרשת ואת רשת המשנה של האשכול בתבנית Dataflow. בקטע Optional parameters (פרמטרים אופציונליים) בתבנית אפשר להגדיר את הרשת של העובדים ב-Dataflow.

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

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

מידע נוסף על הגדרת רשת עם צינור Dataflow זמין במאמרים הבאים:

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

הגדרת פרמטרים אופציונליים של Dataflow

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

מעקב

תבנית Dataflow ל-Kafka ל-BigQuery מספקת חוויית מעקב שמאפשרת לכם לעיין ביומנים, במדדים ובשגיאות במסוף. חבילת כלי המעקב הזו זמינה כחלק מממשק המשתמש של Dataflow.

בכרטיסייה מדדים של משימות אפשר ליצור מרכזי בקרה בהתאמה אישית. בתבנית Kafka to BigQuery, מומלץ להגדיר לוח בקרה של מדדי משימות כדי לעקוב אחרי המדדים הבאים:

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

    מידע נוסף זמין במאמר בנושא מעקב אחרי קצב העברת הנתונים ב-Dataflow.

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

    מידע נוסף זמין במאמר בנושא מעקב אחרי עדכניות הנתונים ב-Dataflow.

  • Backlog: כמות הבייטים שממתינים לעיבוד. המידע הזה עוזר לקבל החלטות לגבי שינוי גודל אוטומטי.

מידע נוסף על מעקב ב-Dataflow זמין במאמרי העזרה בנושא מעקב ב-Dataflow.

פתרון בעיות

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

ריכזנו כאן שני תרחישים נפוצים והנחיות לפתרון בעיות שקשורות אליהם:

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

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

  • התבנית לא תומכת בהעברת פרטי כניסה לאימות ל-Schema Registry.

  • כשיוצרים את משימת Kafka ל-BigQuery Dataflow, צריך לוודא שהפרויקט Google Cloud מוגדר לאותו פרויקט שמכיל את האשכול של השירות המנוהל ל-Apache Kafka.

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