بهینه سازی عملکرد کافکا

ساخت وبلاگ

Apache Kafka ، یک سیستم پیام رسانی توزیع شده توسط بنیاد نرم افزار Apache ، در اکثر موارد استفاده مدرن به انتخاب پیش فرض برای ارتباطات بین خدمات تبدیل شده است. کافکا پردازش موازی پیام ها را تسهیل می کند و یکی از بهترین ابزارهای ارتباطات بین فرآیند در یک سیستم توزیع شده ، با ویژگی هایی مانند گروه های مصرف کننده و پارتیشن های موضوع است.

با این حال ، به خصوص هنگام مقیاس بندی پیام ها ، شما باید عملکرد کافکا را تجزیه و تحلیل کرده و تنظیم کنید تا اطمینان حاصل شود که تأخیر کم و برای عملکرد بهینه بالا است.

اجزای یک خوشه کافکا

سه مؤلفه اصلی آپاچی کافکا وجود دارد: تولید کنندگان ، مصرف کنندگان و کارگزاران. درک کارکردهای آنها به شما در بهینه سازی عملکرد کافکا کمک می کند.

Apache Kafka Components

تهیه کنندگان

تولید کنندگان از طریق Zookeeper یا مستقیماً به یک کارگزار Kafka به یک خوشه کافکا متصل می شوند. پس از اتصال ، آنها می توانند موضوع و پارتیشن را مشخص کنند (یک موضوع می تواند چندین مورد داشته باشد) که باید یک پیام برای آن منتشر شود. اگر پارتیشن به صراحت توسط تولید کننده ذکر نشده باشد ، کافکا به طور ضمنی تصمیم می گیرد.

مصرف کننده

مصرف کنندگان می توانند موضوع و پارتیشن هایی را که می خواهند پیام دریافت کنند ، مشخص کنند. اگر مصرف کنندگان پارتیشن را مشخص نکنند ، کافکا تصمیم می گیرد و بسته به تعداد پارتیشن های موجود ، می تواند بیش از یک را انتخاب کند. با این حال ، یک موضوع نمی تواند مصرف کننده بیشتری نسبت به پارتیشن ها داشته باشد.

به طور مشابه ، اگر چندین سرویس بخواهند همان پیام را مصرف کنند اما اقدامات متفاوتی را بر روی آن داده ها انجام دهند (به عنوان مثال ، ورود به سیستم و معیارهای جمع آوری) ، خدمات می توانند پیام هایی از گروه های مختلف مصرف کننده مصرف کنند. هر گروه مصرف کننده همان پیام را دریافت می کند.

کارگزار

یک کارگزار کافکا با میزبانی مباحث و پارتیشن ها و تسهیل ارسال و دریافت پیام به عنوان واسطه بین تولید کنندگان و مصرف کنندگان خدمت می کند. کافکا از Zookeeper برای مدیریت کارگزاران استفاده می کند.

در یک خوشه تولید معمولی کافکا ، کارگزاران متعددی وجود دارند که هر یک از هزاران نفر از خواندن ها و یک ثانیه می نویسند. تولید کنندگان و مصرف کنندگان به این کارگزاران متصل می شوند ، نه مستقیماً به یکدیگر. این تضمین می کند که حتی اگر یک تولید کننده یا مصرف کننده پایین بیاید ، خط لوله پیام رسانی تحت تأثیر قرار نمی گیرد.

معیارهای عملکرد اصلی کافکا

حتی اگر Kafka قبلاً از جعبه بهینه شده باشد ، تنظیماتی وجود دارد که می توانید برای بهبود عملکرد خوشه ای انجام دهید. هنگام انجام این کار ، دو معیار اصلی برای در نظر گرفتن وجود دارد:

  • توان: تعداد پیام هایی که به مدت زمان مشخص می رسند
  • تأخیر: مقدار زمانی که برای پردازش هر پیام لازم است

بیشتر سیستم ها روی بهینه سازی یک یا دیگری تمرکز می کنند ، اما کافکا به دنبال بهینه سازی هر دو است.

