چرا Kafka سریع است؟

کافکا با استفاده از I/O ترتیبی و اصل کپی صفر(Zero Copy Principle)، به برتری انتقال پیام با تأخیر زمانی کم دست پیدا می‌کند. همین تکنیک‌ها به طور معمول در بسیاری از پلتفرم‌های پیام‌رسانی/جریان اطلاعاتی دیگر نیز استفاده می‌شوند. نمودار زیر نحوه انتقال داده بین تولیدکننده و مصرف‌کننده و مفهوم کپی صفر را نشان می‌دهد.

این نمودارها نشان می‌دهد که چگونه داده‌ها بین تولیدکننده و مصرف‌کننده منتقل می‌شود و کپی صفر به چه معناست.

مرحله ۱.۱ - ۱.۳: تولیدکننده داده‌ها را روی دیسک می‌نویسد.

مرحله ۲: مصرف‌کننده داده‌ها را بدون کپی صفر می‌خواند.

  • ۲.۱: داده‌ها از دیسک به کش (cache) سیستم‌عامل بارگذاری می‌شوند.
  • ۲.۲: داده‌ها از کش سیستم‌عامل به اپلیکیشن کافکا کپی می‌گردند.
  • ۲.۳: اپلیکیشن کافکا داده‌ها را به بافر سوکت (socket buffer) کپی می‌کند.
  • ۲.۴: داده‌ها از بافر سوکت به کارت شبکه کپی می‌شوند.
  • ۲.۵: کارت شبکه داده‌ها را به سمت مصرف‌کننده ارسال می‌کند.

مراحل با کپی صفر (مراحل ۳.۱ تا ۳.۳):

مرحله ۳: مصرف‌کننده داده‌ها را با کپی صفر می‌خواند.

  • ۳.۱: داده‌ها از دیسک به کش سیستم‌عامل بارگذاری می‌شوند.
  • ۳.۲: کش سیستم‌عامل با استفاده از دستور ()sendfile مستقیماً داده‌ها را به کارت شبکه کپی می‌کند.
  • ۳.۳: کارت شبکه داده‌ها را به سمت مصرف‌کننده ارسال می‌کند.

کپی صفر میانبری است برای صرفه‌جویی در کپی‌های متعدد داده‌ها بین محیط برنامه (application context) و محیط هسته (kernel context).این رویکرد زمان را تقریباً 65% کاهش می‌دهد.