מכסות קפקא הן חלק בלתי נפרד מאשכולות קפקא מרובי דיירים. הם מונעים מביצועי האשכולות של קפקא להיות מושפעים לרעה מיישומים שאינם מתנהגים בצורה גרועה הצורכים משאבי אשכולות יתר. יתרה מזאת, הם מאפשרים לפלטפורמת הזרמת הנתונים המרכזית להיות מופעלת כפלטפורמה מרובת דיירים ולשימוש יישומים במורד הזרם ובמעלה הזרם על פני מספר קווי עסקים. קפקא תומך בשני סוגים של מכסות: מכסות רוחב הפס של הרשת ו לבקש מכסות תעריפים. מכסות רוחב הפס של הרשת מגדירות ספי קצב בתים כגון כמה נתונים יישומי לקוח יכולים לייצר ולצרוך מכל ברוקר בודד באשכול קפקא הנמדד בבייטים לשנייה. מכסות תעריף בקשות מגבילות את אחוז הזמן שכל מתווך משקיע בעיבוד בקשות של לקוחות. בהתאם לתצורה שלך, ניתן להגדיר מכסות קפקא עבור משתמשים ספציפיים, מזהי לקוח ספציפיים או שניהם.
In חלק 1 בסדרה בת שני חלקים זו, דנו במושגים כיצד לאכוף מכסות קפקא אמזון מנוהל סטרימינג עבור אפאצ'י קפקא (Amazon MSK) אשכולות בזמן השימוש AWS זהות וניהול גישה בקרת גישה (IAM).
בפוסט זה, אנו מדריכים אותך דרך היישום שלב אחר שלב של הגדרת מכסות קפקא באשכול MSK תוך שימוש בקרת גישה של IAM ובדיקתן באמצעות יישומי לקוח לדוגמה.
סקירת פתרונות
הדמות הבאה, אותה הצגנו לראשונה חלק 1, ממחיש כיצד יישומי לקוח של קפקא (ProducerApp-1
, ConsumerApp-1
, ו ConsumerApp-2
) גישה Topic-B
באשכול MSK על ידי הנחת תפקידי כתיבה וקריאה של IAM. לכל אפליקציה של יצרן ולקוח צרכן יש מכסה שקובעת כמה נתונים הם יכולים לייצר או לצרוך בבתים/שנייה. ה ProducerApp-1
המכסה מאפשרת לה לייצר עד 1024 בתים/שנייה לכל מתווך. באופן דומה, ה ConsumerApp-1
ו ConsumerApp-2
המכסות מאפשרות להם לצרוך 5120 ו-1024 בייטים לשנייה לכל מתווך, בהתאמה. להלן הסבר קצר על הזרימה המוצגת בתרשים הארכיטקטורה:
- P1 -
ProducerApp-1
(דרך שלהProducerApp-1-Role
תפקיד IAM) מניח אתTopic-B-Write-Role
תפקיד IAM לשלוח אליו הודעותTopic-B
- P2 - עם ה
Topic-B-Write-Role
תפקיד IAM קיבל,ProducerApp-1
מתחיל לשלוח הודעות לTopic-B
- C1 -
ConsumerApp-1
(דרך שלהConsumerApp-1-Role
תפקיד IAM) וConsumerApp-2
(דרך שלהConsumerApp-2-Role
תפקיד IAM) מניחים אתTopic-B-Read-Role
תפקיד IAM לקריאת הודעותTopic-B
- C2 - עם ה
Topic-B-Read-Role
תפקיד IAM קיבל,ConsumerApp-1
וConsumerApp-2
להתחיל לצרוך הודעות מTopic-B
שימו לב שהפוסט הזה משתמש ב- ממשק שורת הפקודה של AWS (AWS CLI), AWS CloudFormation תבניות, ואת קונסולת הניהול של AWS עבור הקצאה ושינוי של משאבי AWS, והמשאבים שיסופקו יחויבו לחשבון AWS שלך.
השלבים ברמה הגבוהה הם כדלקמן:
- אספקת אשכול MSK עם בקרת גישה של IAM ו ענן מחשוב אלסטי של אמזון (Amazon EC2) מופעים עבור יישומי לקוח.
- צור
Topic-B
על אשכול MSK. - צור תפקידי IAM לגישה ליישומי הלקוח
Topic-B
. - הפעל את יישומי היצרן והצרכן מבלי לקבוע מכסות.
- הגדר את התוצרת והצריכה של מכסות עבור יישומי הלקוח.
- הפעל מחדש את האפליקציות לאחר הגדרת המכסות.
תנאים מוקדמים
מומלץ לקרוא חלק 1 של הסדרה הזו לפני שתמשיך. כדי להתחיל, אתה צריך את הדברים הבאים:
- חשבון AWS שייקרא חשבון ההדגמה בפוסט זה, בהנחה שמזהה החשבון שלו הוא
1111 1111 1111
- הרשאות ליצור, למחוק ולשנות משאבי AWS בחשבון ההדגמה
אספקת אשכול MSK עם בקרת גישה של IAM ומופעי EC2
שלב זה כולל הקצאת אשכול MSK עם בקרת גישה של IAM ב-VPC בחשבון ההדגמה. בנוסף, אנו יוצרים ארבעה מופעי EC2 כדי לבצע שינויים בתצורה באשכול MSK ויישומי מפיק מארח ולקוח צרכני.
פרוס מחסנית CloudFormation
- שיבט את מאגר GitHub כדי להוריד את קבצי תבניות CloudFormation ויישומי לקוח לדוגמה:
- במסוף CloudFormation של AWS, בחר ערימות בחלונית הניווט.
- בחרו צור ערימה.
- בעד הכן תבנית, בחר התבנית מוכנה.
- בעד מקור התבנית, בחר העלה קובץ תבנית.
- העלה את ה-
cfn-msk-stack-1.yaml
קובץ מ-amazon-msk-kafka-quotas/cfn-templates
ספרייה, ולאחר מכן בחר הַבָּא. - בעד שם ערימה, להיכנס
MSKStack
. - השאר את הפרמטרים כברירת מחדל ובחר הַבָּא.
- גלול לתחתית ה- הגדר אפשרויות ערימה דף ובחר הַבָּא כדי להמשיך.
- גלול לתחתית ה- סקירה עמוד, בחר בתיבת הסימון אני מכיר בכך ש-CloudFormation עשויה ליצור משאבי IAM, ולבחור חפש.
ייקח בערך 30 דקות להשלמת הערימה. לאחר יצירת המחסנית בהצלחה, ייווצרו המשאבים הבאים:
- VPC עם שלוש רשתות משנה פרטיות ורשת משנה ציבורית אחת
- אשכול MSK עם שלושה מתווכים עם בקרת גישה IAM מופעלת
- נקרא מופע EC2
MSKAdminInstance
לשינוי הגדרות אשכול MSK וכן יצירה ושינוי של משאבי AWS - מופעי EC2 עבור
ProducerApp-1
,ConsumerApp-1
, וConsumerApp-2
, אחד עבור כל יישום לקוח - תפקיד IAM נפרד עבור כל מופע EC2 המארח את יישום הלקוח, כפי שמוצג בתרשים הארכיטקטורה
- מהערימה יציאות לשונית, שימו לב ל
MSKClusterArn
ערך.
צור נושא באשכול MSK
ליצור Topic-B
באשכול MSK, השלם את השלבים הבאים:
- במסוף אמזון EC2, נווט אל רשימת מופעי ה-EC2 הפועלים.
- בחר
MSKAdminInstance
מופע EC2 ובחר לְחַבֵּר. - על מנהל מושב בחר, בחר לְחַבֵּר.
- הפעל את הפקודות הבאות בכרטיסייה החדשה שנפתחת בדפדפן שלך:
- הגדר את משתנה הסביבה כך שיצביע על נקודת הקצה של ברוקרים MSK Cluster IAM:
- שימו לב לערך של
BOOTSTRAP_BROKERS_IAM
. - הפעל את פקודת Kafka CLI הבאה כדי ליצור
Topic-B
על אשכול MSK:
מכיוון שאשכול MSK מסופק עם בקרת גישה של IAM, האפשרות --command-config
נקודות ל config_iam.properties
, המכיל את המאפיינים הנדרשים לבקרת גישה של IAM, שנוצרו על ידי ה- MSKStack
מחסנית CloudFormation.
האזהרות הבאות עשויות להופיע בעת הפעלת פקודות קפקא CLI, אך ייתכן שתתעלם מהן:
- כדי לאמת זאת
Topic-B
נוצר, רשום את כל הנושאים:
צור תפקידי IAM עבור יישומי לקוח כדי לגשת לנושא-ב
שלב זה כולל יצירה Topic-B-Write-Role
ו Topic-B-Read-Role
כפי שמוצג בתרשים הארכיטקטורה. Topic-B-Write-Role
מאפשר פעולות כתיבה על Topic-B
, וניתן להניח על ידי ה ProducerApp-1
. באופן דומה, ה ConsumerApp-1
ו ConsumerApp-2
יכול להניח Topic-B-Read-Role
לביצוע פעולות קריאה על Topic-B
. לביצוע פעולות קריאה על Topic-B
, ConsumerApp-1
ו ConsumerApp-2
חייב להשתייך גם לקבוצות הצרכנים שצוינו במהלך MSKStack
עדכון מחסנית בשלב הבא.
צור את התפקידים עם השלבים הבאים:
- במסוף CloudFormation של AWS, בחר ערימות בחלונית הניווט.
- בחר
MSKStack
ולבחור עדכון. - בעד הכן תבנית, בחר החלף תבנית נוכחית.
- בעד מקור התבנית, בחר העלה קובץ תבנית.
- העלה את ה-
cfn-msk-stack-2.yaml
קובץ מ-amazon-msk-kafka-quotas/cfn-templates
ספרייה, ולאחר מכן בחר הַבָּא. - ספק את הפרמטרים הבאים של מחסנית:
-
- בעד נושא B ARN, להיכנס ל
Topic-B
RNA.
- בעד נושא B ARN, להיכנס ל
ה-ARN חייב להיות בפורמט כ arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. השתמש בשם האשכול וב-UUID של האשכול מאשכול MSK ARN שציינת קודם לכן וספק את אזור ה-AWS שלך. למידע נוסף, עיין ב בקרת גישה של IAM עבור אמזון MSK.
-
- בעד שם קבוצת הצרכנים ConsumerApp-1, להיכנס
ConsumerApp-1
קבוצת הצרכנים ARN.
- בעד שם קבוצת הצרכנים ConsumerApp-1, להיכנס
זה חייב להיות בפורמט כ arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- בעד שם קבוצת הצרכנים ConsumerApp-2, להיכנס
ConsumerApp-2
קבוצת הצרכנים ARN.
- בעד שם קבוצת הצרכנים ConsumerApp-2, להיכנס
השתמש בפורמט דומה ל-ARN הקודם.
- בחרו הַבָּא כדי להמשיך.
- גלול לתחתית ה- הגדר מחסנית דף אפשרויות ובחר הַבָּא כדי להמשיך.
- גלול לתחתית ה- סקירה עמוד, בחר בתיבת הסימון אני מכיר בכך ש-CloudFormation עשויה ליצור משאבי IAM, ולבחור עדכן מחסנית.
ייקח בערך 3 דקות עד שהערימה תתעדכן. לאחר שהמחסנית עודכנה בהצלחה, ייווצרו המשאבים הבאים:
- נושא-ב-כתיבה-תפקיד – תפקיד IAM עם הרשאה לבצע פעולות כתיבה עליו
Topic-B
. מדיניות האמון שלה מאפשרת אתProducerApp-1-Role
תפקיד IAM לקבל את זה. - נושא-ב-קריאה-תפקיד - תפקיד IAM עם הרשאה לבצע פעולות קריאה
Topic-B
. מדיניות האמון שלה מאפשרת אתConsumerApp-1-Role
וConsumerApp-2-Role
תפקידי IAM לקבל את זה. יתר על כן,ConsumerApp-1
וConsumerApp-2
חייב להיות שייך גם לקבוצות הצרכנים שציינת בעת עדכון המחסנית כדי לבצע עליהן פעולות קריאהTopic-B
.
- מהערימה יציאות לשונית, שימו לב ל
TopicBReadRoleARN
וTopicBWriteRoleARN
ערכים.
הפעל את יישומי היצרן והצרכן מבלי לקבוע מכסות
הנה, אנחנו רצים ProducerApp-1
, ConsumerApp-1
, ו ConsumerApp-2
מבלי לקבוע את המכסות שלהם. מהשלבים הקודמים, תצטרך BOOTSTRAP_BROKERS_IAM
ערך Topic-B-Write-Role
ARN, ו Topic-B-Read-Role
ARN. קוד המקור של יישומי הלקוח והגירסאות הארוזות שלהם זמינים ב- מאגר GitHub.
הפעל את היישום ConsumerApp-1
כדי להפעיל את ConsumerApp-1
יישום, בצע את השלבים הבאים:
- בקונסולת אמזון EC2, בחר את ה
ConsumerApp-1
מופע EC2 ובחר לְחַבֵּר. - על מנהל מושב בחר, בחר לְחַבֵּר.
- הפעל את הפקודות הבאות בכרטיסייה החדשה שנפתחת בדפדפן שלך:
- הפעל את
ConsumerApp-1
אפליקציה להתחיל לצרוך ממנה הודעותTopic-B
:
אתה יכול למצוא את קוד מקור ב-GitHub לעיונך. הפרטים של פרמטר שורת הפקודה הם כדלקמן:
- -שרתי bootstrap – נקודת קצה IAM לברוקרים באשכול אתחול MSK.
- –לקבל-תפקיד-ארן -
Topic-B-Read-Role
תפקיד IAM ARN. בהנחת תפקיד זה,ConsumerApp-1
יקרא הודעות מהנושא. - -אזור - אזור שבו אתה משתמש.
- –שם-נושא – שם הנושא שממנו
ConsumerApp-1
יקרא הודעות. ברירת המחדל היאTopic-B
. - -קבוצת צרכנים – שם קבוצת צרכנים עבור
ConsumerApp-1
, כפי שצוין במהלך עדכון המחסנית. - –שם מפגש תפקיד -
ConsumerApp-1
מניח אתTopic-B-Read-Role
באמצעות שירות אסימון האבטחה AWS (AWS STS) SDK.ConsumerApp-1
ישתמש בשם זה של הפעלת תפקיד בעת קריאה ל-assumeRole
פונקציה. - -מזהה לקוח - זיהוי לקוח עבור
ConsumerApp-1
. - –מדדי-מכסה-צרכן-הדפסה – דגל המציין אם יש להדפיס מדדי לקוח במסוף על ידי
ConsumerApp-1
. - –cw-dimension-name - אמזון CloudWatch שם המאפיין שישמש לפרסום מדדי החמצת הלקוח
ConsumerApp-1
. - -cw-dimension-value - ערך הממד של CloudWatch שישמש לפרסום מדדי החמצת לקוח מ
ConsumerApp-1
. - –cw-namespace – מרחב שמות איפה
ConsumerApp-1
יפרסם מדדי CloudWatch על מנת לנטר את המצערת.
- אם אתה מרוצה משאר הפרמטרים, השתמש בפקודה הבאה ושנה
--assume-role-arn
ו--region
לפי הסביבה שלך:
השמיים fetch-throttle-time-avg
ו fetch-throttle-time-max
מדדי לקוח צריכים להציג 0.0, המציין שלא מתרחשת גז עבור ConsumerApp-1
. זכור שלא קבענו את מכסת הצריכה עבור ConsumerApp-1
עדיין. תן לזה לרוץ לזמן מה.
הפעל את היישום ConsumerApp-2
כדי להפעיל את ConsumerApp-2
יישום, בצע את השלבים הבאים:
- בקונסולת אמזון EC2, בחר את ה
ConsumerApp-2
מופע EC2 ובחר לְחַבֵּר. - על מנהל מושב בחר, בחר לְחַבֵּר.
- הפעל את הפקודות הבאות בכרטיסייה החדשה שנפתחת בדפדפן שלך:
- הפעל את
ConsumerApp-2
אפליקציה להתחיל לצרוך ממנה הודעותTopic-B
:
לקוד יש פרטים דומים לפרמטרים של שורת הפקודה כמו ConsumerApp-1
דנו קודם, למעט הדברים הבאים:
- -קבוצת צרכנים – שם קבוצת צרכנים עבור
ConsumerApp-2
, כפי שצוין במהלך עדכון המחסנית. - –שם מפגש תפקיד -
ConsumerApp-2
מניח אתTopic-B-Read-Role
באמצעות AWS STS SDK.ConsumerApp-2
ישתמש בשם זה של הפעלת תפקיד בעת קריאה ל-assumeRole
פונקציה. - -מזהה לקוח - זיהוי לקוח עבור
ConsumerApp-2
.
- אם אתה מרוצה משאר הפרמטרים, השתמש בפקודה הבאה ושנה
--assume-role-arn
ו--region
לפי הסביבה שלך:
השמיים fetch-throttle-time-avg
ו fetch-throttle-time-max
מדדי לקוח צריכים להציג 0.0, המציין שלא מתרחשת גז עבור ConsumerApp-2
. זכור שלא קבענו את מכסת הצריכה עבור ConsumerApp-2
עדיין. תן לזה לרוץ לזמן מה.
הפעל את היישום ProducerApp-1
כדי להפעיל את ProducerApp-1
יישום, בצע את השלבים הבאים:
- בקונסולת אמזון EC2, בחר את ה
ProducerApp-1
מופע EC2 ובחר לְחַבֵּר. - על מנהל מושב בחר, בחר לְחַבֵּר.
- הפעל את הפקודות הבאות בכרטיסייה החדשה שנפתחת בדפדפן שלך:
- הפעל את
ProducerApp-1
אפליקציה להתחיל לשלוח אליה הודעותTopic-B
:
אתה יכול למצוא את קוד מקור ב-GitHub לעיונך. הפרטים של פרמטר שורת הפקודה הם כדלקמן:
- -שרתי bootstrap – נקודת קצה IAM לברוקרים באשכול אתחול MSK.
- –לקבל-תפקיד-ארן -
Topic-B-Write-Role
תפקיד IAM ARN. בהנחת תפקיד זה,ProducerApp-1
יכתוב הודעות לנושא. - –שם-נושא -
ProducerApp-1
ישלח הודעות לנושא זה. ברירת המחדל היאTopic-B
. - -אזור - אזור AWS שבו אתה משתמש.
- –מספר-הודעות – מספר ההודעות את
ProducerApp-1
הבקשה תישלח לנושא. - –שם מפגש תפקיד -
ProducerApp-1
מניח אתTopic-B-Write-Role
באמצעות AWS STS SDK.ProducerApp-1
ישתמש בשם זה של הפעלת תפקיד בעת קריאה ל-assumeRole
פונקציה. - -מזהה לקוח - זיהוי לקוח של
ProducerApp-1
. - -סוג מפיק -
ProducerApp-1
ניתן להפעיל גם באופן סינכרוני or באופן אסינכרוני. אפשרויות הן לסנכרן or אסינכרוני. - –מדדי יצרן-הדפסה – דגל המציין האם יש להדפיס את מדדי הלקוח במסוף על ידי ProducerApp-1.
- –cw-dimension-name - שם המאפיין של CloudWatch שישמש לפרסום מדדי החמצת הלקוח מ ProducerApp-1.
- -cw-dimension-value - ערך הממד של CloudWatch שישמש לפרסום מדדי החמצת לקוח מ ProducerApp-1.
- –cw-namespace – מרחב השמות שבו ProducerApp-1 יפרסם מדדי CloudWatch על מנת לנטר את המצערת.
- אם אתה מרוצה משאר הפרמטרים, השתמש בפקודה הבאה ושנה
--assume-role-arn
ו--region
לפי הסביבה שלך. כדי להפעיל מפיק קפקא סינכרוני, הוא משתמש באפשרות--producer-type sync
:
לחלופין, השתמש --producer-type async
להפעיל מפיק אסינכרוני. לפרטים נוספים, עיין ב שליחה אסינכרונית.
השמיים produce-throttle-time-avg
ו produce-throttle-time-max
מדדי לקוח צריכים להציג 0.0, המציין שלא מתרחשת גז עבור ProducerApp-1
. זכור שלא קבענו את מכסת התוצרת ProducerApp-1
עדיין. תבדוק את זה ConsumerApp-1
ו ConsumerApp-2
יכול לצרוך הודעות ולשים לב שהן אינן מצערות. עצור את יישומי הלקוח של הצרכן והמפיק על ידי לחיצה Ctrl + C בכרטיסיות הדפדפן המתאימות.
הגדר מכסות ייצור וצרוך עבור יישומי לקוח
כעת, לאחר שהרצנו את יישומי היצרן והצרכנים ללא מכסות, אנו קובעים את המכסות שלהם ומפעילים אותן מחדש.
פתח את מנהל הפעלות מסוף עבור MSKAdminInstance
מופע EC2 כפי שתואר קודם לכן והפעל את הפקודות הבאות כדי למצוא את תצורת ברירת המחדל של אחד מהברוקרים באשכול MSK. אשכולות MSK מסופקים עם תצורת ברירת המחדל של מכסות קפקא.
המסך הבא מציג את Broker-1
ערכי ברירת מחדל עבור quota.consumer.default
ו quota.producer.default
.
תצורת מכסת ProducerApp-1
החלף מצייני מיקום בכל הפקודות בסעיף זה בערכים התואמים לחשבון שלך.
על פי דיאגרמת הארכיטקטורה שנדונה קודם לכן, הגדר את ProducerApp-1
לייצר מכסה ל-1024 בתים/שנייה. ל <ProducerApp-1 Client Id>
ו <ProducerApp-1 Role Session>
, ודא שאתה משתמש באותם ערכים שבהם השתמשת בזמן הריצה ProducerApp-1
מוקדם יותר (producerapp-1-client-id
ו producerapp-1-role-session
, בהתאמה):
אמת את ה- ProducerApp-1
לייצר מכסה באמצעות הפקודה הבאה:
אתה יכול להסיר את ProducerApp-1
לייצר מכסה באמצעות הפקודה הבאה, אבל אל תפעיל את הפקודה כפי שנבדוק את המכסות הבאות.
תצורת מכסת ConsumerApp-1
החלף מצייני מיקום בכל הפקודות בסעיף זה בערכים התואמים לחשבון שלך.
בואו נגדיר מכסת צריכה של 5120 בתים/שנייה עבור ConsumerApp-1
. פורום <ConsumerApp-1 Client Id>
ו <ConsumerApp-1 Role Session>
, ודא שאתה משתמש באותם ערכים שבהם השתמשת בזמן הריצה ConsumerApp-1
מוקדם יותר (consumerapp-1-client-id
ו consumerapp-1-role-session
, בהתאמה):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
אמת את ה- ConsumerApp-1
לצרוך מכסה באמצעות הפקודה הבאה:
אתה יכול להסיר את ConsumerApp-1
לצרוך מכסה, באמצעות הפקודה הבאה, אבל אל תפעיל את הפקודה כפי שנבדוק את המכסות הבאות.
תצורת מכסת ConsumerApp-2
החלף מצייני מיקום בכל הפקודות בסעיף זה בערכים התואמים לחשבון שלך.
בואו נגדיר מכסת צריכה של 1024 בתים/שנייה עבור ConsumerApp-2
. פורום <ConsumerApp-2 Client Id>
ו <ConsumerApp-2 Role Session>
, ודא שאתה משתמש באותם ערכים שבהם השתמשת בזמן הריצה ConsumerApp-2
מוקדם יותר (consumerapp-2-client-id
ו consumerapp-2-role-session
, בהתאמה):
אמת את ה- ConsumerApp-2
לצרוך מכסה באמצעות הפקודה הבאה:
כמו עם ConsumerApp-1
, אתה יכול להסיר את ConsumerApp-2
לצרוך מכסה באמצעות אותה פקודה עם ConsumerApp-2
פרטי הלקוח והמשתמש.
הפעל מחדש את יישומי היצרן והצרכן לאחר קביעת מכסות
בואו נפעיל מחדש את האפליקציות כדי לוודא את השפעת המכסות.
הפעל מחדש את ProducerApp-1
הפעלה חוזרת ProducerApp-1
in סינכרוני במצב עם אותה פקודה שבה השתמשת קודם לכן. צילום המסך הבא ממחיש כי מתי ProducerApp-1
מגיעה למכסה שלה בכל אחד מהברוקרים, ה produce-throttle-time-avg
ו produce-throttle-time-max client
ערך המדדים יהיה מעל 0.0. ערך מעל 0.0 מציין זאת ProducerApp-1
הוא מצער. להתיר ProducerApp-1
לרוץ לכמה שניות ואז לעצור אותו באמצעות Ctrl + C.
אתה יכול גם לבדוק את השפעת מכסת התוצרת על ידי הפעלה חוזרת ProducerApp-1
שוב ב אסינכרוני מצב (--producer-type async
). בדומה לריצה סינכרונית, צילום המסך הבא ממחיש מתי ProducerApp-1
מגיעה למכסה שלה בכל אחד מהברוקרים, ה produce-throttle-time-avg
ו produce-throttle-time-max
ערך מדדי הלקוח יהיה מעל 0.0. ערך מעל 0.0 מציין זאת ProducerApp-1
הוא מצער. אפשר אסינכרוני ProducerApp-1
לרוץ לזמן מה.
בסופו של דבר תראה א TimeoutException
לפי org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
בעת שימוש ב- אסינכרוני מפיק ושליחת הודעות בקצב גבוה ממה שהמתווך יכול לקבל עקב המכסה, ההודעות יעמדו בתור בזיכרון אפליקציית הלקוח תחילה. בסופו של דבר יגמר ללקוח שטח המאגר אם קצב שליחת ההודעות ימשיך לעלות על קצב קבלת ההודעות, מה שיגרום לקצב הבא Producer.send()
שיחה לחסום. Producer.send()
בסופו של דבר יזרוק א TimeoutException
אם עיכוב הזמן הקצוב אינו מספיק כדי לאפשר למתווך להדביק את בקשת היצרן. תפסיק ProducerApp-1
באמצעות Ctrl + C.
הפעל מחדש את ConsumerApp-1
הפעלה חוזרת ConsumerApp-1
עם אותה פקודה שבה השתמשת קודם. צילום המסך הבא ממחיש כי מתי ConsumerApp-1
מגיע למכסה שלו, ה fetch-throttle-time-avg
ו fetch-throttle-time-max client
ערך המדדים יהיה מעל 0.0. ערך מעל 0.0 מציין זאת ConsumerApp-1
הוא מצער.
להתיר ConsumerApp-1
לרוץ לכמה שניות ואז לעצור אותו באמצעות Ctrl + C.
הפעל מחדש את ConsumerApp-2
הפעלה חוזרת ConsumerApp-2
עם אותה פקודה שבה השתמשת קודם. באופן דומה, מתי ConsumerApp-2
מגיע למכסה שלו, ה fetch-throttle-time-avg
ו fetch-throttle-time-max client
ערך המדדים יהיה למעלה 0.0. ערך למעלה 0.0 מעיד על כך ConsumerApp-2
הוא מצער. להתיר ConsumerApp-2
לרוץ למשך מספר שניות ולאחר מכן לעצור אותו על ידי לחיצה Ctrl + C.
מדדי מכסת לקוחות באמזון CloudWatch
In חלק 1, הסברנו כי מדדי לקוח הם מדדים שנחשפים על ידי לקוחות המתחברים לאשכולות קפקא. בואו נבחן את מדדי הלקוח ב-CloudWatch.
- במסוף CloudWatch, בחר כל המדדים.
- תַחַת מרחבי שמות מותאמים אישית, בחר את מרחב השמות שסיפקת בעת הפעלת יישומי הלקוח.
- בחר את שם הממד ובחר
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
, וfetch-throttle-time-avg metrics
לכל היישומים.
מדדים אלה מצביעים על התנהגות מצערת עבור ProducerApp-1
, ConsumerApp-1
, ו ConsumerApp-2
יישומים שנבדקו עם תצורות המכסה בסעיף הקודם. צילומי המסך הבאים מציינים את החנק של ProducerApp-1
, ConsumerApp-1
, ו ConsumerApp-2
מבוסס על מכסות רוחב הפס של הרשת. ProducerApp-1
, ConsumerApp-1
, ו ConsumerApp-2
יישומים מזינים את מדדי הלקוחות שלהם ל-CloudWatch. אתה יכול למצוא את קוד מקור ב-GitHub לעיונך.
מזהה לקוח מאובטח ושם הפעלת תפקיד
דנו כיצד להגדיר מכסות קפקא באמצעות יישום מזהה לקוח ומאומת המשתמש קֶרֶן. כאשר יישום לקוח מקבל תפקיד של IAM לגשת לנושאים של קפקא באשכול MSK עם אימות IAM מופעל, האימות שלו מאומת המשתמש המנהל מיוצג בפורמט הבא (למידע נוסף, עיין מזהי IAM):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
הוא מכיל את שם מפגש התפקיד (במקרה הזה, producerapp-1-role-session
) בשימוש ביישום הלקוח תוך קבלת תפקיד IAM דרך AWS STS SDK. אפליקציית הלקוח קוד מקור זמין לעיונך. ה מזהה לקוח הוא מחרוזת שם הגיונית (לדוגמה, producerapp-1-client-id
) המוגדר בקוד היישום על ידי צוות היישום. לכן, בקשה יכולה להתחזות לבקשה אחרת אם היא משיגה את מזהה לקוח ו שם מפגש התפקיד של האפליקציה האחרת, ואם יש לה הרשאה לקחת את אותו תפקיד IAM.
כפי שמוצג בתרשים הארכיטקטורה, ConsumerApp-1
ו ConsumerApp-2
הם שני יישומי לקוח נפרדים עם הקצאות המכסות שלהם. מכיוון שלשניהם יש הרשאה לקחת את אותו תפקיד IAM (Topic-B-Read-Role
) בחשבון ההדגמה, הם רשאים לצרוך הודעות מ Topic-B
. לפיכך, ברוקרי אשכולות MSK מבחינים ביניהם על סמך שלהם מזהי לקוח ו משתמשים (שמכילים את ההתאמה שלהם שם מפגש התפקיד ערכים). אם ConsumerApp-2
משיג איכשהו את ConsumerApp-1
שם מפגש התפקיד ו מזהה לקוח, זה יכול להתחזות ConsumerApp-1
על ידי ציון ה- ConsumerApp-1
שם מפגש התפקיד ו מזהה לקוח בקוד האפליקציה.
בואו נניח ConsumerApp-1
שימושים consumerapp-1-client-id
ו consumerapp-1-role-session
כמו שלה מזהה לקוח ו שם מפגש התפקיד, בהתאמה. לָכֵן, ConsumerApp-1's
מאומת המשתמש המנהל יופיע כדלקמן כאשר הוא מניח את Topic-B-Read-Role
תפקיד IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
באופן דומה, ConsumerApp-2
שימושים consumerapp-2-client-id
ו consumerapp-2-role-session
כמו שלה מזהה לקוח ו שם מפגש התפקיד, בהתאמה. לָכֵן, ConsumerApp-2's
מאומת המשתמש המנהל יופיע כדלקמן כאשר הוא מניח את Topic-B-Read-Role
תפקיד IAM:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
משיג ConsumerApp-1's
מזהה לקוח ו שם מפגש התפקיד ומציין אותם בקוד היישום שלו, מתווכים באשכולות MSK יתייחסו אליו כאל ConsumerApp-1
ולראות את זה מזהה לקוח as consumerapp-1-client-id
, והמאומתים המשתמש מנהל באופן הבא:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
זה מאפשר ConsumerApp-2
לצרוך נתונים מאשכול MSK בקצב מקסימלי של 5120 בתים לשנייה ולא 1024 בתים לשנייה לפי הקצאת המכסה המקורית שלו. כתוצאה מכך, ConsumerApp-1's
התפוקה תושפע לרעה אם ConsumerApp-2
פועל במקביל.
ארכיטקטורה משופרת
אתה יכול להציג מנהל סודות AWS ו שירות ניהול מפתח AWS (AWS KMS) בארכיטקטורה לאבטחת יישומים' מזהי לקוח ו שמות מפגשי תפקידים. כדי לספק ניהול חזק יותר, יש לאחסן את מזהה הלקוח של היישומים ואת שם הפעלת התפקיד כסודות מוצפנים במנהל הסודות. מדיניות המשאבים של IAM הקשורה לסודות מוצפנים ולמפתח מנוהל על ידי KMS (CMK) תאפשר ליישומים לגשת ולפענח רק את מזהה הלקוח ואת שם הפעלת התפקיד שלהם. בדרך זו, יישומים לא יוכלו לגשת זה לזה של הלקוח ולשם הפעלת התפקיד ולהתחזות זה לזה. התמונה הבאה מציגה את הארכיטקטורה המשופרת.
לזרימה המעודכנת יש את השלבים הבאים:
- P1 -
ProducerApp-1
מחזיר את שלוclient-id
וrole-session-name
סודות ממנהל הסודות - P2 -
ProducerApp-1
מגדיר את הסודclient-id
asCLIENT_ID_CONFIG
בקוד היישום, ומניחTopic-B-Write-Role
(דרך שלהProducerApp-1-Role
תפקיד IAM) על ידי העברת הסודrole-session-name
ל-AWS STS SDKassumeRole
שיחת פונקציה - P3 - עם ה
Topic-B-Write-Role
תפקיד IAM קיבל,ProducerApp-1
מתחיל לשלוח הודעות לTopic-B
- C1 -
ConsumerApp-1
וConsumerApp-2
לאחזר את ההתאמה שלהםclient-id
וrole-session-name
סודות ממנהל הסודות - C2 -
ConsumerApp-1
וConsumerApp-2
להגדיר את הסוד שלהםclient-id
asCLIENT_ID_CONFIG
בקוד היישום שלהם, ולהניחTopic-B-Write-Role
(דרךConsumerApp-1-Role
וConsumerApp-2-Role
תפקידי IAM, בהתאמה) על ידי העברת סודםrole-session-name
ב-AWS STS SDKassumeRole
שיחת פונקציה - C3 - עם ה
Topic-B-Read-Role
תפקיד IAM קיבל,ConsumerApp-1
וConsumerApp-2
להתחיל לצרוך הודעות מTopic-B
עיין בתיעוד עבור מנהל סודות AWS ו AWS KMS כדי להבין טוב יותר כיצד הם משתלבים בארכיטקטורה.
לנקות משאבים
נווט אל מסוף CloudFormation ומחק את MSKStack
לַעֲרוֹם. כל המשאבים שנוצרו במהלך פוסט זה יימחקו.
סיכום
בפוסט זה, כיסינו שלבים מפורטים להגדרת מכסות אמזון MSK והדגמנו את השפעתם באמצעות יישומי לקוח לדוגמה. בנוסף, דנו כיצד אתה יכול להשתמש במדדי לקוח כדי לקבוע אם יישום לקוח מצטמצם. כמו כן, הדגשנו בעיה אפשרית עם מזהי לקוח בטקסט רגיל ושמות של מפגשי תפקידים. אנו ממליצים ליישם מכסות קפקא עם אמזון MSK באמצעות Secrets Manager ו-AWS KMS לפי דיאגרמת הארכיטקטורה המתוקנת כדי להבטיח ארכיטקטורת אפס אמון.
אם יש לך משוב או שאלות לגבי הפוסט הזה, כולל הארכיטקטורה המתוקנת, נשמח לשמוע ממך. אנו מקווים שנהניתם לקרוא את הפוסט הזה.
על המחבר
Vikas Bajaj הוא מנהל בכיר, אדריכלי פתרונות, שירותים פיננסיים בשירותי האינטרנט של אמזון. עם למעלה משני עשורים של ניסיון בשירותים פיננסיים ועבודה עם עסקים מקוריים בדיגיטל, הוא מייעץ ללקוחות בעיצוב מוצר, מפות דרכים טכנולוגיות וארכיטקטורות יישומים.
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- EVM Finance. ממשק מאוחד למימון מבוזר. גישה כאן.
- Quantum Media Group. IR/PR מוגבר. גישה כאן.
- PlatoAiStream. Web3 Data Intelligence. הידע מוגבר. גישה כאן.
- מקור: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :יש ל
- :הוא
- :לֹא
- :איפה
- $ למעלה
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- יכול
- אודות
- מֵעַל
- לְקַבֵּל
- קבלה
- גישה
- חֶשְׁבּוֹן
- הודה
- לרוחב
- להוסיף
- תוספת
- נוסף
- בנוסף
- לאחר
- שוב
- תעשיות
- הַקצָאָה
- הקצאות
- להתיר
- מאפשר
- גם
- אמזון בעברית
- אמזון
- אמזון שירותי אינטרנט
- an
- ו
- אחר
- כל
- אַפָּשׁ
- אפאצ'י קפקא
- לְהוֹפִיעַ
- בקשה
- יישומים
- בערך
- ארכיטקטורה
- ARE
- AS
- המשויך
- להניח
- At
- מאומת
- אימות
- זמין
- AWS
- AWS CloudFormation
- רוחב פס
- מבוסס
- BE
- כי
- היה
- לפני
- להיות
- מוטב
- חסום
- אוזן נעל
- שניהם
- תַחתִית
- אריזה מקורית
- ברוקר
- ברוקרים
- דפדפן
- חיץ
- עסקים
- עסקים
- אבל
- by
- שיחה
- נקרא
- קוראים
- CAN
- מקרה
- חָתוּל
- היאבקות
- גורם
- CD
- מֶרכָּזִי
- שינוי
- שינויים
- לבדוק
- בחרו
- בכיתה
- לקוחות
- לקוחות
- אשכול
- קוד
- Common
- להשלים
- לחשב
- מושגים
- תְצוּרָה
- מוגדר
- מקשר
- כתוצאה מכך
- קונסול
- לצרוך
- צרכן
- מכיל
- להמשיך
- ממשיך
- ממשיך
- לִשְׁלוֹט
- מכוסה
- לִיצוֹר
- נוצר
- יוצרים
- נוֹכְחִי
- לקוח
- לקוחות
- נתונים
- פלטפורמת נתונים
- עשרות שנים
- פענוח
- בְּרִירַת מֶחדָל
- עיכוב
- הַדגָמָה
- מופגן
- תלוי
- לתאר
- מְתוּאָר
- עיצוב
- מְפוֹרָט
- פרטים
- לקבוע
- קובע
- מֵמַד
- נָדוֹן
- לְהַצִיג
- לְהַבחִין
- תיעוד
- להורדה
- ראוי
- בְּמַהֲלָך
- כל אחד
- מוקדם יותר
- הד
- השפעה
- או
- לאפשר
- מופעל
- מאפשר
- מוצפן
- נקודת קצה
- לאכוף
- משופר
- לְהַבטִיחַ
- זן
- סביבה
- שגיאות
- Ether (ETH)
- בסופו של דבר
- לִבחוֹן
- דוגמה
- עולה על
- אלא
- ניסיון
- מוסבר
- הסבר
- יצוא
- חשוף
- מָשׁוֹב
- מעטים
- תרשים
- שלח
- קבצים
- כספי
- שירותים פיננסיים
- ראשון
- מתאים
- תזרים
- הבא
- כדלקמן
- בעד
- פוּרמָט
- ארבע
- החל מ-
- פונקציה
- יתר על כן
- לקבל
- Git
- GitHub
- ממשל
- יותר
- קְבוּצָה
- קבוצה
- שמח
- יש
- he
- לִשְׁמוֹעַ
- ברמה גבוהה
- מודגש
- לקוות
- המארח
- מארחים
- איך
- איך
- HTML
- http
- HTTPS
- IAM
- ID
- זהות
- מזהה
- if
- מדגים
- תמונה
- מושפעים
- הפעלה
- יישום
- in
- כולל
- להצביע
- מצביע על
- המציין
- בנפרד
- מידע
- למשל
- אינטגרלי
- אל תוך
- מבוא
- הציג
- J States
- סוגיה
- IT
- שֶׁלָה
- Java
- jpg
- קפקא
- מפתח
- ידוע
- להגביל
- קו
- קווים
- רשימה
- הגיוני
- לעשות
- הצליח
- ניהול
- מנהל
- מקסימום
- מאי..
- נמדד
- זכרון
- הודעות
- מדדים
- דקות
- מצב
- לשנות
- צג
- יותר
- MS
- הרבה
- מספר
- צריך
- שם
- שמות
- נווט
- ניווט
- צורך
- באופן שלילי
- רשת
- חדש
- הבא
- לא
- ציין
- הודעה..
- מספר
- משיג
- מתרחש
- of
- on
- ONE
- רק
- נפתח
- מופעל
- תפעול
- אפשרות
- אפשרויות
- or
- להזמין
- מְקוֹרִי
- אחר
- הַחוּצָה
- יותר
- ארוז
- עמוד
- זגוגית
- פרמטר
- פרמטרים
- חלק
- עבר
- חולף
- נתיב
- אחוזים
- לבצע
- ביצועים
- רשות
- טקסט רגיל
- פלטפורמה
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- נקודה
- נקודות
- מדיניות
- מדיניות
- הודעה
- פוטנציאל
- דחוף
- למנוע
- קודם
- קוֹדֶם
- מנהל
- פְּרָטִי
- תהליך
- לייצר
- יַצרָן
- המוצר
- עיצוב מוצר
- נכסים
- לספק
- ובלבד
- ציבורי
- לפרסם
- שאלות
- ציון
- במקום
- מגיע
- חומר עיוני
- קריאה
- להמליץ
- מוּמלָץ
- מכונה
- באזור
- לזכור
- להסיר
- להחליף
- מאגר
- מיוצג
- לבקש
- בקשות
- נדרש
- משאב
- משאבים
- אלה
- בהתאמה
- REST
- מפות דרכים
- תפקיד
- תפקידים
- הפעלה
- ריצה
- s
- אותו
- מרוצה
- מרוצה מ
- צילומי מסך
- Sdk
- שְׁנִיָה
- שניות
- סוד
- סעיף
- לבטח
- אבטחה
- בטח
- לִרְאוֹת
- לשלוח
- שליחה
- לחצני מצוקה לפנסיונרים
- נפרד
- סדרה
- שירותים
- מושב
- סט
- הצבה
- הגדרות
- צריך
- הראה
- הופעות
- דומה
- באופן דומה
- since
- פתרונות
- מָקוֹר
- קוד מקור
- מֶרחָב
- ספציפי
- מפורט
- לערום
- שלבים
- התחלה
- החל
- שלב
- צעדים
- עצור
- מאוחסן
- נהירה
- מחרוזת
- חזק יותר
- רשתות משנה
- לאחר מכן
- בהצלחה
- כזה
- מספיק
- שסופק
- תומך
- לקחת
- נבחרת
- טכנולוגיה
- תבנית
- תבניות
- מסוף
- מבחן
- נבדק
- בדיקות
- מֵאֲשֶׁר
- זֶה
- השמיים
- המקור
- שֶׁלָהֶם
- אותם
- אז
- לכן
- הֵם
- זֶה
- שְׁלוֹשָׁה
- דרך
- תפוקה
- זמן
- ל
- אסימון
- נושא
- נושאים
- טיפול
- סומך
- שתיים
- סוג
- סוגים
- הבנה
- עדכון
- מְעוּדכָּן
- עדכון
- להשתמש
- מְשׁוּמָשׁ
- משתמש
- משתמשים
- שימושים
- באמצעות
- ערך
- ערכים
- לאמת
- באמצעות
- לצפיה
- היה
- דֶרֶך..
- we
- אינטרנט
- שירותי אינטרנט
- טוֹב
- מתי
- אם
- אשר
- בזמן
- יצטרך
- עם
- לְלֹא
- עובד
- לכתוב
- עוד
- אתה
- זפירנט