تأخیر بیشتر به منطق شغلی که برای پردازش هر پیام اعمال می کنید بستگی دارد ، بنابراین بهینه سازی آن شامل تنظیم این منطق است. اما توان این خوشه به خود خوشه بستگی دارد و این جایی است که داشتن چندین کارگزار می تواند کمک کند. با افزایش تعداد پیام های منتشر شده ، برای جلوگیری از تنگناها ، باید کارگزاران ، ذخیره سازی و مصرف کنندگان را نیز مقیاس کنید.

تأخیر زیاد در خط لوله داده منجر به تاخیر عظیم در مصرف پیام ها خواهد شد. اگر کارگزاران کافی برای دستیابی به توان لازم وجود نداشته باشند ، درخواست های تولیدکنندگان به کارگزاران زمان می برد و منجر به از دست دادن پیام می شود. این می تواند به یک نقطه اصلی درد برای تجارت شما تبدیل شود ، بنابراین تعادل توان و تأخیر در یک خوشه کافکا بسیار مهم است.

تنظیم عملکرد کافکا

بهینه سازی عملکرد یک خوشه کافکا شامل تنظیم هر سه مؤلفه برای دستیابی به توان و تأخیر مورد نظر است.

کارگزاران تنظیم

شما تعداد پارتیشن ها را در یک موضوع کنترل می کنید. افزایش تعداد پارتیشن ها و تعداد کارگزاران در یک خوشه منجر به افزایش موازی بودن مصرف پیام می شود که به نوبه خود باعث بهبود توان یک خوشه کافکا می شود. با این حال ، زمان لازم برای تکثیر داده ها در مجموعه های ماکت نیز افزایش می یابد.

تولید کنندگان تنظیم

می توانید یک تولید کننده را در دو حالت مختلف اجرا کنید: همزمان و ناهمزمان. در حالت همزمان ، به محض انتشار پیام ، تولید کننده درخواستی را به کارگزار ارسال می کند. بنابراین اگر در ثانیه 100 پیام تولید می کنید ، تولید کننده 100 درخواست را برای کارگزار ارسال می کند. این باعث کاهش توان می شود و به عنوان یک عمل مسدود کننده عمل می کند. بنابراین هنگام انتشار تعداد زیادی پیام ، بهتر است تولید کنندگان را در حالت ناهمزمان اجرا کنید.

اما حتی در حالت ناهمزمان ، برای عملکرد بهینه باید دو پارامتر را تنظیم کنید: batch. size و linger. ms (زمان طولانی). اندازه دسته ای اندازه داده هایی است که در یک دسته ارسال می شود ، که در بایت اندازه گیری می شود. به عنوان مثال ، اگر این را روی 100 تنظیم کنید ، تولید کننده منتظر خواهد ماند تا پیام ها قبل از تماس با کارگزار ، 100 بایت اضافه کنند. اگر تولید پیام کم باشد و اندازه دسته ای بالا را تنظیم کنید ، تولید کننده قصد دارد قبل از تولید پیام ، مدت طولانی صبر کند. این نه تنها باعث کاهش توان می شود بلکه تأخیر در ارسال پیام را نیز افزایش می دهد. بنابراین بسته به تعداد پیام های تولید شده ، این مقدار باید بهینه شود. اندازه پیش فرض دسته ای 16384 است.

Linger Time یک معیار دیگر است که بر اساس آن یک تولید کننده تصمیم می گیرد چه موقع درخواست را به یک کارگزار ارسال کند. با استفاده از مثال قبلی ، اگر اندازه دسته ای روی 100 بایت تنظیم شود و شما فقط 50 بایت تولید می کنید ، تولید کننده باید قبل از انتشار آن پیام ها دو ثانیه صبر کند. برای جلوگیری از این تأخیر ، می توانید مدت زمان طولانی (اندازه گیری شده در میلی ثانیه) را تنظیم کنید تا مطمئن شوید که تولید کننده خیلی طولانی قبل از ارسال پیام صبر نمی کند. بنابراین ، تنظیم زمان طولانی در 500 میلی ثانیه در مثال بالا باعث می شود که تولید کننده حداکثر نیمی از ثانیه صبر کند.

