תבנית MQTT ל-Pub/Sub היא צינור עיבוד נתונים בסטרימינג שקורא הודעות מנושא MQTT וכותב אותן ל-Pub/Sub.
הוא כולל את הפרמטרים האופציונליים username ו-password למקרה ששרת ה-MQTT דורש אימות.
הדרישות לגבי צינורות עיבוד נתונים
- השם של נושא הפלט ב-Pub/Sub חייב להיות קיים.
- כתובת ה-IP של מארח ה-MQTT צריכה להיות קיימת ולהיות מוגדרת ברשת בצורה מתאימה כדי שמכונות העובדים יוכלו להגיע למארח ה-MQTT.
- לנושא ה-MQTT שממנו מחלצים את הנתונים צריך להיות שם.
פרמטרים של תבניות
פרמטרים נדרשים
- inputTopic: השם של נושא ה-MQTT שממנו הנתונים נקראים. לדוגמה,
topic. - outputTopic: השם של נושא הפלט ב-Pub/Sub שהנתונים נכתבים אליו. לדוגמה,
projects/your-project-id/topics/your-topic-name. - username: שם המשתמש שמשמש לאימות בשרת MQTT. לדוגמה,
sampleusername. - password: הסיסמה שמשויכת לשם המשתמש שסופק. לדוגמה,
samplepassword.
פרמטרים אופציונליים
- brokerServer: כתובת ה-IP או המארח של שרת מתווך MQTT. לדוגמה,
tcp://host:1883.
הרצת התבנית
המסוף
- עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow. כניסה לדף Create job from template
- בשדה שם המשימה, מזינים שם ייחודי למשימה.
- אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא
us-central1.רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.
- בתפריט הנפתח Dataflow template (תבנית של Dataflow), בוחרים באפשרות MQTT to Pub/Sub template (תבנית MQTT ל-Pub/Sub).
- בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
- לוחצים על הפעלת העבודה.
gcloud
במעטפת או בטרמינל, מריצים את התבנית:
gcloud dataflow flex-template run JOB_NAME \ --project=YOUR_PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Mqtt_to_PubSub \ --parameters \ brokerServer=MQTT_SERVER,\ inputTopic=INPUT_TOPIC,\ outputTopic=OUTPUT_TOPIC,\ username=USERNAME,\ password=PASSWORD
בדוגמה הזו צריך להחליף את הערכים הבאים:
- מחליפים את YOUR_PROJECT_ID במזהה הפרויקט.
- מחליפים את בשם האזור של Dataflow. לדוגמה:
us-central1. - מחליפים את JOB_NAME בשם של המשימה לבחירתכם. שם המשרה חייב להתאים לביטוי הרגולרי
[a-z]([-a-z0-9]{0,38}[a-z0-9])?כדי להיחשב כתקין. - מחליפים את INPUT_TOPIC בשם של נושא הקלט של שרת MQTT. לדוגמה:
testtopic. - מחליפים את MQTT_SERVER בכתובות של שרת ה-MQTT. לדוגמה:
tcp://10.128.0.62:1883 - מחליפים את OUTPUT_TOPIC בשם של נושא הפלט ב-Pub/Sub. לדוגמה:
projects/myproject/topics/testoutput. - מחליפים את USERNAME בשם המשתמש של שרת ה-MQTT. לדוגמה:
testuser. - מחליפים את PASSWORD בסיסמה שמתאימה לשם המשתמש שמשמש עם שרת ה-MQTT.
API
כדי להפעיל את התבנית באמצעות API בארכיטקטורת REST, שולחים בקשת HTTP POST. מידע נוסף על ה-API ועל היקפי ההרשאות שלו זמין במאמר projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "parameters": { "brokerServer": "MQTT_SERVER", "inputTopic": "INPUT_TOPIC", "outputTopic": "OUTPUT_TOPIC", "username": "USERNAME", "password": "PASSWORD" }, "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Mqtt_to_PubSub", } }
בדוגמה הזו צריך להחליף את הערכים הבאים:
- מחליפים את YOUR_PROJECT_ID במזהה הפרויקט.
- מחליפים את בשם האזור של Dataflow. לדוגמה:
us-central1. - מחליפים את JOB_NAME בשם של המשימה לבחירתכם. שם המשרה חייב להתאים לביטוי הרגולרי
[a-z]([-a-z0-9]{0,38}[a-z0-9])?כדי להיחשב כתקין. - מחליפים את INPUT_TOPIC בשם של נושא הקלט של שרת MQTT. לדוגמה:
testtopic. - מחליפים את MQTT_SERVER בכתובות של שרת ה-MQTT. לדוגמה:
tcp://10.128.0.62:1883 - מחליפים את OUTPUT_TOPIC בשם של נושא הפלט ב-Pub/Sub. לדוגמה:
projects/myproject/topics/testoutput. - מחליפים את USERNAME בשם המשתמש של שרת ה-MQTT. לדוגמה:
testuser. - מחליפים את PASSWORD בסיסמה שמתאימה לשם המשתמש שמשמש עם שרת ה-MQTT.
בעיות מוכרות
לפני Apache Beam 2.76.0, אם צינור הנתונים לא מקבל הודעה מנושא MQTT במשך יותר מ-90 דקות, מתרחשת StackOverflowError. כדי לפתור את הבעיה, צריך לעדכן את התבנית לגרסה העדכנית ביותר.
המאמרים הבאים
- מידע נוסף על תבניות Dataflow
- כאן אפשר לעיין ברשימת התבניות ש-Google סיפקה.