מחבר Cloud Storage Sink מעביר נתונים בסטרימינג מהשירות המנוהל ל-Apache Kafka אל Cloud Storage, וכך מאפשר לאחסן ולעבד כמויות גדולות של נתונים בצורה חסכונית וניתנת להתאמה.
תרחישים נפוצים לדוגמה לשימוש במחבר הזה:
הטמעת אגם נתונים. אחסון נתוני Kafka באגם נתונים (data lake) לצורך העברה לארכיון לטווח ארוך ועיבוד באצווה.
להעביר נתונים לארכיון כדי לעמוד בדרישות הרגולטוריות.
לפני שמתחילים
לפני שיוצרים מחבר Cloud Storage Sink, צריך לוודא שיש לכם:
יוצרים אשכול של שירות מנוהל ל-Apache Kafka בשביל אשכול Connect. זהו אשכול Kafka הראשי שמשויך לאשכול Connect. זהו גם אשכול המקור שיוצר קצה אחד של צינור עיבוד הנתונים של המחבר.
יוצרים אשכול Connect לאירוח של מחבר Cloud Storage Sink.
יוצרים קטגוריה של Cloud Storage כדי לאחסן את הנתונים שמועברים בסטרימינג מ-Kafka.
יוצרים ומגדירים נושא של Kafka באשכול המקור. הנתונים מועברים מהנושא הזה ב-Kafka לקטגוריה של Cloud Storage.
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מחבר, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד עריכת מחבר מנוהל של Kafka (roles/managedkafka.connectorEditor) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מחבר. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור מחבר, צריך את ההרשאות הבאות:
-
יוצרים מחבר:
managedkafka.connectors.create
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מתן הרשאות כתיבה לקטגוריה של Cloud Storage
לסוכן השירות של Managed Kafka צריכות להיות ההרשאות הבאות כדי לכתוב הודעות בקטגוריה של Cloud Storage:
storage.objects.createstorage.objects.delete
כדי לתת את ההרשאות האלה, מקצים לסוכן השירות את התפקיד "משתמש באובייקטים של אחסון" (roles/storage.objectUser) בפרויקט שמכיל את הקטגוריה של Cloud Storage.
אם אשכול Connect נמצא בפרויקט אחר מאשכול השירות המנוהל ל-Apache Kafka, קראו את המאמר יצירת אשכול Connect בפרויקט אחר.
יצירת מחבר Cloud Storage Sink
כדי ליצור מחבר Cloud Storage Sink:
המסוף
נכנסים לדף Connect Clusters במסוף Google Cloud .
לוחצים על אשכול Connect שרוצים ליצור לו את המחבר.
הדף Connect cluster details מוצג.
לוחצים על Create connector.
מוצג הדף Create Kafka connector.
מזינים מחרוזת בשם המחבר.
בשדה Connector plugin, בוחרים באפשרות Cloud Storage Sink.
מציינים את הנושאים שמהם אפשר להעביר נתונים בסטרימינג.
בוחרים את קטגוריית האחסון שבה רוצים לאחסן את הנתונים.
(אופציונלי) קובעים הגדרות נוספות בקטע Configuration.
בוחרים את מדיניות ההפעלה מחדש של המשימה. למידע נוסף, קראו את המאמר מדיניות ההפעלה מחדש של משימות.
לוחצים על יצירה.
gcloud
מריצים את הפקודה gcloud
managed-kafka connectors create:
gcloud managed-kafka connectors create CONNECTOR_ID \
--connect-cluster=CONNECT_CLUSTER_ID \
--location=LOCATION \
--config-file=CONFIG_FILE
מחליפים את מה שכתוב בשדות הבאים:
-
CONNECTOR_ID: המזהה או השם של המחבר. -
CONNECT_CLUSTER_ID: המזהה של אשכול Connect שבו נוצר המחבר. -
LOCATION: המיקום של אשכול Connect. -
CONFIG_FILE: הנתיב לקובץ תצורה מקומי בפורמט YAML או JSON.
הנה דוגמה לקובץ תצורה של מחבר Cloud Storage Sink:
connector.class: "io.aiven.kafka.connect.gcs.GcsSinkConnector"
gcs.bucket.name: "BUCKET_NAME"
gcs.credentials.default: "true"
format.output.type: "json"
key.converter: "org.apache.kafka.connect.storage.StringConverter"
value.converter: "org.apache.kafka.connect.json.JsonConverter"
value.converter.schemas.enable: "false"
topics: "TOPIC_LIST"
tasks.max: "3"
מחליפים את מה שכתוב בשדות הבאים:
BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage שרוצים לכתוב אליה.
TOPIC_LIST: רשימה מופרדת בפסיקים של נושאי Kafka שמהם צריך לקרוא. הרשימה יכולה לכלול גם ביטויים רגולריים.
Terraform
אתם יכולים להשתמש במשאב של Terraform כדי ליצור מחבר.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
המשך
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go בקטע התקנת ספריות הלקוח. מידע נוסף מופיע ב מאמרי העזרה של ה-API של Go עבור שירות מנוהל ל-Apache Kafka.
כדי לבצע אימות בשירות המנוהל ל-Apache Kafka, צריך להגדיר את Application Default Credentials (ADC). מידע נוסף מופיע במאמר הגדרת ADC לסביבת פיתוח מקומית.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java בקטע התקנת ספריות הלקוח. מידע נוסף מופיע ב מאמרי העזרה של Managed Service for Apache Kafka Java API.
כדי לבצע אימות בשירות המנוהל ל-Apache Kafka, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python שמפורטות במאמר התקנת ספריות הלקוח. מידע נוסף מופיע ב מאמרי העזרה של ה-API בשפת Python של שירות מנוהל ל-Apache Kafka.
כדי לבצע אימות בשירות המנוהל ל-Apache Kafka, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת ADC לסביבת פיתוח מקומית.
אחרי שיוצרים מחבר, אפשר לערוך, למחוק, להשהות, לעצור או להפעיל אותו מחדש.
הגדרת המחבר
רשימה מלאה של המאפיינים הספציפיים למחבר הזה מופיעה בקטע Configuration במסמכי התיעוד של Cloud Storage Sink connector.
שדות פלט
כברירת מחדל, המחבר כותב רק את ערך הרשומה מכל רשומת Kafka.
כדי לכלול מפתחות או כותרות של רשומות, מגדירים את המאפיין format.output.fields לרשימה מופרדת בפסיקים של שדות שרוצים לכלול. השדות הנתמכים הם key, value, headers ו-timestamp. לדוגמה:
format.output.fields=key,value,headers
פורמטים של פלט
המחבר תומך בכתיבת רשומות Kafka בפורמטים CSV, JSON ו-Parquet. בקטעים הבאים מוסבר איך להגדיר את פורמט הפלט.
פורמט CSV
כדי לכתוב קובצי CSV ב-Cloud Storage, מגדירים את format.output.type=csv.
משתמשים בממירים הבאים:
ממיר מפתחות:
org.apache.kafka.connect.storage.StringConverterאוorg.apache.kafka.connect.json.JsonConverterממיר ערכים:
org.apache.kafka.connect.converters.ByteArrayConverter
פורמט JSON
כדי לכתוב קובצי JSON ב-Cloud Storage, מגדירים את format.output.type לאחד מהערכים הבאים:
json: כל קובץ פלט מכיל מערך אחד של אובייקטים בפורמט JSON, שבו כל אובייקט מייצג רשומת Kafka אחת.
jsonl: המחבר כותב כל רשומת Kafka כאובייקט JSON בשורה נפרדת.
בדוגמה הבאה אפשר לראות איך המחבר כותב רשומת Kafka בפורמט JSON:
{"headers":[{"key":"k1","value":"v1"},{"key":"k2","value":"v2"}],"value":"Hello world","key":"my-key"}
אם מגדירים את ממיר המפתח או הערך ל-org.apache.kafka.connect.converters.ByteArrayConverter, המחבר כותב את השדה הזה כערך בקידוד Base64.
המחבר לא כולל סכימת JSON בפלט, גם אם הערך של value.converter.schemas.enable הוא true.
פורמט Parquet
כדי לכתוב קובצי Parquet ב-Cloud Storage, מגדירים את format.output.type=parquet.
אם הממיר של המפתח או הערך הוא org.apache.kafka.connect.json.JsonConverter, נתוני ה-JSON חייבים לכלול סכימה. מגדירים את המאפיין schemas.enable של הממיר לערך true.
בנתוני JSON, המחבר כותב את הנתונים כסוג struct בקובץ Parquet. לדוגמה, אם לערך של רשומת Kafka יש שדה בשם userid, המחבר כותב עמודה בשם value.userid. כדי לשטח את שמות העמודות, מגדירים את format.output.envelope=false. אם הערך של format.output.envelope הוא false, צריך לציין ב-format.output.fields שדה פלט אחד.
הגדרות הקבצים ב-Cloud Storage
ההגדרות הבאות קובעות איך המחבר כותב קבצים ב-Cloud Storage.
gcs.bucket.name: שדה חובה. מציין את השם של הקטגוריה ב-Cloud Storage שבה המחבר כותב נתונים.
file.compression.type: מציין את סוג הדחיסה של קובצי הפלט. לדוגמה,gzip,snappy,zstdו-none. ערך ברירת המחדל הואnone.
file.name.prefix: מציין קידומת שתתווסף לשם של כל קובץ. ערך ברירת המחדל ריק ("").
file.name.template: מציין תבנית לשם הקובץ. המחבר תומך במשתני placeholder לתבנית, כמו{{topic}}לשם הנושא ו-{{partition}}למספר המחיצה. מידע נוסף זמין במאמרי העזרה בנושא מחבר Cloud Storage Sink.
file.max.records: המספר המקסימלי של רשומות שאפשר לכתוב בקובץ אחד. אם הערך הוא 0, אין מספר מקסימלי ספציפי. ערך ברירת המחדל הוא 0.
file.max.bytes: גודל הקובץ המקסימלי לכתיבה, בבייטים. אם הערך הוא 0, אין מספר מקסימלי ספציפי. ערך ברירת המחדל הוא 0.
קיבוץ רשומות
כשהמחבר Cloud Storage Sink כותב רשומות של Kafka, כברירת מחדל הוא מקבץ את הרשומות לפי נושא ומחיצה. לדוגמה, רשומות ממחיצה 0 של הנושא my-topic נכתבות לקבצים בשם my-topic-0-OFFSET, כאשר OFFSET הוא ההיסט ההתחלתי.
אם הפרמטר file.name.template כולל את משתנה ה-placeholder {{key}}, המחבר מקבץ רשומות לפי מפתח. במצב הזה, המחבר כותב קובץ נפרד לכל מפתח רשומה. המחבר מחליף כל קובץ ברשומה האחרונה של אותו מפתח.
פרטי כניסה
המאפיין gcs.credentials.default חייב להיות מוגדר לערך true. ההגדרה הזו מאפשרת למחבר לזהות את פרטי הכניסה ל- Google Cloud באופן אוטומטי.