فشرده سازی همچنین می تواند تأخیر را بهبود بخشد. به طور پیش فرض ، پیام های کافکا فشرده نمی شوند ، اما می توانید تولیدکنندگان را برای فشرده سازی آنها پیکربندی کنید. کارگزاران و مصرف کنندگان سپس سربار اضافه شده برای فشرده سازی آنها را خواهند داشت ، اما تأخیر کلی باید کاهش یابد زیرا اندازه فیزیکی داده های منتقل شده از شبکه کوچکتر است.

تنظیم مصرف کنندگان

مصرف کنندگان پیام ها را در دسته ها دریافت می کنند ، مشابه نحوه انتشار تولید کنندگان در دسته ها. اگر تعداد زیادی پیام را بکشید و زمان زیادی را برای پردازش هرکدام اختصاص دهید ، توان آن رنج می برد. به همین ترتیب ، اگر هر بار کارگزار را برای یک پیام واحد نظرسنجی کنید ، ممکن است تعداد درخواست های کارگزار کاهش یافته باشد.

همانطور که قبلاً مورد بحث قرار گرفت ، داشتن پارتیشن های بیشتر و مصرف کنندگان در یک گروه مصرف کننده می تواند به بهبود توان کمک کند. اما به خاطر داشته باشید که با افزایش تعداد مصرف کنندگان ، تعداد درخواست های جبران خسارت به کارگزار نیز افزایش می یابد. و از آنجا که تعهد یک افست اساساً ارسال پیام Kafka به یک موضوع داخلی است ، این باعث می شود بار به طور غیرمستقیم بار کارگزار را افزایش دهد. بنابراین داشتن تعداد مطلوب مصرف کنندگان بسیار مهم است.

بهینه سازی عملکرد آینه ساز

Kafka Mirrormaker ابزاری است که برای آینه کاری پیام های کافکا از یک مرکز داده یا خوشه به دیگری استفاده می شود. از آنجا که این فقط در داخل تولید پیام به کافکا است ، بیشتر تکنیک های بهینه سازی که قبلاً مورد بحث قرار گرفته اند نیز در اینجا صادق هستند. اما از آنجا که این امر شامل انتقال پیام ها در مسافت های طولانی است ، چند پارامتر پیکربندی دیگر نیز وجود دارد که می توانند برای عملکرد بهتر تنظیم شوند. توجه: هنگام تنظیم ، حتماً اقدامات خود را بر اساس نیازهای مورد استفاده خاص خود پایه گذاری کنید.

مکان آینه ساز

Mirrormaker را می توان در منبع یا مقصد نصب کرد. نصب در مقصد بهتر است زیرا تولید پیام در مسافت های طولانی احتمال از دست دادن داده ها در هنگام انتقال را افزایش می دهد.

فشرده سازی

به طور پیش فرض ، فشرده سازی پیام در تولید کنندگان کافکا روی هیچ یک تنظیم نشده است. شما می توانید این کار را به GZIP تغییر دهید تا پیام های خارج از منبع به مقصد را فشرده کنید ، که به اندازه های دسته ای بزرگتر کمک می کند.

اندازه دسته

افزایش اندازه دسته پیام ها باعث افزایش توان می شود و ترکیب این امر با فشرده سازی اطمینان می دهد که تعداد زیادی از پیام ها به سرعت منتقل می شوند. اگر اندازه دسته هدف بیشتر از زمان طولانی پیکربندی شده زمان بیشتری ببرد ، این بدان معنی است که دسته های ارسال شده به طور کامل پر نمی شوند. این نه تنها بازده فشرده سازی را کاهش می دهد بلکه پهنای باند را نیز هدر می دهد. بنابراین تنظیم اندازه دسته ای به همراه فعال کردن فشرده سازی و تنظیم زمان طولانی مهم است.

مدت زمان طولانی

همانطور که قبلاً مورد بحث قرار گرفت ، افزایش مدت زمان طولانی برای پر کردن دسته ها به طور کامل مهم است. این ممکن است کمی تأخیر را افزایش دهد ، اما توان کلی بهبود می یابد. بنابراین شما باید توجه داشته باشید که تأخیر برای مورد استفاده در تجارت شما چقدر مهم است.

موازی سازی را افزایش دهید

برای افزایش بیشتر توان ، می توانید چندین نمونه از Mirrormaker را در همان گروه مصرف کننده مستقر کنید. این امر باعث می شود چندین مصرف کننده Mirrormaker که از همان منبع دریافت می کنند و به طور موازی به مقصد تولید می شوند.

