גישה לנתוני Kafka ב-BigQuery

אם אתם צריכים לטעון הודעות בפורמט AVRO או JSON מנושא של שירות מנוהל של Google Cloud ל-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 יוכל לפרש את מבנה הנתונים שלכם בצורה נכונה.

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

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

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

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

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

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

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

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

    • 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.

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

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

בשדה Job name (שם המשימה), מזינים שם למשימת Dataflow.

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

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

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

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

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

בחירת תבנית של Dataflow

בקטע Dataflow template (תבנית Dataflow), משאירים את ערך ברירת המחדל Kafka to BigQuery (מ-Kafka ל-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 wire

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

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

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

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

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

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

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

שירות מנוהל של Google Cloud ל-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.

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

Apache Kafka®‎ הוא סימן מסחרי רשום של The Apache Software Foundation או של השותפים העצמאיים שלה בארצות הברית או במדינות אחרות.

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