حصص كافكا جزء لا يتجزأ من مجموعات كافكا متعددة المستأجرين. إنها تمنع أداء كتلة كافكا من التأثر سلبًا بالتطبيقات ذات التصرف السيئ التي تستهلك موارد الكتلة بشكل مفرط. علاوة على ذلك ، فإنها تمكن من تشغيل منصة البيانات المركزية المتدفقة كمنصة متعددة المستأجرين واستخدامها من قبل تطبيقات المصب والمصب عبر خطوط أعمال متعددة. يدعم كافكا نوعين من الحصص: حصص النطاق الترددي للشبكة و طلب حصص معدل. تحدد حصص عرض النطاق الترددي للشبكة عتبات معدل البايت مثل مقدار البيانات التي يمكن أن تنتجها تطبيقات العميل وتستهلكها من كل وسيط فردي في مجموعة كافكا تقاس بالبايت في الثانية. تحدد حصص معدل الطلب النسبة المئوية للوقت الذي يقضيه كل وسيط فردي في معالجة طلبات طلبات العملاء. اعتمادًا على التكوين الخاص بك ، يمكن تعيين حصص كافكا لمستخدمين محددين أو معرفات عملاء محددة أو كليهما.
In جزء 1 في هذه السلسلة المكونة من جزأين ، ناقشنا مفاهيم كيفية تطبيق حصص كافكا في Amazon Managed Streaming لأباتشي كافكا (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 القوالب و وحدة تحكم إدارة 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
- استنساخ مستودع جيثب لتنزيل ملفات قالب CloudFormation وعينة من تطبيقات العميل:
- في وحدة تحكم AWS CloudFormation ، اختر كومات في جزء التنقل.
- اختار إنشاء مكدس.
- في حالة تحضير القالب، حدد النموذج جاهز.
- في حالة مصدر النموذج، حدد قم بتحميل ملف قالب.
- تحميل
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 ، أكمل الخطوات التالية:
- في وحدة تحكم Amazon EC2 ، انتقل إلى قائمة مثيلات EC2 قيد التشغيل.
- إختار ال
MSKAdminInstance
مثيل EC2 واختر التواصل. - على مدير الدورة علامة التبويب، اختر التواصل.
- قم بتشغيل الأوامر التالية في علامة التبويب الجديدة التي تفتح في متصفحك:
- قم بتعيين متغير البيئة للإشارة إلى نقطة نهاية IAM لوسطاء مجموعة MSK:
- لاحظ قيمة
BOOTSTRAP_BROKERS_IAM
. - قم بتشغيل أمر Kafka CLI التالي للإنشاء
Topic-B
على مجموعة MSK:
نظرًا لأن كتلة MSK مزودة بالتحكم في الوصول IAM ، فإن الخيار --command-config
نقاط ل config_iam.properties
، والتي تحتوي على الخصائص المطلوبة للتحكم في الوصول إلى IAM ، والتي تم إنشاؤها بواسطة MSKStack
مكدس CloudFormation.
قد تظهر التحذيرات التالية عند تشغيل أوامر Kafka CLI ، لكن يمكنك تجاهلها:
- للتحقق من ذلك
Topic-B
تم إنشاؤه ، قم بسرد جميع الموضوعات:
قم بإنشاء أدوار IAM لتطبيقات العميل للوصول إلى Topic-B
تتضمن هذه الخطوة إنشاء ملفات 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
كومة التحديث في الخطوة التالية.
قم بإنشاء الأدوار بالخطوات التالية:
- في وحدة تحكم AWS CloudFormation ، اختر كومات في جزء التنقل.
- أختار
MSKStack
واختر تحديث. - في حالة تحضير القالب، حدد استبدال القالب الحالي.
- في حالة مصدر النموذج، حدد قم بتحميل ملف قالب.
- تحميل
cfn-msk-stack-2.yaml
ملف منamazon-msk-kafka-quotas/cfn-templates
الدليل ، ثم اختر التالى. - قم بتوفير معلمات المكدس الإضافية التالية:
-
- في حالة الموضوع ب ARN، دخول
Topic-B
الحمض النووي الريبي.
- في حالة الموضوع ب ARN، دخول
يجب تنسيق ARN بتنسيق arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. استخدم اسم المجموعة و UUID للمجموعة من مجموعة MSK ARN التي أشرت إليها سابقًا وقم بتوفير منطقة AWS الخاصة بك. لمزيد من المعلومات ، راجع التحكم في الوصول IAM لـ Amazon 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. الكود المصدري لتطبيقات العميل وإصداراتها المجمعة متوفرة في مستودع جيثب.
قم بتشغيل تطبيق ConsumerApp-1
لتشغيل ConsumerApp-1
للتطبيق ، أكمل الخطوات التالية:
- في وحدة تحكم Amazon EC2 ، حدد ملف
ConsumerApp-1
مثيل EC2 واختر التواصل. - على مدير الدورة علامة التبويب، اختر التواصل.
- قم بتشغيل الأوامر التالية في علامة التبويب الجديدة التي تفتح في متصفحك:
- تشغيل
ConsumerApp-1
التطبيق لبدء استهلاك الرسائل منهTopic-B
:
يمكنك العثور على شفرة المصدر على جيثب للرجوع اليها. تفاصيل معلمة سطر الأوامر هي كما يلي:
- - خوادم بوتستراب - MSK الكتلة التمهيدية وسطاء نقطة نهاية IAM.
- -اسم-دور-آرن -
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 - الأمازون CloudWatch اسم المكوّن الذي سيتم استخدامه لنشر مقاييس تقييد العميل من
ConsumerApp-1
. - –cw- البعد-القيمة - قيمة بُعد 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
للتطبيق ، أكمل الخطوات التالية:
- في وحدة تحكم Amazon 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
للتطبيق ، أكمل الخطوات التالية:
- في وحدة تحكم Amazon EC2 ، حدد ملف
ProducerApp-1
مثيل EC2 واختر التواصل. - على مدير الدورة علامة التبويب، اختر التواصل.
- قم بتشغيل الأوامر التالية في علامة التبويب الجديدة التي تفتح في متصفحك:
- تشغيل
ProducerApp-1
التطبيق لبدء إرسال الرسائل إلىTopic-B
:
يمكنك العثور على شفرة المصدر على جيثب للرجوع اليها. تفاصيل معلمة سطر الأوامر هي كما يلي:
- - خوادم بوتستراب - MSK الكتلة التمهيدية وسطاء نقطة نهاية IAM.
- -اسم-دور-آرن -
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 المتزامن. - - طباعة - منتج - حصص المقاييس - علامة توضح ما إذا كان يجب طباعة مقاييس العميل على الجهاز أم لا منتجالتطبيق-1.
- - اسم البعد -cw - اسم بُعد CloudWatch الذي سيتم استخدامه لنشر مقاييس تقييد العميل من منتجالتطبيق-1.
- –cw- البعد-القيمة - قيمة بُعد CloudWatch التي سيتم استخدامها لنشر مقاييس تقييد العميل من منتجالتطبيق-1.
- –cw- مساحة الاسم - مساحة الاسم حيث منتجالتطبيق-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
تفاصيل العميل والمستخدم.
أعد تشغيل تطبيقات المنتج والمستهلك بعد تحديد الحصص
دعنا نعيد تشغيل التطبيقات للتحقق من تأثير الحصص.
إعادة تشغيل المنتج App-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.
مقاييس حصة العميل في Amazon 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. يمكنك العثور على ملف شفرة المصدر على جيثب للرجوع اليها.
معرف العميل الآمن واسم جلسة الدور
ناقشنا كيفية تكوين حصص كافكا باستخدام التطبيق معرف العميل ومصدق عليه المستخدم رئيسي. عندما يفترض تطبيق عميل دور 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) في البنية لتأمين التطبيقات ' معرفات العميل و أسماء جلسة الدور. لتوفير إدارة أقوى ، يجب تخزين معرف عميل التطبيقات واسم جلسة الدور كأسرار مشفرة في Secrets Manager. ستسمح سياسات موارد 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 و أوس كيه إم إس للحصول على فهم أفضل لكيفية ملاءمتها للهندسة المعمارية.
تنظيف الموارد
انتقل إلى وحدة تحكم CloudFormation وحذف ملف MSKStack
كومة. سيتم حذف جميع الموارد التي تم إنشاؤها أثناء هذا المنشور.
وفي الختام
في هذا المنشور ، غطينا الخطوات التفصيلية لتكوين حصص Amazon MSK وأظهرنا تأثيرها من خلال نماذج تطبيقات العميل. بالإضافة إلى ذلك ، ناقشنا كيف يمكنك استخدام مقاييس العميل لتحديد ما إذا كان تطبيق العميل مقيدًا أم لا. لقد أبرزنا أيضًا مشكلة محتملة تتعلق بمعرفات العملاء ذات النص العادي وأسماء جلسات الأدوار. نوصي بتنفيذ حصص كافكا مع Amazon MSK باستخدام Secrets Manager و AWS KMS وفقًا لمخطط البنية المنقح لضمان بنية خالية من الثقة.
إذا كانت لديك ملاحظات أو أسئلة حول هذا المنشور ، بما في ذلك التصميم المعدل ، يسعدنا أن نسمع منك. نأمل أن تكون قد استمتعت بقراءة هذا المنشور.
عن المؤلف
فيكاس باجاج هو مدير أول ، مهندسو الحلول ، الخدمات المالية في Amazon Web Services. مع أكثر من عقدين من الخبرة في الخدمات المالية والعمل مع الشركات الرقمية الأصلية ، يقدم المشورة للعملاء بشأن تصميم المنتجات وخرائط الطريق التكنولوجية وبنى التطبيقات.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- تمويل EVM. واجهة موحدة للتمويل اللامركزي. الوصول هنا.
- مجموعة كوانتوم ميديا. تضخيم IR / PR. الوصول هنا.
- أفلاطونايستريم. ذكاء بيانات Web3. تضخيم المعرفة. الوصول هنا.
- المصدر https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :لديها
- :يكون
- :ليس
- :أين
- $ UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- ماهرون
- من نحن
- فوق
- استمر
- قبول
- الوصول
- حسابي
- نقر
- في
- تضيف
- إضافة
- إضافي
- وبالإضافة إلى ذلك
- بعد
- مرة أخرى
- الكل
- توزيع
- المخصصات
- السماح
- يسمح
- أيضا
- أمازون
- Amazon EC2
- أمازون ويب سيرفيسز
- an
- و
- آخر
- أي وقت
- أباتشي
- اباتشي كافكا
- تظهر
- تطبيق
- التطبيقات
- ما يقرب من
- هندسة معمارية
- هي
- AS
- أسوشيتد
- يفترض
- At
- موثق
- التحقّق من المُستخدم
- متاح
- AWS
- تكوين سحابة AWS
- عرض النطاق الترددي
- على أساس
- BE
- لان
- كان
- قبل
- يجري
- أفضل
- سدت
- التمهيد
- على حد سواء
- الملابس السفلية
- صندوق
- وسيط
- وسطاء
- المتصفح
- العازلة
- الأعمال
- الأعمال
- لكن
- by
- دعوة
- تسمى
- دعوة
- CAN
- حقيبة
- قط
- يو كاتش
- مما تسبب في
- CD
- مركزي
- تغيير
- التغييرات
- التحقق
- اختار
- فئة
- زبون
- عميل
- كتلة
- الكود
- مشترك
- إكمال
- إحصاء
- المفاهيم
- الاعداد
- تكوين
- الرابط
- بناء على ذلك
- كنسولات
- تستهلك
- مستهلك
- يحتوي
- استمر
- تواصل
- استمرار
- مراقبة
- مغطى
- خلق
- خلق
- خلق
- حالياًّ
- زبون
- العملاء
- البيانات
- منصة البيانات
- عقود
- فك تشفير
- الترتيب
- تأخير
- تجربة
- تظاهر
- اعتمادا
- وصف
- وصف
- تصميم
- مفصلة
- تفاصيل
- حدد
- يحدد
- بعد
- ناقش
- العرض
- تميز
- توثيق
- بإمكانك تحميله
- اثنان
- أثناء
- كل
- في وقت سابق
- صدى
- تأثير
- إما
- تمكين
- تمكين
- تمكن
- مشفرة
- نقطة النهاية
- فرض
- تعزيز
- ضمان
- أدخل
- البيئة
- أخطاء
- الأثير (ETH)
- في النهاية
- بحث
- مثال
- تجاوز
- إلا
- الخبره في مجال الغطس
- شرح
- تفسير
- تصدير
- مكشوف
- ردود الفعل
- قليل
- الشكل
- قم بتقديم
- ملفات
- مالي
- الخدمات المالية
- الاسم الأول
- تناسب
- تدفق
- متابعيك
- متابعات
- في حالة
- شكل
- أربعة
- تبدأ من
- وظيفة
- علاوة على ذلك
- دولار فقط واحصل على خصم XNUMX% على جميع
- بوابة
- GitHub جيثب:
- الحكم
- أكبر
- تجمع
- مجموعات
- سعيد
- يملك
- he
- سماع
- رفيع المستوى
- سلط الضوء
- أمل
- مضيف
- المضيفين
- كيفية
- كيفية
- HTML
- HTTP
- HTTPS
- IAM
- ID
- هوية
- IDS
- if
- يوضح
- صورة
- أثر
- التنفيذ
- تحقيق
- in
- بما فيه
- تشير
- يشير
- مبينا
- فرد
- معلومات
- مثل
- متكامل
- إلى
- تقديم
- أدخلت
- يسن
- قضية
- IT
- انها
- جافا
- JPG
- كافكا
- القفل
- معروف
- مما سيحدث
- خط
- خطوط
- قائمة
- منطقي
- جعل
- تمكن
- إدارة
- مدير
- أقصى
- مايو..
- قياس
- مكبر الصوت : يدعم، مع دعم ميكروفون مدمج لمنع الضوضاء
- رسائل
- المقاييس
- دقائق
- موضة
- تعديل
- مراقبة
- الأكثر من ذلك
- MS
- كثيرا
- متعدد
- يجب
- الاسم
- أسماء
- التنقل
- قائمة الإختيارات
- حاجة
- سلبا
- شبكة
- جديد
- التالي
- لا
- وأشار
- يلاحظ..
- عدد
- يحصل
- تحدث
- of
- on
- ONE
- فقط
- يفتح
- تعمل
- عمليات
- خيار
- مزيد من الخيارات
- or
- طلب
- أصلي
- أخرى
- خارج
- على مدى
- معلب
- صفحة
- خبز
- المعلمة
- المعلمات
- جزء
- مرت
- مرور
- مسار
- نسبة مئوية
- نفذ
- أداء
- إذن
- نص عادي
- المنصة
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- البوينت
- نقاط
- سياسات الخصوصية والبيع
- سياسة
- منشور
- محتمل
- الضغط
- منع
- سابق
- سابقا
- رئيسي
- خاص
- معالجة
- إنتاج
- منتج
- المنتج
- تصميم المنتج
- HAS
- تزود
- المقدمة
- جمهور
- نشر
- الأسئلة المتكررة
- معدل
- بدلا
- يصل
- عرض
- نادي القراءة
- نوصي
- موصى به
- يشار
- منطقة
- تذكر
- إزالة
- يحل محل
- مستودع
- ممثلة
- طلب
- طلبات
- مطلوب
- مورد
- الموارد
- هؤلاء
- على التوالي
- REST
- خرائط الطريق
- النوع
- الأدوار
- يجري
- تشغيل
- s
- نفسه
- راض
- راضي مع
- لقطات
- الإستراحة
- الثاني
- ثواني
- سيكريت
- القسم
- تأمين
- أمن
- رمز الأمان
- انظر تعريف
- إرسال
- إرسال
- كبير
- مستقل
- مسلسلات
- خدماتنا
- الجلسة
- طقم
- ضبط
- إعدادات
- ينبغي
- أظهرت
- يظهر
- مماثل
- وبالمثل
- منذ
- الحلول
- مصدر
- شفرة المصدر
- الفضاء
- محدد
- محدد
- كومة
- مراحل
- بداية
- بدأت
- خطوة
- خطوات
- قلة النوم
- تخزين
- متدفق
- خيط
- أقوى
- الشبكات الفرعية
- لاحق
- بنجاح
- هذه
- كاف
- زودت
- الدعم
- أخذ
- فريق
- تكنولوجيا
- قالب
- النماذج
- محطة
- تجربه بالعربي
- اختبار
- الاختبار
- من
- أن
- •
- المصدر
- من مشاركة
- منهم
- then
- وبالتالي
- هم
- ثلاثة
- عبر
- الإنتاجية
- الوقت
- إلى
- رمز
- موضوع
- المواضيع
- علاج
- الثقة
- اثنان
- نوع
- أنواع
- فهم
- تحديث
- تحديث
- تحديث
- تستخدم
- مستعمل
- مستخدم
- المستخدمين
- يستخدم
- استخدام
- قيمنا
- القيم
- تحقق من
- بواسطة
- المزيد
- وكان
- طريق..
- we
- الويب
- خدمات ويب
- حسن
- متى
- سواء
- التي
- في حين
- سوف
- مع
- بدون
- عامل
- اكتب
- حتى الآن
- لصحتك!
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت