במאמר הזה מוסבר איך לעקוב אחרי אשכול של שירות מנוהל ל-Apache Kafka כדי לוודא את המהימנות של עומסי העבודה של Kafka.
סקירה כללית
מהימנות היא היכולת של מערכת לפעול בצורה נכונה ועקבית לאורך זמן. בעומסי עבודה מבוססי-Kafka, המהימנות כוללת את אשכולות Kafka עצמם, וגם את אפליקציות הלקוח שמפיקות הודעות וצורכות אותן.
השירות המנוהל ל-Apache Kafka מיועד לסבול כשלים נפוצים רבים ולהתאושש מהם. לדוגמה, השירות ממקם רפליקות באזורים שונים כדי לספק עמידות בפני תקלות, ומפעיל מחדש באופן אוטומטי ברוקרים שנכשלים. עם זאת, יש גורמים אחרים שמשפיעים על האמינות ולא נמצאים בשליטה ישירה של השירות, כמו:
- הגדרת לקוח
- עומס על האשכול, כולל עומס ממוצע ושיאים
- מספר המחיצות וההעתקים
- הגדרות של נושאים, כמו שמירת הודעות
כדי להבטיח פעולה מהימנה, חשוב לעקוב אחרי הפרמטרים התפעוליים האלה של האשכול ולשמור אותם בטווחים המומלצים. בקטעים הבאים מפורטים כמה מדדים חשובים שמשפיעים על המהימנות.
מעקב אחר קיבולת האשכול
כדי למנוע עומס יתר על אשכול, כדאי לעקוב אחרי האותות הבאים. כדאי ליצור התראות כדי לקבל הודעה אם הם חורגים מהטווח המומלץ למשך תקופה ממושכת.
ניצול המעבד (CPU). מומלץ לשמור על ניצול מעבד מתחת ל-80% בכל הברוקרים.
ניצול הדיסק של ה-Broker: מוודאים שרמת הניצול של הדיסק של ה-Broker נמוכה מ-80%.
גודל הדיסק. כנקודת התחלה בטוחה, מומלץ להגדיר לפחות
2*(segment.bytes)לכל מחיצה לכל ברוקר. בפועל, הדרישות לגבי הדיסק לרוב נמוכות משמעותית.כברירת מחדל, קובץ פלח נסגר ומועבר לאחסון מרוחק אחרי 7 ימים. בדרך כלל, רוב המחיצות מקבלות פחות מ-
segment.bytesנתונים במהלך התקופה הזו, כלומר רוב המחיצות משתמשות בפחות מ-segment.bytesמנפח הדיסק. לפני שמגדילים את גודל הדיסק, כדאי לעקוב אחרי ניצול הדיסק כשיוצרים עוד מחיצות באשכול.מספר המחיצות. כדאי לנסות לשמור על פחות מ-4,000 מחיצות לכל ברוקר, ופחות מ-100,000 מחיצות לכל אשכול.
אם הקיבולת של האשכול נמוכה, כדאי לנסות את הפתרונות הבאים:
הגדלת מספר ליבות ה-vCPU באשכול. מידע נוסף זמין במאמר בנושא עדכון של אשכול Kafka.
כדי להוסיף עוד ברוקרים, מגדילים את האשכול. מידע על הקצאת ברוקרים על ידי השירות זמין במאמר הקצאת ברוקרים.
הגדלת גודל הדיסק של הברוקר. מידע נוסף זמין במאמר בנושא הגדרת גודל הדיסק של הברוקר.
בטבלה הבאה מוצגות שאילתות של Prometheus Query Language (PromQL) לגבי המדדים האלה, שאפשר להוסיף ללוח בקרה מותאם אישית של Cloud Monitoring.
| אות | שאילתת PromQL |
|---|---|
| ניצול יחידת העיבוד המרכזית (CPU) | rate( { "managedkafka.googleapis.com/cpu/core_usage_time", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/cpu/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| ניצול הדיסק של הברוקר | max_over_time( { "managedkafka.googleapis.com/disk/used_bytes", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| גודל הפלח לכל מחיצה | # Assumes that segment files are 225 MiB. Check your cluster configuration. 2*225*(1024*1024) * max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| מחיצות לכל ברוקר | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| מחיצות לכל אשכול | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
מעקב אחרי יתרת המחיצה בקרב ברוקרים
עומס לא אחיד עלול למנוע מאשכול Kafka לטפל בבקשות של לקוחות בצורה תקינה. מספר המחיצות שמוקצות למתווך יחיד צריך להיות בטווח של כ-10% ממספר המחיצות הממוצע לכל מתווך. חיפוש חריגים במדד הזה.
כדי לשמור על מחיצות מאוזנות, מומלץ להפעיל איזון מחדש אוטומטי בהגדלת הקיבולת באשכול.
בטבלה הבאה מוצגות שאילתות PromQL שאפשר להשתמש בהן כדי לעקוב אחרי חוסר איזון במחיצות.
| אות | שאילתת PromQL |
|---|---|
| מספר המחיצות לכל ברוקר | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| חוסר איזון בחלוקה למחיצות | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) / on (resource_container, location, cluster_id) group_left avg by (resource_container, location, cluster_id) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) - 1 |
מעקב אחרי שכפול מחיצות
שכפול נתונים הוא קריטי כדי להבטיח שעומסי העבודה שלכם יהיו עמידים בפני תקלות. במערכת בריאה, לכל מחיצה בנושא יש את המספר המלא של העותקים, בהתאם לגורם השכפול שהוגדר בנושא.
אפשר להשתמש באותות הבאים כדי לעקוב אחרי שכפול המחיצות:
מתחת למינימום של רפליקות בסנכרון (ISR). אם למחיצה יש פחות רפליקות ISR מסונכרנות מהמינימום שהוגדר (
min.insync.replicas), קיים סיכון חמור לאובדן נתונים ולזמינות. בדרך כלל, המצב הזה נגרם בגלל קיבולת לא מספקת באחד או יותר מהברוקרים, או בגלל כשלים בתשתית.מחיצות עם שכפול חלקי. מחיצה לא משוכפלת מספיק אם מספר העותקים שסונכרנו יורד מתחת לגורם השכפול. אם מחיצה לא משוכפלת במשך עשרות דקות, יכול להיות שיש בעיה בברוקרים, בנפח האחסון או במשהו אחר.
במהלך הפעלה מחדש הדרגתית, הברוקרים לא זמינים בזמן שהם מופעלים מחדש, מה שגורם לשכפול חלקי זמני. המצב הזה צפוי ולא דורש התערבות.
בטבלה הבאה מוצגות שאילתות PromQL שאפשר להשתמש בהן כדי לעקוב אחרי השכפול.
| אות | שאילתת PromQL |
|---|---|
| מתחת למינימום של ISR | max by ( resource_container, location, cluster_id ) ( max_over_time( { "managedkafka.googleapis.com/broker/under_min_isr_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| בתהליך רפליקציה | max by ( resource_container, location, cluster_id ) ( min_over_time( { "managedkafka.googleapis.com/broker/under_replicated_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[10m:${__interval}] ) ) |
המאמרים הבאים
- מעקב אחרי אשכול Kafka
- מעקב אחרי אפליקציות לקוח של Kafka
- תכנון הגודל של אשכול Kafka
- יצירה וניהול של לוחות בקרה בהתאמה אישית