תבנית MQTT ל-Pub/Sub

תבנית 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.

הרצת התבנית

המסוף

  1. עוברים לדף Create job from template (יצירת משימה מתבנית) ב-Dataflow.
  2. כניסה לדף Create job from template
  3. בשדה שם המשימה, מזינים שם ייחודי למשימה.
  4. אופציונלי: בשדה Regional endpoint (נקודת קצה אזורית), בוחרים ערך מהתפריט הנפתח. אזור ברירת המחדל הוא us-central1.

    רשימה של אזורים שבהם אפשר להריץ משימת Dataflow מופיעה במאמר מיקומי Dataflow.

  5. בתפריט הנפתח Dataflow template (תבנית של Dataflow), בוחרים באפשרות MQTT to Pub/Sub template (תבנית MQTT ל-Pub/Sub).
  6. בשדות הפרמטרים שמופיעים, מזינים את ערכי הפרמטרים.
  7. לוחצים על הפעלת העבודה.

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. כדי לפתור את הבעיה, צריך לעדכן את התבנית לגרסה העדכנית ביותר.

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