تنظیمات سرور تولید در تنظیم کافکا

چند پارامتر پیکربندی دیگر وجود دارد که می توانید برای بهبود عملکرد کافکا در یک محیط تولید تنظیم کنید. این پارامترها همچنین عملکرد تکثیر پیام ها را در پارتیشن ها بهبود می بخشد:

  • num. replica. fetchers تعداد موضوعات مورد استفاده برای تکثیر پیام های رهبر به پیروان را مشخص می کند. تعداد بیشتری از واکسینهای ماکت موازی سازی را در تکثیر بهبود می بخشند.
  • replica. fetch. max. bytes تعداد بایت داده ها را برای واکشی از رهبر نشان می دهد. تعداد بیشتری در اینجا نشان می دهد که بخش بزرگی از داده ها در حال بدست آوردن است و باعث بهبود توان تکثیر می شود.
  • Num. Partitions حداکثر تعداد مصرف کننده ای را که یک موضوع می تواند در یک گروه کاربر خاص داشته باشد مشخص می کند ، که برابر با تعداد پارتیشن های موجود در آن موضوع است. بنابراین افزایش پارتیشن ها موازی سازی و بنابراین توان را افزایش می دهد. با این حال ، تعداد زیادی از پارتیشن ها نیز منابع بیشتری را مصرف می کنند ، بنابراین باید منابع را نیز مقیاس کنید.

متعادل کردن خوشه های Apache Kafka

هر زمان که یک کارگزار جدید به یک خوشه کافکا اضافه شود ، پارتیشن های موجود از طریق کارگزار جدید توزیع نمی شوند. این بدان معناست که کارگزار جدید کار زیادی نمی کند و اگر یک یا چند کارگزار قدیمی پایین بیاید ، تکثیر و رهبران بالقوه کاهش می یابد. این به عنوان رهبر Skew شناخته می شود. می توانید با اطمینان از این که هر کارگزار تازه اضافه شده سهمی از پارتیشن ها را دریافت می کند ، از این امر جلوگیری کنید - تعادل خوشه مهم است. به همین ترتیب ، اگر یک کارگزار بیش از میانگین تعداد پارتیشن ها برای یک موضوع ، معروف به کارگزار Skew ، داشته باشد ، می تواند منجر به مشکلات عملکرد شود.

حل این مسائل متعادل کننده یا کم نظیر به سادگی اجرای یک یا دو اسکریپت پوسته ای است که با کافکا حمل می شوند. به عنوان مثال ، برای حل یک رهبر ، می توانید اسکریپت پوسته kafka-preferred-reclace. sh را اجرا کنید یا Auto. Leader. Rebalance. enable را به "درست" تنظیم کنید. و برای حل یک کارگزار ، اسکریپت Kafka-Resignsign-Partition. sh را اجرا کنید تا برنامه انتقال مجدد پیشنهادی را بدست آورید. آن طرح را در یک پرونده JSON کپی کرده و آن را اجرا کنید تا برنامه جدید را اعمال کنید. سپس فیلمنامه Kafka-Preferred-Replica-Charection. sh را اجرا کنید تا دوباره تعادل برقرار شود.

بهینه سازی عملکرد کافکا

وقتی کافکا را به عنوان یک خوشه اجرا می کنید ، روش های مختلفی برای بهینه سازی عملکرد آن وجود دارد. می توانید پارامترهای مختلف پیکربندی را تنظیم کنید تا تعادل بین توان و تأخیر برقرار شود. همچنین یک مهندسی عادلانه برای محاسبه مقادیر بهینه برای برخی از این پارامترها ، مانند زمان طولانی ، اندازه دسته ، تعداد پارتیشن ها و غیره وجود دارد. بسته به مورد استفاده شما ، ممکن است تصمیم بگیرید که توان مهمتر از آن استتأخیر ، یا برعکس ، یا اینکه تعادل بین این دو بهترین است.

مقالات آموزش فارکس...
ما را در سایت مقالات آموزش فارکس دنبال می کنید

برچسب : نویسنده : بهزاد فراهانی بازدید : <-PostHit-> تاريخ : پنجشنبه 7 ارديبهشت 1402 ساعت: 14:22