آپاچی کافکا به عنوان ستون فقرات معماریهای جریان داده مدرن شناخته میشود. اگرچه ماهیت توزیعشده و مدل پارتیشنبندی آن مقیاسپذیری شگفتانگیزی ارائه میدهد، اما سیستمعامل پایه میتواند در صورت پیکربندی صحیح، به یک گلوگاه مهم تبدیل شود. برای توسعهدهندگان متوسط تا پیشرفتهای که پایپلاینهای داده مقیاس بزرگ را مدیریت میکنند، تنظیمات پیشفرض هسته لینوکس اغلب برای مدیریت ورودی/خروجی شبکه عظیم و فشار حافظه مرتبط با مصرفکنندگان کافکا با تراکم بالا ناکافی است.
در این راهنما، ما بررسی خواهیم کرد که چگونه پارامترهای حیاتی هسته لینوکس را برای بهینهسازی سیستم خود جهت مصرف میلیونها پیام در ثانیه، دقیق تنظیم کنیم. با تنظیم بافرهای شبکه، محدودیتهای توصیفگر فایل و استراتژیهای مدیریت حافظه، میتوانید اطمینان حاصل کنید که مصرفکنندگان شما با کارایی اوج عمل میکنند، بدون اینکه پیامی از دست برود یا تأخیر بیش از حد تجربه شود.
بهینهسازی اندازه بافرهای شبکه
یکی از رایجترین گلوگاهها در محیطهای کافکا با تراکم بالا، ازدحام شبکه ناشی از بافرهای سوکت کوچک است. کافکا به شدت به شبکه TCP متکی است و وقتی فرآیندهای مصرفکننده دادهها را سریعتر از آنکه لایه شبکه بتواند دریافت کند، پردازش میکنند، قطعی بستهها و ارسال مجدد رخ میدهد. برای کاهش این مشکل، باید حداکثر اندازه بافر دریافت سوکت را افزایش دهیم.
میتوانید این محدودیتها را در فایل /etc/sysctl.conf یا از طریق دایرکتوری /etc/sysctl.d/ پیکربندی کنید. پارامترهای زیر حیاتی هستند:
# افزایش حداکثر اندازه بافر دریافت سوکت
net.core.rmem_max = 134217728
# افزایش حداکثر اندازه بافر دریافت TCP پیشفرض
net.core.rmem_default = 134217728
# افزایش حداکثر اندازه بافر ارسال سوکت
net.core.wmem_max = 134217728
# افزایش حداکثر اندازه بافر ارسال TCP پیشفرض
net.core.wmem_default = 134217728
این مقادیر بافرها را روی 128 مگابایت تنظیم میکنند که فضای کافی برای ترافیک پراکنده معمول در بارهای کاری کافکا فراهم میکند. پس از بهروزرسانی پیکربندی، تغییرات را با استفاده از sysctl -p اعمال کنید.
تنظیم محدودیتهای توصیفگر فایل و حافظه
مصرفکنندگان کافکا برای هر پارتیشنی که مصرف میکنند، توصیفگرهای فایل باز را حفظ میکنند. تحت بار کاری سنگین، تعداد اتصالات باز میتواند به سرعت محدودیتهای پیشفرض کاربر را تخلیه کند. علاوه بر این، کافکا از حافظه پنهان صفحه (page cache) برای ورودی/خروجی دیسک کارآمد استفاده میکند که مدیریت حافظه را حیاتی میسازد.
اول، اطمینان حاصل کنید که سیستم شما اجازه تعداد کافی توصیفگر فایل را میدهد. فایل /etc/security/limits.conf را ویرایش کنید تا محدودیتهای نرم و سخت را برای کاربری که کافکا را اجرا میکند، تنظیم نمایید:
* soft nofile 1000000
* hard nofile 1000000
دومین، زیرسیستم حافظه مجازی (VM) را بهینه کنید تا از تعویض (swapping) بیش از حد جلوگیری شود. شما میخواهید به هسته انگیزه دهید تا از RAM موجود برای کش کردن استفاده کند به جای اینکه دادهها را به دیسک تعویض کند.
# تنظیم swappiness برای به حداقل رساندن تعویض دیسک
vm.swappiness = 1
# حفظ حافظه پنهان صفحه تحت فشار حافظه
vm.vfs_cache_pressure = 50
تنظیم swappiness روی 1 تضمین میکند که هسته فقط در صورت ضرورت مطلق تعویض انجام دهد و حافظه را برای فرآیندهای بروکر و مصرفکننده کافکا حفظ کند.
تنظیم کنترل ازدحام TCP
الگوریتم کنترل ازدحام TCP تعیین میکند که سیستم چگونه به ازدحام شبکه واکنش نشان دهد. الگوریتم پیشفرض (اغلب CUBIC) به طور کلی خوب است، اما برای سناریوهای خاص با تراکم بالا و تأخیر کم، BBR (پهنای باند گلوگاه و زمان انتشار رفت و برگشت) میتواند عملکرد برتری ارائه دهد. اطمینان حاصل کنید که هسته شما از BBR پشتیبانی میکند و آن را فعال کنید:
# بررسی الگوریتمهای کنترل ازدحام موجود
sysctl net.ipv4.tcp_available_congestion_control
# فعالسازی BBR
sysctl net.ipv4.tcp_congestion_control=bbr
نتیجهگیری
بهینهسازی پارامترهای هسته لینوکس برای آپاچی کافکا یک راه حل یک اندازه برای همه نیست. مقادیر توصیه شده در اینجا به عنوان یک پایه قوی برای سناریوهای مصرفکننده با تراکم بالا عمل میکنند، اما باید همیشه بهبودهای عملکرد را با استفاده از ابزارهای مانیتورینگ مانند Prometheus و Grafana اعتبارسنجی کنید. به طور منظم معیارهایی مانند استفاده از بافر سوکت، نرخهای برخورد حافظه پنهان صفحه و تراکم شبکه را مانیتور کنید تا اطمینان حاصل کنید که تلاشهای تنظیم شما نتایج مورد انتظار را ارائه میدهند. با کنترل پیکربندی سیستمعامل پایه، شما زیرساخت کافکا خود را قادر میسازید تا تقاضاهای جریان داده مدرن را با تابآوری و سرعت مدیریت کند.