سهمیه های کافکا جزء لاینفک خوشه های کافکا چند مستاجر هستند. آنها از تأثیر منفی عملکرد خوشه کافکا توسط برنامه های کاربردی با رفتار ضعیف که منابع خوشه را بیش از حد مصرف می کنند، جلوگیری می کنند. علاوه بر این، آنها پلت فرم مرکزی داده های جریانی را قادر می سازند تا به عنوان یک پلت فرم چند مستاجر عمل کند و توسط برنامه های پایین دستی و بالادستی در چندین خط تجاری مورد استفاده قرار گیرد. کافکا از دو نوع سهمیه حمایت می کند: سهمیه پهنای باند شبکه و درخواست سهمیه نرخ. سهمیههای پهنای باند شبکه، آستانههای نرخ بایت را تعریف میکنند، مانند اینکه برنامههای سرویس گیرنده چقدر داده میتوانند برای هر کارگزار منفرد در یک خوشه کافکا تولید و مصرف کنند که بر حسب بایت در ثانیه اندازهگیری میشود. سهمیههای نرخ درخواست، درصد زمانی را که هر کارگزار جداگانه صرف پردازش درخواستهای مشتری میکند، محدود میکند. بسته به پیکربندی شما، سهمیه های کافکا را می توان برای کاربران خاص، شناسه های مشتری خاص یا هر دو تنظیم کرد.
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 و نمونه برنامه های مشتری:
- در کنسول 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، مراحل زیر را انجام دهید:
- در کنسول آمازون EC2، به لیست نمونه های در حال اجرا EC2 بروید.
- را انتخاب کنید
MSKAdminInstance
نمونه EC2 و انتخاب کنید اتصال. - بر مدیر جلسه برگه ، انتخاب کنید اتصال.
- دستورات زیر را در تب جدیدی که در مرورگر شما باز می شود اجرا کنید:
- متغیر محیطی را طوری تنظیم کنید که به نقطه پایانی MSK Cluster brokers IAM اشاره کند:
- به ارزش آن توجه داشته باشید
BOOTSTRAP_BROKERS_IAM
. - دستور Kafka CLI زیر را برای ایجاد اجرا کنید
Topic-B
در خوشه MSK:
از آنجا که خوشه MSK با کنترل دسترسی IAM ارائه شده است، این گزینه وجود دارد --command-config
امتیاز به config_iam.properties
، که حاوی ویژگی های مورد نیاز برای کنترل دسترسی IAM است که توسط MSKStack
پشته CloudFormation.
هنگام اجرای دستورات Kafka CLI ممکن است هشدارهای زیر ظاهر شوند، اما ممکن است آنها را نادیده بگیرید:
- برای تأیید آن
Topic-B
ایجاد شده است، همه موضوعات را فهرست کنید:
نقش های IAM را برای برنامه های مشتری برای دسترسی به موضوع 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
دایرکتوری، سپس انتخاب کنید بعدی. - پارامترهای پشته اضافی زیر را ارائه دهید:
-
- برای موضوع B ARNوارد شوید
Topic-B
RNA
- برای موضوع B ARNوارد شوید
ARN باید به صورت فرمت شود arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. از نام خوشه و UUID خوشه از ARN خوشه MSK که قبلاً اشاره کردید استفاده کنید و منطقه 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. کد منبع برنامههای کلاینت و نسخههای بستهبندیشده آنها در دسترس هستند مخزن GitHub.
برنامه ConsumerApp-1 را اجرا کنید
برای اجرای ConsumerApp-1
درخواست، مراحل زیر را کامل کنید:
- در کنسول آمازون EC2، را انتخاب کنید
ConsumerApp-1
نمونه EC2 و انتخاب کنید اتصال. - بر مدیر جلسه برگه ، انتخاب کنید اتصال.
- دستورات زیر را در تب جدیدی که در مرورگر شما باز می شود اجرا کنید:
- اجرا کن
ConsumerApp-1
برنامه ای برای شروع مصرف پیام ها ازTopic-B
:
شما می توانید پیدا کنید کد منبع در GitHub برای مرجع شما. جزئیات پارامتر خط فرمان به شرح زیر است:
- - سرورهای بوت استرپ – MSK Cluster bootstrap brokers IAM endpoint.
- – فرض – نقش – آرن -
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-space – فضای نام که در آن
ConsumerApp-1
معیارهای CloudWatch را به منظور نظارت بر throttling منتشر خواهد کرد.
- اگر از بقیه پارامترها راضی هستید، از دستور زیر استفاده کنید و تغییر دهید
--assume-role-arn
و--region
مطابق با محیط شما:
La fetch-throttle-time-avg
و fetch-throttle-time-max
معیارهای مشتری باید 0.0 را نشان دهند، که نشان می دهد هیچ throttling برای آن رخ نمی دهد 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
مطابق با محیط شما:
La fetch-throttle-time-avg
و fetch-throttle-time-max
معیارهای مشتری باید 0.0 را نشان دهند، که نشان می دهد هیچ throttling برای آن رخ نمی دهد ConsumerApp-2
. به یاد داشته باشید که ما سهمیه مصرف را تعیین نکرده ایم ConsumerApp-2
هنوز. بگذارید مدتی اجرا شود.
برنامه ProducerApp-1 را اجرا کنید
برای اجرای ProducerApp-1
درخواست، مراحل زیر را کامل کنید:
- در کنسول آمازون EC2، را انتخاب کنید
ProducerApp-1
نمونه EC2 و انتخاب کنید اتصال. - بر مدیر جلسه برگه ، انتخاب کنید اتصال.
- دستورات زیر را در تب جدیدی که در مرورگر شما باز می شود اجرا کنید:
- اجرا کن
ProducerApp-1
برنامه ای برای شروع ارسال پیام بهTopic-B
:
شما می توانید پیدا کنید کد منبع در GitHub برای مرجع شما. جزئیات پارامتر خط فرمان به شرح زیر است:
- - سرورهای بوت استرپ – MSK Cluster bootstrap brokers IAM endpoint.
- – فرض – نقش – آرن -
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 async. - -چاپ-تولیدکننده-سهمیه-متریک - پرچمی که نشان می دهد معیارهای مشتری باید توسط ترمینال چاپ شود یا خیر ProducerApp-1.
- -cw-dimension-name – نام ابعاد CloudWatch که برای انتشار معیارهای کاهش فشار مشتری از آن استفاده خواهد شد ProducerApp-1.
- -cw-dimension-value - مقدار ابعاد CloudWatch که برای انتشار معیارهای کاهش فشار مشتری از آن استفاده می شود ProducerApp-1.
- -cw-space – فضای نامی که در آن ProducerApp-1 معیارهای CloudWatch را به منظور نظارت بر throttling منتشر خواهد کرد.
- اگر از بقیه پارامترها راضی هستید، از دستور زیر استفاده کنید و تغییر دهید
--assume-role-arn
و--region
مطابق با محیط شما برای اجرای یک تولیدکننده کافکا همزمان، از این گزینه استفاده می کند--producer-type sync
:
روش دیگر، استفاده کنید --producer-type async
برای اجرای یک تولید کننده ناهمزمان برای جزئیات بیشتر مراجعه کنید ارسال ناهمزمان.
La produce-throttle-time-avg
و produce-throttle-time-max
معیارهای مشتری باید 0.0 را نشان دهند، که نشان می دهد هیچ throttling برای آن رخ نمی دهد 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) در معماری برای ایمن سازی برنامه ها شناسه های مشتری و نام جلسات نقش. برای ارائه حاکمیت قویتر، شناسه مشتری برنامهها و نام جلسه نقش باید بهعنوان اسرار رمزگذاریشده در 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 و AWS KMS تا درک بهتری از نحوه انطباق آنها با معماری بدست آورید.
منابع را پاکسازی کنید
به کنسول CloudFormation بروید و آن را حذف کنید MSKStack
پشته. تمام منابع ایجاد شده در این پست حذف خواهند شد.
نتیجه
در این پست، مراحل دقیق پیکربندی سهمیههای آمازون MSK را پوشش دادیم و تأثیر آنها را از طریق نمونه برنامههای مشتری نشان دادیم. علاوه بر این، ما در مورد اینکه چگونه می توانید از معیارهای مشتری برای تعیین اینکه آیا یک برنامه مشتری درنگ است یا خیر، استفاده کنید، بحث کردیم. ما همچنین یک مشکل بالقوه با شناسه مشتری متن ساده و نام جلسات نقش را برجسته کردیم. ما توصیه میکنیم که سهمیههای کافکا را با آمازون MSK با استفاده از Secrets Manager و AWS KMS مطابق نمودار معماری اصلاحشده برای اطمینان از معماری بدون اعتماد پیادهسازی کنید.
اگر بازخورد یا سؤالی در مورد این پست دارید، از جمله معماری اصلاح شده، خوشحال می شویم از شما بشنویم. امیدواریم از خواندن این پست لذت برده باشید.
درباره نویسنده
ویکاس باجاج مدیر ارشد، معماران راه حل، خدمات مالی در خدمات وب آمازون است. او با بیش از دو دهه تجربه در خدمات مالی و کار با مشاغل دیجیتالی بومی، به مشتریان در مورد طراحی محصول، نقشه راه فناوری و معماری های کاربردی مشاوره می دهد.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- EVM Finance. رابط یکپارچه برای امور مالی غیرمتمرکز دسترسی به اینجا.
- گروه رسانه ای کوانتومی. 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/
- : دارد
- :است
- :نه
- :جایی که
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- قادر
- درباره ما
- بالاتر
- پذیرفتن
- پذیرش
- دسترسی
- حساب
- اذعان
- در میان
- اضافه کردن
- اضافه
- اضافی
- علاوه بر این
- پس از
- از نو
- معرفی
- تخصیص
- تخصیص ها
- اجازه دادن
- اجازه می دهد تا
- همچنین
- آمازون
- آمازون EC2
- آمازون خدمات وب
- an
- و
- دیگر
- هر
- آپاچی
- آپاچی کافکا
- ظاهر شدن
- کاربرد
- برنامه های کاربردی
- تقریبا
- معماری
- هستند
- AS
- مرتبط است
- فرض
- At
- تأیید اعتبار
- تصدیق
- در دسترس
- AWS
- AWS CloudFormation
- پهنای باند
- مستقر
- BE
- زیرا
- بوده
- قبل از
- بودن
- بهتر
- مسدود شده
- خود راه انداز
- هر دو
- پایین
- جعبه
- دلال
- کارگزاران
- مرورگر
- بافر
- کسب و کار
- کسب و کار
- اما
- by
- صدا
- نام
- فراخوانی
- CAN
- مورد
- CAT
- کشتی
- باعث می شود
- CD
- مرکزی
- تغییر دادن
- تبادل
- بررسی
- را انتخاب کنید
- کلاس
- مشتری
- مشتریان
- خوشه
- رمز
- مشترک
- کامل
- محاسبه
- مفاهیم
- پیکر بندی
- پیکربندی
- اتصال
- در نتیجه
- کنسول
- مصرف
- مصرف کننده
- شامل
- ادامه دادن
- ادامه
- مداوم
- کنترل
- پوشش داده شده
- ایجاد
- ایجاد شده
- ایجاد
- جاری
- مشتری
- مشتریان
- داده ها
- بستر داده
- دهه
- رمزگشایی کنید
- به طور پیش فرض
- تاخیر
- نسخه ی نمایشی
- نشان
- بستگی دارد
- توصیف
- شرح داده شده
- طرح
- دقیق
- جزئیات
- مشخص کردن
- تعیین می کند
- بعد
- بحث کردیم
- نمایش دادن
- تمیز دادن
- مستندات
- دانلود
- دو
- در طی
- هر
- پیش از آن
- از دست
- اثر
- هر دو
- قادر ساختن
- فعال
- را قادر می سازد
- رمزگذاری
- نقطه پایانی
- اعمال
- افزایش
- اطمینان حاصل شود
- وارد
- محیط
- خطاهای
- اتر (ETH)
- در نهایت
- معاینه کردن
- مثال
- تجاوز
- جز
- تجربه
- توضیح داده شده
- توضیح
- صادرات
- قرار گرفتن در معرض
- باز خورد
- کمی از
- شکل
- پرونده
- فایل ها
- مالی
- خدمات مالی
- پیدا کردن
- نام خانوادگی
- مناسب
- جریان
- پیروی
- به دنبال آن است
- برای
- قالب
- چهار
- از جانب
- تابع
- بعلاوه
- دریافت کنید
- رفتن
- GitHub
- حکومت
- بیشتر
- گروه
- گروه ها
- خوشحال
- آیا
- he
- شنیدن
- در سطح بالا
- برجسته
- امید
- میزبان
- میزبان
- چگونه
- چگونه
- HTML
- HTTP
- HTTPS
- IAM
- ID
- هویت
- شناسه
- if
- نشان می دهد
- تصویر
- نهفته
- پیاده سازی
- اجرای
- in
- از جمله
- نشان دادن
- نشان می دهد
- نشان دادن
- فرد
- اطلاعات
- نمونه
- انتگرال
- به
- معرفی
- معرفی
- نیست
- موضوع
- IT
- ITS
- جاوه
- JPG
- کافکا
- کلید
- شناخته شده
- محدود
- لاین
- خطوط
- فهرست
- منطقی
- ساخت
- اداره می شود
- مدیریت
- مدیر
- بیشترین
- ممکن است..
- اندازه گیری
- حافظه
- پیام
- متریک
- دقیقه
- حالت
- تغییر
- مانیتور
- بیش
- MS
- بسیار
- چندگانه
- باید
- نام
- نام
- هدایت
- جهت یابی
- نیاز
- منفی است
- شبکه
- جدید
- بعد
- نه
- اشاره کرد
- اطلاع..
- عدد
- به دست می آورد
- اتفاق می افتد
- of
- on
- ONE
- فقط
- باز می شود
- عمل
- عملیات
- گزینه
- گزینه
- or
- سفارش
- اصلی
- دیگر
- خارج
- روی
- بسته بندی
- با ما
- قطعه
- پارامتر
- پارامترهای
- بخش
- گذشت
- عبور
- مسیر
- درصد
- انجام دادن
- کارایی
- اجازه
- متن ساده
- سکو
- افلاطون
- هوش داده افلاطون
- PlatoData
- نقطه
- نقطه
- سیاست
- سیاست
- پست
- پتانسیل
- فشار
- جلوگیری از
- قبلی
- قبلا
- اصلی
- خصوصی
- در حال پردازش
- تولید کردن
- تهيه كننده
- محصول
- طراحی محصول
- املاک
- ارائه
- ارائه
- عمومی
- منتشر کردن
- سوالات
- نرخ
- نسبتا
- می رسد
- خواندن
- مطالعه
- توصیه
- توصیه می شود
- اشاره
- منطقه
- به یاد داشته باشید
- برداشتن
- جایگزین کردن
- مخزن
- نمایندگی
- درخواست
- درخواست
- ضروری
- منابع
- منابع
- قابل احترام
- به ترتیب
- REST
- نقشه های راه
- نقش
- نقش
- دویدن
- در حال اجرا
- s
- همان
- راضی
- راضی با
- تصاویر
- sdk
- دوم
- ثانیه
- راز
- بخش
- امن
- تیم امنیت لاتاری
- رمز امنیتی
- دیدن
- ارسال
- در حال ارسال
- ارشد
- جداگانه
- سلسله
- خدمات
- جلسه
- تنظیم
- محیط
- تنظیمات
- باید
- نشان داده شده
- نشان می دهد
- مشابه
- به طور مشابه
- پس از
- مزایا
- منبع
- کد منبع
- فضا
- خاص
- مشخص شده
- پشته
- مراحل
- شروع
- آغاز شده
- گام
- مراحل
- توقف
- ذخیره شده
- جریان
- رشته
- قوی
- زیرشبکه ها
- متعاقب
- موفقیت
- چنین
- کافی
- عرضه شده است
- پشتیبانی از
- گرفتن
- تیم
- پیشرفته
- قالب
- قالب
- پایانه
- آزمون
- آزمایش
- تست
- نسبت به
- که
- La
- منبع
- شان
- آنها
- سپس
- از این رو
- آنها
- این
- سه
- از طریق
- توان
- زمان
- به
- رمز
- موضوع
- تاپیک
- درمان
- اعتماد
- دو
- نوع
- انواع
- درک
- بروزرسانی
- به روز شده
- به روز رسانی
- استفاده کنید
- استفاده
- کاربر
- کاربران
- استفاده
- با استفاده از
- ارزش
- ارزشها
- بررسی
- از طريق
- چشم انداز
- بود
- مسیر..
- we
- وب
- خدمات وب
- خوب
- چه زمانی
- چه
- که
- در حین
- اراده
- با
- بدون
- کارگر
- نوشتن
- هنوز
- شما
- شما
- زفیرنت