# מערך שיעור: Kafka — Topics, Partitions, Consumer Groups📋 מערך מרצה

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

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

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

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

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הזכירו HTTP סינכרוני — "מה אם השירות השני איטי/לא זמין?" |
| הבעיה: תלות סינכרונית | 15 דקות | Order Service תלוי בזמינות Inventory+Notification |
| הרעיון: Topic+Producer+Consumer | 25 דקות | ניתוק בזמן, Producer לא ממתין |
| Partition+Offset | 20 דקות | מקביליות, המשכיות אחרי קריסה |
| Consumer Group | 20 דקות | מניעת עיבוד כפול, הדגמה עם 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.
