משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים יבינו את הניתוק הזמני בין Producer ל-Consumer, ויממשו זרימת הודעות בסיסית.

בסוף השיעור הסטודנטים צריכים: לכתוב Producer/Consumer בסיסיים, להסביר Partition/Offset, ולהסביר את תפקיד Consumer Group במניעת עיבוד כפול.

דגש קריטי: הניגוד המפורש מול HTTP סינכרוני (מיחידת ASP.NET Core) הוא המפתח להבנה — התחילו איתו.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו HTTP סינכרוני — “מה אם השירות השני איטי/לא זמין?”
הבעיה: תלות סינכרונית15 דקותOrder Service תלוי בזמינות Inventory+Notification
הרעיון: Topic+Producer+Consumer25 דקותניתוק בזמן, Producer לא ממתין
Partition+Offset20 דקותמקביליות, המשכיות אחרי קריסה
Consumer Group20 דקותמניעת עיבוד כפול, הדגמה עם 2 consumers
תרגול מודרך28 דקותתרגיל 1+2

דגשים להעברת השיעור

  • הניגוד ל-HTTP הוא הכלי החינוכי המרכזי — צרו טבלת השוואה קצרה (HTTP: סינכרוני, ממתין לתשובה, תלות ישירה // Kafka: אסינכרוני, לא ממתין, ניתוק) על הלוח.
  • הדגמת Consumer Group עם 2 מופעים בפועל (לא רק תיאור) היא הדרך היחידה שסטודנטים באמת “יתפסו” למה זה מונע כפילות — תכננו את הסביבה מראש כדי שזה יעבוד חלק.
  • אל תעמיקו מדי בהגדרות תצורה טכניות (Broker, ZooKeeper/KRaft) — למטרות השיעור מספיק שTopic/Partition/Offset/Consumer Group ברורים.

מושגים

Topic — ערוץ בעל שם להודעות. Producer/Consumer — שולח/קורא הודעות. Partition — חלוקה פנימית של Topic, מאפשרת מקביליות. Offset — מיקום קריאה של Consumer. Consumer Group — קבוצה ששולחת ביחד; כל הודעה מטופלת פעם אחת בקבוצה.


תרגיל חשיבה

שאלת פתיחה: “יש לכם 3 מופעים של Inventory Service רצים (לביצועים). בלי Consumer Group משותף, מה קורה כשהודעה אחת מגיעה ל-Topic?”

מהלך: הובילו לתובנה: בלי Consumer Group משותף, כל מופע מקבל את ההודעה בנפרד — 3 עדכוני מלאי לאותה הזמנה, כפילות מסוכנת. עם Consumer Group אחד משותף, ה-3 מופעים “מתחלקים” בעומס — ההודעה מגיעה לאחד מהם בלבד.

מה המרצה מראה בסוף: הריצו 2 Consumers — פעם עם אותו Group ID (הראו שההודעות מתחלקות ביניהם, כל אחד מקבל חלק), ופעם עם Group ID שונה לכל אחד (הראו ששניהם מקבלים את כל ההודעות בנפרד) — ניגוד ישיר שממחיש בדיוק את תפקיד ה-Consumer Group.