מחבר מקור של Cloud SQL ל-PostgreSQL מאפשר לתעד שינויים ברמת השורה ממסד נתונים של Cloud SQL ל-PostgreSQL ולכתוב אותם לנושאים באשכול של שירות מנוהל ל-Apache Kafka.
תרחישים נפוצים לדוגמה לשימוש במחבר הזה:
- מעקב בזמן אמת אחרי שינויים במסד הנתונים ברמת השורה.
- לשלב אירועים של שינויים במסד הנתונים בארכיטקטורה מבוססת-אירועים.
- להגיב לאירועים במסד הנתונים, כמו הוספה או מחיקה של שורות.
- העתקת שינויים במסד הנתונים למערכות אחרות.
לפני שמתחילים
לפני שיוצרים מחבר מקור של Cloud SQL ל-PostgreSQL, צריך לוודא שיש לכם:
מכונה של Cloud SQL ל-PostgreSQL עם מסד נתונים. במאמר יצירה של מסד נתונים ב-Cloud SQL ל-PostgreSQL ושליחת שאילתות אליו באמצעות מסוף Google Cloud מוסבר איך יוצרים את המשאבים האלה.
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מחבר, בקשו מהאדמין להקצות לכם את התפקיד עריכת מחבר מנוהל של Kafka (roles/managedkafka.connectorEditor) ב-IAM בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מחבר. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור מחבר, צריך את ההרשאות הבאות:
-
יוצרים מחבר:
managedkafka.connectors.create
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מתן הרשאות לקריאה מ-Cloud SQL
לחשבון השירות של Managed Kafka צריכה להיות הרשאת גישה ל-Cloud SQL ל-PostgreSQL. מקצים לחשבון השירות את התפקידים הבאים ב-IAM:
- לקוח Cloud SQL (
roles/cloudsql.client) - משתמש במכונה של Cloud SQL (
roles/cloudsql.instanceUser)
חשבון השירות של Managed Kafka הוא בפורמט הבא: service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com, כאשר PROJECT_NUMBER הוא מספר הפרויקט של אשכול Connect.
אם אשכול Connect נמצא בפרויקט אחר מאשכול השירות המנוהל ל-Apache Kafka, קראו את המאמר יצירת אשכול Connect בפרויקט אחר.
הגדרת מסד הנתונים
לפני שיוצרים את המחבר, צריך להגדיר את שכפול מסד הנתונים ולאפשר למחבר לבצע אימות מול מסד הנתונים. הסעיפים הבאים מתארים את השלבים האלה.
הפעלת פענוח לוגי
מחבר מקור של Cloud SQL ל-PostgreSQL מסתמך על התכונה פענוח לוגי של PostgreSQL. כדי להפעיל פענוח לוגי במכונה של Cloud SQL ל-PostgreSQL, מבצעים את הפעולות הבאות.
המסוף
עוברים אל Cloud SQL > Instances.
לוחצים על השם של המכונה.
לוחצים על עריכה.
מרחיבים את הקטע דגלים ופרמטרים.
לוחצים על Add a database flag.
ברשימה בחירת תווית, בוחרים באפשרות
cloudsql.logical_decoding.בשדה Value, בוחרים באפשרות
On.לוחצים על סיום.
לוחצים על Save.
מידע נוסף זמין במאמר הגדרה של שכפול לוגי ופענוח.
הגדרת סימון נתונים שהשתנו (CDC)
אחרי שמפעילים פענוח לוגי במכונה, מפעילים את התכונה "סימון נתונים שהשתנו" (CDC) בטבלאות שרוצים לשכפל.
כדי להפעיל CDC בטבלה, מריצים את הצהרת ה-SQL CREATE PUBLICATION. ההצהרה הזו יוצרת פרסום, שמגדיר קבוצת טבלאות לשכפול.
אפשרות 1. יוצרים פרסום שמשכפל את השינויים בכל הטבלאות במסד הנתונים.
CREATE PUBLICATION dbz_publication FOR ALL TABLES;אפשרות 2. יוצרים פרסום לקבוצה ספציפית של טבלאות.
CREATE PUBLICATION dbz_publication FOR TABLE TABLE_LIST;מחליפים את
TABLE_LISTברשימה מופרדת בפסיקים של טבלאות, בפורמט"schema_name"."table_name". כדי למנוע שגיאות תחביר אם השמות מכילים תווים מיוחדים או אותיות רישיות, צריך להקיף את שמות הסכימה והטבלה במירכאות כפולות, כמו בדוגמה.
כברירת מחדל, המחבר משתמש ב-dbz_publication בתור שם אתר החדשות. כדי להשתמש באתר חדשות עם שם אחר, אפשר לעיין בקטע שם אתר החדשות.
יצירת חשבון משתמש לחשבון השירות של Managed Kafka
המחבר של מקור Cloud SQL ל-PostgreSQL משתמש באימות של מסד נתונים ב-IAM כדי להתחבר למסד הנתונים. כדי להפעיל אימות של מסד נתונים ב-IAM, מוסיפים את חשבון השירות של Managed Kafka למכונה של Cloud SQL:
המסוף
עוברים אל Cloud SQL > Instances.
לוחצים על השם של המכונה.
בחלונית הניווט, לוחצים על משתמשים.
לוחצים על הוספת חשבון משתמש.
בחלונית Add a user account, בוחרים באפשרות Cloud IAM.
בשדה IAM principal, מזינים את הערך הבא:
service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.comמחליפים את
PROJECT_NUMBERבמספר הפרויקט של אשכול Connect.לוחצים על הוספה.
gcloud
מריצים את הפקודה gcloud sql users create:
gcloud sql users create service-PROJECT_NUMBER@gcp-sa-managedkafka.iam \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUMBER: מספר הפרויקט של אשכול Connect.
INSTANCE_NAME: השם של המכונה של Cloud SQL ל-PostgreSQL.
בגלל מגבלת האורך של שם משתמש במסד נתונים, הסיומת .gserviceaccount.com מושמטת משם המשתמש, כך ששם המשתמש הוא service-PROJECT_NUMBER@gcp-sa-managedkafka.iam. כשמריצים שאילתות SQL שמפנות לחשבון המשתמש ב-IAM, צריך לציין את השם המקוצר.
הגדרת חשבון המשתמש
אחרי שיוצרים את חשבון המשתמש ב-IAM, מתחברים למסד הנתונים כמשתמש עם התפקיד cloudsqlsuperuser (למשל, המשתמש postgres שמוגדר כברירת מחדל) ומריצים את שאילתות ה-SQL הבאות.
המסוף
מאפשרים למשתמש לקרוא את יומן הכתיבה מראש.
ALTER USER "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam" WITH REPLICATION;נותנים למשתמש את ההרשאה
SELECTבטבלאות.GRANT SELECT ON ALL TABLES IN SCHEMA "SCHEMA_NAME" TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";לחלופין, אפשר להעניק את ההרשאה
SELECTבטבלאות ספציפיות. אם בוחרים באפשרות הזו, צריך גם להגדיר את מאפיין ההגדרהtable.include.listשל המחבר לרשימת הטבלאות המותרות. שאילתת ה-SQL הבאה מעניקה הרשאתSELECTבטבלה אחת:GRANT SELECT ON TABLE SCHEMA_NAME.TABLE_NAME TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";לכל טבלה, נותנים למשתמש גישה לסכימה של הטבלה. אם הטבלה נמצאת בסכימת ברירת המחדל
public, אפשר לדלג על השלב הזה.GRANT USAGE ON SCHEMA SCHEMA_NAME TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";
הגדרה של רשתות
אפשר לחבר מחבר מקור של Cloud SQL ל-PostgreSQL למכונה של Cloud SQL בדרכים הבאות:
- כתובת IP פרטית
- התחברות לשירות פרטי
- כתובת IP ציבורית
במאמר בחירת אופן ההתחברות ל-Cloud SQL תוכלו לקרוא מידע נוסף על האפשרויות האלה. כדי לשמור על אבטחה, מומלץ להשתמש בכתובת IP פרטית או ב-Private Service Connect, כי האפשרויות האלה לא דורשות חיבור לכתובת IP חיצונית.
בטבלה הבאה מוצגות דרישות הרשת לכל אפשרות:
| סוג כתובת ה-IP | דרישות |
|---|---|
| כתובת IP פרטית | מגדירים כתובת IP פרטית למכונה. מידע נוסף זמין במאמר הגדרת כתובת IP פרטית. |
| התחברות לשירות פרטי |
|
| כתובת IP ציבורית |
|
יצירת מחבר מקור של Cloud SQL ל-PostgreSQL
כדי ליצור מחבר מקור של Cloud SQL ל-PostgreSQL:
כשהמחבר מופעל, הוא מבצע את הפעולות הבאות:
- יוצר תמונת מצב ראשונית של מסד הנתונים.
- יוצר נושא Kafka לכל טבלה שיש בה שורות.
- לכל שורה במסד הנתונים, נשלח אירוע שינוי לנושא המתאים.
בזמן שהמחבר פועל, הוא ממשיך לשלוח אירועי שינוי לנושאים. מידע נוסף על קובץ ה-snapshot הראשוני זמין בקטע Snapshots במסמכי התיעוד של Debezium.
המסוף
נכנסים לדף Connect Clusters במסוף Google Cloud .
לוחצים על אשכול ה-Connect שבו רוצים ליצור את המחבר.
לוחצים על Create connector.
מזינים מחרוזת בשם המחבר.
בשדה Connector plugin, בוחרים באפשרות Cloud SQL ל-PostgreSQL Source.
ברשימה Instance, בוחרים את המכונה של Cloud SQL.
ברשימה Database, בוחרים את מסד הנתונים של Cloud SQL.
בשדה Topic prefix, מזינים קידומת לשמות הנושאים של Kafka. בחרו קידומת ייחודית לכל מחבר מקור של Cloud SQL ל-PostgreSQL.
אופציונלי: בשדה Table names, מזינים רשימה מופרדת בפסיקים של טבלאות, כדי לקרוא מהן את נתוני השינויים, בפורמט
"schema_name"."table_name". אם משאירים את השדה הזה ריק, המחבר קורא את נתוני השינויים מכל הטבלאות שהן לא טבלאות מערכת במסד הנתונים.אופציונלי: בתיבה Configurations, מוסיפים מאפייני הגדרות או עורכים את מאפייני ברירת המחדל. מידע נוסף זמין במאמר הגדרת המחבר.
יכול להיות שתצטרכו לשנות את ברירות המחדל של המאפיינים הבאים:
driver.ipTypes: המאפיין הזה צריך להתאים להגדרות הרשת של המכונה ב-Cloud SQL. סוגים של כתובות IP
slot.name: אם יוצרים כמה מופעים של המחבר לאותו מסד נתונים, צריך לציין ערך ייחודי לכל מחבר. משבצות רפליקציה
אופציונלי: בוחרים את מדיניות ההפעלה מחדש של המשימה. מידע נוסף זמין במאמר מדיניות הפעלה מחדש של משימות.
לוחצים על יצירה.
gcloud
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
מריצים את הפקודה
gcloud managed-kafka connectors create:gcloud managed-kafka connectors create CONNECTOR_ID \ --location=LOCATION \ --connect-cluster=CONNECT_CLUSTER_ID \ --config-file=CONFIG_FILEמחליפים את מה שכתוב בשדות הבאים:
CONNECTOR_ID: המזהה או השם של המחבר. הנחיות למתן שמות למשאבים של שירות מנוהל ל-Apache Kafka אי אפשר לשנות את השם של המחבר.
LOCATION: המיקום שבו יוצרים את המחבר. המיקום הזה צריך להיות זהה למיקום שבו יצרתם את אשכול Connect.
CONNECT_CLUSTER_ID: המזהה של אשכול Connect שבו נוצר המחבר.
CONFIG_FILE: הנתיב לקובץ התצורה ב-YAML של המחבר.
דוגמה לקובץ תצורה של המחבר למקור Cloud SQL ל-PostgreSQL:
connector.class: io.debezium.connector.postgresql.PostgresConnector database.dbname: DATABASE_NAME driver.cloudSqlInstance: INSTANCE_ID driver.enableIamAuth: "true" driver.ipTypes: IP_TYPES driver.sslmode: disable key.converter: org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable: "false" plugin.name: pgoutput slot.name: SLOT_NAME table.include.list: TABLE_LIST topic.prefix: TOPIC_PREFIX value.converter: org.apache.kafka.connect.json.JsonConverter value.converter.schemas.enable: "true"מחליפים את מה שכתוב בשדות הבאים:
INSTANCE_ID: המזהה של המכונה ב-Cloud SQL שמכילה את מסד הנתונים, בפורמט הבא:PROJECT_ID:REGION:INSTANCE_NAME
DATABASE_NAME: השם של מסד הנתונים ב-Cloud SQL שממנו רוצים לקרוא.
IP_TYPES: רשימה מופרדת בפסיקים של סוגי כתובות IP
SLOT_NAME: השם של משבצת הרפליקציה שרוצים ליצור.
TABLE_LIST: רשימה מופרדת בפסיקים של טבלאות שמהן צריך לקרוא את נתוני השינויים, בפורמט"schema_name"."table_name".
TOPIC_PREFIX: תחילית לשמות הנושאים של Kafka.
הגדרת המחבר
בקטע הזה מתוארים כמה מאפייני הגדרה שאפשר להגדיר במחבר. הרשימה המלאה מופיעה במאמר Debezium connector for PostgreSQL במסמכי התיעוד של Debezium.
סוגים של כתובות IP
המאפיין driver.ipTypes מציין את סוג כתובת ה-IP שבה המחבר משתמש כדי להתחבר למסד הנתונים:
-
PRIVATE: כתובת IP פרטית PSC: Private Service Connect-
PUBLIC: כתובת IP ציבורית
המאפיין driver.ipTypes מכיל רשימה מופרדת בפסיקים של סוגי IP בסדר מועדף, לדוגמה, driver.ipTypes=PRIVATE,PUBLIC.
מידע נוסף זמין במאמר הגדרת רשת.
שם אתר החדשות
כברירת מחדל, המחבר מנסה להעביר בסטרימינג מפרסום בשם dbz_publication.
כדי לציין אתר חדשות אחר, מוסיפים להגדרה את publication.name=PUBLICATION_NAME, כאשר PUBLICATION_NAME הוא שם אתר החדשות. לדוגמה:
publication.name=my_publication.
משבצות שכפול
PostgreSQL משתמש במשבצות רפליקציה כדי להעביר בסטרימינג שינויים בטבלאות של מסד הנתונים. כברירת מחדל, המחבר יוצר מיקום שכפול בשם debezium. כדי להשתמש בשם אחר של מיקום מודעה, מגדירים את המאפיין slot.name.
אם יוצרים שני מופעים של המחבר לאותו מסד נתונים, צריך לציין שם משבצת ייחודי לכל מחבר.
כברירת מחדל, המחבר מגדיר את המאפיין
slot.drop.on.stop לערך false כדי למנוע אובדן נתונים. כשמוחקים מחבר באופן סופי, צריך למחוק באופן ידני את משבצת השכפול שבה המחבר השתמש. שם ברירת המחדל של משבצת הרפליקציה הוא debezium, אלא אם מגדירים אותו אחרת באמצעות המאפיין slot.name.
מומלץ להגדיר התראות למעקב אחרי השימוש בדיסק WAL בשרת מסד הנתונים של PostgreSQL במקור, ולמחוק את כל משבצות השכפול שלא בשימוש.
מסנן טבלה
כברירת מחדל, המחבר מתעד את נתוני השינויים מכל טבלה שהיא לא טבלת מערכת במסד הנתונים. כדי לסנן את הטבלאות שמתועדות, מציינים לפחות אחת מההגדרות הבאות:
-
schema.include.list. רשימה של סכימות שרוצים לכלול. -
schema.exclude.list. רשימה של סכימות שצריך להחריג. אי אפשר להשתמש בו עםschema.include.list. -
table.include.list. רשימת הטבלאות שרוצים לכלול. -
table.exclude.list. רשימת הטבלאות שרוצים להחריג. אי אפשר להשתמש בו עםtable.include.list.
שמות הנושאים
כברירת מחדל, המחבר יוצר נושאי Kafka לפי המוסכמה הבאה למתן שמות: topic_prefix.schema.table_name, כאשר topic.prefix הוא הערך של ההגדרה topic.prefix.
למידע נוסף, קראו את הקטע Topic names במסמכי התיעוד של Debezium.
המאמרים הבאים
- פתרון בעיות במחבר מקור של PostgreSQL
- פתרון בעיות באשכולות ובמחברים של Connect
- יצירת מחבר גנרי למקור PostgreSQL