Producer - Kafka - קפקה - הרצאה 4 מתוך 5

פורסם: 14 בנובמבר 2019

תקציר

פרודוסר ובחירת פרטישן: Round Robin בלי Key — איזון עומסים אך ללא שליטה בסדר בין ישויות; Hashing עם Key — אותו מפתח לאותו פרטישן וסדר בתוך הפרטישן; בחירת מפתח לוגי; השפעת הוספת פרטישנים על תוצאת ה-Hash ותכנון מראש; סיכום. פרק הבא — קונסיומר ו-Consumer Groups.

האזנה ישירה

תמלול הפרק (לחצו לפתיחה)

קפקא פרק 4 - Producer Strategies ושימוש ב-Keys

שלום לכולם, אני אורן מהייטקיסטים בדרכים, וברוכים הבאים להרצאה הרביעית על קפקא. בהרצאה הקודמת למדנו על המבנה הפנימי של ה-Topic וראינו שהוא מחולק ליחידות שנקראות Partitions. ראינו שהודעות מקבלות Offset בתוך הפרטישן ושסדר ההודעות מובטח רק בתוך אותו פרטישן.

היום נדבר על הצד של ה-Producer (הפרודוסר) ונבין איך הוא מחליט לאיזה פרטישן לשלוח את ההודעה מתוך כל הפרטישנים הקיימים בטופיק. למעשה, יש שתי אסטרטגיות עיקריות שבהן הפרודוסר עובד:

אסטרטגיה ראשונה: Round Robin (ללא Key)

אם הפרודוסר שולח הודעה מבלי לציין לה מפתח (Key), קפקא תשתמש באסטרטגיית Round Robin. מה זה אומר? זה אומר שהודעה ראשונה תלך לפרטישן 0, הודעה שנייה לפרטישן 1, שלישית לפרטישן 2, וכן הלאה במעגל.

היתרון: חלוקת עומסים מושלמת (Load Balancing). כל הפרטישנים וכל הברוקרים מקבלים כמות שווה של הודעות.

החיסרון: אין לנו שום שליטה על הסדר. הודעות שקשורות לאותה ישות (למשל, אותה הזמנה של לקוח) יתפזרו בין פרטישנים שונים, ואז הקונסיומר לא יוכל להבטיח שהוא קורא אותן לפי הסדר הנכון.

אסטרטגיה שנייה: Hashing Strategy (עם Key)

אם הפרודוסר שולח את ההודעה עם Key (מפתח), המצב משתנה. הפרודוסר מפעיל פונקציית Hash על המפתח הזה. התוצאה של ה-Hash קובעת לאיזה פרטישן ההודעה תלך.

הכלל החשוב: עבור אותו Key, תמיד תתקבל אותה תוצאה ב-Hash, ולכן ההודעה תמיד תלך לאותו פרטישן.

למה זה טוב? זה פותר לנו את בעיית הסדר. אם אני אשתמש ב-"Order ID" (מזהה הזמנה) בתור ה-Key, אני יכול להיות בטוח שכל ההודעות שקשורות להזמנה הספציפית הזאת – יצירת הזמנה, תשלום, ומשלוח – כולן יגיעו לאותו פרטישן. ומכיוון שקפקא מבטיחה סדר בתוך הפרטישן, הקונסיומר יקרא אותן בדיוק לפי סדר הגעתן.

חשוב להבין שמפתח יכול להיות כל דבר: מחרוזת (String), מספר (Integer), או אפילו אובייקט מורכב יותר. בדרך כלל נבחר מפתח שיש לו משמעות לוגית במערכת שלנו, כמו ID של משתמש או מזהה של מוצר.

מה קורה אם אנחנו מוסיפים פרטישנים לטופיק קיים?

זה נושא שחשוב להכיר. פונקציית ה-Hash מתבססת על כמות הפרטישנים בטופיק. אם נחליט להוסיף פרטישנים לטופיק שכבר רץ, ה-Hash של אותו Key ייתן תוצאה אחרת, והודעות חדשות עם אותו מפתח עלולות להגיע לפרטישן שונה מבעבר. לכן, מומלץ לתכנן מראש את כמות הפרטישנים בטופיק שמשתמש ב-Keys.

לסיכום, ראינו שהפרודוסר יכול לעבוד ב-Round Robin כדי לאזן עומסים, או להשתמש ב-Keys כדי להבטיח שמידע קשור יישמר באותו פרטישן וישמור על הסדר.

תודה שהקשבתם, בהרצאה הבאה אנחנו נתחיל לדבר על הצד של הקונסיומר ונלמד על Consumer Groups. נתראה בהרצאה הבאה!