آنچه در این صفحه می خوانید:
- آپاچی کافکا (Apache Kafka) چیست؟
- تاریخچه آپاچی کافکا (Apache Kafka)
- ویژگی های آپاچی کافکا (Apache Kafka)
- کاربرد آپاچی کافکا (Apache Kafka)
- معماری آپاچی کافکا (Apache Kafka)
آپاچی کافکا (Apache Kafka) چیست؟
Apache Kafka پلتفرم نرم افزاری اوپن سورس برای پردازش جریان است که توسط LinkedIn ساخته شده و به بنیاد نرم افزار Apache ارسال شده است. کافکا در اسکالا و جاوا نوشته شده است. هدف این پروژه فراهم کردن پلتفرم یکپارچه با توان بالا، با تأخیر کم برای پردازش داده های real-tiem است. کافکا می تواند از طریق Kafka Connect به سیستم های خارجی (برای import و export داده ها) متصل شود و کافکا، کتابخانه پردازش جریان جاوا را فراهم می کند.
کافکا از طرح پروتکل دودویی TCP استفاده می کند که برای کارآیی بهینه شده است و به انتزاع "مجموعه پیام" متکی است که به طور طبیعی پیام ها را با هم گروه می کند تا از سربالایی مسیر دور شبکه بکاهد. این "منجر به بسته های شبکه بزرگتر، عملیات پی در پی دیسک بزرگتر، بلوک های حافظه پیوسته [...] می شود که به کافکا اجازه می دهد تا یک جریان پراکنده از پیام تصادفی را به صورت خطی تبدیل کند."
Apache Kafka سیستم عامل پخش جریان است. این دقیقا به چه معناست؟
پلتفرم جریان سه ویژگی اصلی دارد:
- انتشار و اشتراک در جریان رکوردها، مشابه صف پیام یا سیستم پیام رسانی سازمانی
- جریان رکوردها را به روشی با دوام و مقاوم در برابر خطا ذخیره کنید.
- جریان پرونده های سوابق را هنگام وقوع پردازش کنید.
کافکا معمولاً برای دو کلاس گسترده برنامه کاربردی استفاده می شود:
- ساخت پایپ لاین داده در real-time که به طور قابل اعتماد داده ها را بین سیستم ها یا برنامه ها بدست آورند.
- ساختن برنامه های پخش جریان در real-time که به جریان داده ها تبدیل یا واکنش نشان می دهند.
برای درک اینکه کافکا چگونه این کارها را انجام می دهد، بیایید عمیق شویم و قابلیت های کافکا را بررسی کنیم.
چند مفهوم ابتدایی:
- کافکا به عنوان خوشه ای روی یک یا چند سرور اجرا می شود که می تواند چندین دیتاسنتر باشد.
- خوشه کافکا جریان دسته ای از سوابق را در دسته هایی به نام موضوعات ذخیره می کند.
- هر رکورد از یک کلید، یک مقدار و یک نشانگر زمانی تشکیل شده است.
تاریخچه آپاچی کافکا (Apache Kafka)
Apache Kafka در ابتدا توسط LinkedIn ساخته شد و متعاقباً در اوایل سال 2011 راه اندازی شد. در سال 2014، جون رائو، جی کرپس و Neha Narkhede، که در کافکا در LinkedIn کار کرده بودند، آن را ایجاد کردند. شرکت جدید به نام Confluent با محوریت کافکا ایجاد شد. طبق پست Quora از سال 2014، Kreps تصمیم گرفت نام نرم افزار را پس از نویسنده Franz Kafka نامگذاری کند زیرا این "سیستمی است که برای نوشتن بهینه شده است"، و او کارهای کافکا را دوست داشت.
ویژگی های آپاچی کافکا (Apache Kafka)
در اینجا، لیست مهمترین ویژگی های آپاچی کافکا آورده شده است:
مقیاس پذیری
آپاچی کافکا می تواند مقیاس پذیری را در هر چهار بعد، یعنی تولید کنندگان رویداد، پردازنده های رویداد، مصرف کنندگان رویداد و اتصالات رویداد کنترل کند. به عبارت دیگر، کافکا به راحتی و بدون خرابی مقیاس می دهد.
حجم بالا
کافکا می تواند با حجم عظیمی از جریان داده ها، به راحتی کار کند.
تبدیل داده ها
کافکا برای استخراج داده های جدید با استفاده از جریان داده ها از تولید کنندگان، فراهم می کند.
تحمل خطا
کلاستر کافکا می تواند به مستر و پایگاه های داده رسیدگی کند.
قابلیت اطمینان
از آنجا که کافکا دارای توزیع، تقسیم، تکثیر و تحمل خطا است، بسیار قابل اعتماد است.
دوام
این دوام است زیرا کافکا از گزارش متعهد توزیع شده استفاده می کند، به این معنی که پیام ها در سریعترین زمان ممکن روی دیسک باقی می مانند.
کارایی
برای انتشار و مشترک شدن پیام ها، کافکا از توان بالایی برخوردار است. حتی اگر بسیاری از TB پیام ها ذخیره شود، عملکرد پایدار را حفظ می کند.
قابلیت توسعه
روش های زیادی وجود دارد که برنامه ها می توانند از کافکا متصل شده و از آن استفاده کنند. علاوه بر این، روش هایی را برای نوشتن اتصالات جدید در صورت لزوم ارائه می دهد.
همانند سازی
با استفاده از پایپ لاین ورودی، می تواند رویدار ها را تکرار کنید.
کاربرد آپاچی کافکا (Apache Kafka)
در اینجا چند مورد از موارد محبوب استفاده از Apache Kafka آورده شده است.
پیام رسانی
کافکا به عنوان جایگزینی برای کارگزار پیام سنتی تر کار می کند. انتقال دهندگان پیام به دلایل مختلفی استفاده می شوند (برای جدا کردن پردازش از تولید کنندگان داده، بافر کردن پیام های پردازش نشده و غیره). در مقایسه با اکثر سیستم های پیام دهی، کافکا از توان بهتر، پارتیشن بندی داخلی، تکثیر و تحمل خطا برخوردار است که آن را به راه حل مناسب برای برنامه های پردازش پیام در مقیاس بزرگ تبدیل می کند. در تجربه ما، استفاده از پیام رسانی اغلب نسبتاً کم توان است اما ممکن است به تأخیر انتهایی تا پایان نیاز داشته باشد و غالباً به ضمانت دوام قوی که کافکا فراهم می کند بستگی دارد. در این دامنه، کافکا با سیستم های پیام رسانی سنتی مانند ActiveMQ یا RabbitMQ قابل مقایسه است.
پیگیری فعالیت وب سایت
مورد اصلی استفاده برای کافکا این بود که بتوانیم پایپ لاین ردیابی فعالیت کاربر را به عنوان مجموعه ای از فیدهای نشر و اشتراک در real-time بازسازی کنیم. این بدان معنی است که فعالیت سایت (نمایش صفحه، جستجوها یا سایر اقدامات ممکن است کاربران انجام دهند) برای موضوعات اصلی با موضوع در هر نوع فعالیت منتشر می شود. این فیدها برای اشتراک در مورد موارد مختلفی از جمله پردازش در real-time، نظارت در real-time و بارگیری در سیستم های ذخیره سازی داده هدوپ یا برای پردازش و گزارش آفلاین در دسترس است. پیگیری فعالیت اغلب حجم بسیار بالایی دارد زیرا پیام های فعالیت زیادی برای هر صفحه مشاهده می شود.
متریک
کافکا اغلب برای داده های نظارت عملیاتی استفاده می شود. این شامل جمع آوری آمار از برنامه های توزیع شده برای تولید فید متمرکز داده های عملیاتی است.
جمع آوری Log
بسیاری از افراد از کافکا به عنوان جایگزینی برای سلوشن جمع آوری log استفاده می کنند. جمع آوری Log به طور معمول فایل های فیزیکی را از سرورها جمع آوری کرده و آنها را برای پردازش در مکان مرکزی قرار می دهد (سرور پرونده یا HDFS). کافکا جزئیات فایل ها را خلاصه می کند و به عنوان پاک کننده ای از داده های ورود به سیستم یا رویداد به عنوان جریان از پیام ها، تمیز می کند. این امر به پردازش تاخیر کمتر و پشتیبانی آسان تر از منابع داده های مختلف و مصرف داده های توزیع شده اجازه می دهد. در مقایسه با سیستم های سنترال مانند سنگر یا فلوم، کافکا عملکرد به همان اندازه خوبی را ارائه می دهد، تضمین دوام قوی تر به دلیل همانند سازی و تأخیر بسیار پایین تر از end-to-end است.
پردازش جریان
بسیاری از کاربران داده های کافکا داده های پردازش پایپ لاین را که شامل چندین مرحله هستند پردازش می کنند، جایی که داده های ورودی خام از مباحث کافکا مصرف می شوند و سپس جمع می شوند، غنی سازی می شوند و در غیر این صورت برای مصرف بیشتر یا پردازش پیگیری به موضوعات جدید تبدیل می شوند. به عنوان مثال، پایپ لاین پردازشی برای توصیه به مقالات خبری ممکن است محتوای مقاله را از طریق فیدهای RSS خزیده و آنرا با عنوان "مقالات" منتشر کند. پردازش بیشتر ممکن است این محتوا را عادی یا فریب دهد و محتوای مقاله پاک شده را برای موضوع جدید منتشر کند. مرحله نهایی پردازش ممکن است سعی در توصیه این مطالب به کاربران داشته باشد. چنین پایپ لاین پردازشی نمودارهایی از جریان داده های real-time را بر اساس موضوعات فردی ایجاد می کنند. با شروع از 0.10.0.0، کتابخانه پردازش جریان سبک اما قدرتمند با نام Kafka Streams در آپاچی کافکا برای انجام پردازش داده ها همانطور که در بالا آمده است در آپاچی کافکا موجود است. جدا از جریان کافکا، ابزارهای جایگزین پردازش منبع باز شامل Apache Storm و Apache Samza است.
منابع رویداد
جستجوی رویداد شیوه ای از طراحی برنامه است که در آن تغییرات حالت به صورت توالی زمانی از سوابق ثبت می شود. پشتیبانی کافکا از داده های ذخیره شده بسیار بزرگ، آن را به عنوان پس زمینه ای عالی برای برنامه ساخته شده در این سبک، تبدیل می کند.
Commit Log
کافکا می تواند به عنوان نوعی تعهد خارجی برای سیستم توزیع شده باشد. این گزارش به تکرار داده ها بین گره ها کمک می کند و به عنوان مکانیسم دوباره همگام سازی گره های شکست خورده برای بازیابی اطلاعات آنها عمل می کند. ویژگی تراکم ورود به سیستم در کافکا به پشتیبانی از این استفاده کمک می کند. در این استفاده، کافکا مشابه پروژه Apache BookKeeper است.
معماری آپاچی کافکا (Apache Kafka)
کافکا پیام های دارای ارزش کلیدی را که از بسیاری از فرآیندهای خودسرانه به نام تولیدکننده تهیه می شوند، ذخیره می کند. داده ها را می توان در "پارتیشن" های مختلف در "موضوعات" مختلف تقسیم کرد. در بخش، پیام ها بطور جدی توسط جبران کننده های آن ها (موقعیت یك پیام در یك پارتیشن) سفارش داده می شوند و در فهرست بندی مرتب می شوند. سایر فرآیندهای موسوم به "مصرف کننده" می توانند پیام های پارتیشن ها را بخوانند. برای پردازش جریان، کافکا API Streams را ارائه می دهد که اجازه می دهد تا برنامه های جاوا را که از داده های کافکا استفاده می کنند را بنویسید و نتایج را به Kafka بنویسید. آپاچی کافکا همچنین با سیستم های پردازش جریان های خارجی مانند Apache Apex ،Apache Flink ،Apache Spark و Apache Storm همکاری دارد.
کافکا بر روی خوشه یا چند سرور اجرا می شود و پارتیشن های همه موضوعات در گره های خوشه توزیع می شود. علاوه بر این، پارتیشن ها به کارگزاران متعدد تکثیر می شوند. این معماری به کافکا اجازه می دهد تا جریان های گسترده ای از پیام ها را با روشی تحمل پذیر تحویل دهد و به آن اجازه داده است از بعضی از سیستم های پیام رسانی متداول مانند سرویس پیام جاوا (JMS)، پروتکل پیشرفته ارسال پیام (AMQP) و غیره جایگزین برخی از سیستم ها شود. با انتشار 0.0، کافکا نوشتن نامه های معامله ای را ارائه می دهد که پردازش جریان دقیقاً بار با استفاده از جریان API را ارائه می دهند.
کافکا از دو نوع موضوع پشتیبانی می کند: منظم و فشرده. موضوعات منظم را می توان با مدت زمان حفظ یا فضای محدود پیکربندی کرد. اگر سوابق قدیمی تر از زمان نگهداری مشخص وجود داشته باشد یا اگر فضای محدود برای پارتیشن بیشتر باشد، کافکا مجاز به حذف داده های قدیمی در فضای ذخیره سازی آزاد است. به طور پیش فرض، موضوعات با مدت زمان نگهداری 7 روز پیکربندی می شوند، اما همچنین می توان داده ها را به طور نامحدود ذخیره کرد. برای مباحث فشرده، پرونده ها بر اساس محدودیت زمانی یا مکانی منقضی نمی شوند. در عوض، کافکا با پیام های بعدی به عنوان به روزرسانی پیام های قدیمی تر با همان کلید رفتار می کند و تضمین نمی کند که آخرین پیام را در هر کلید حذف کنید. کاربران می توانند پیام ها را با نوشتن پیام با مقدار null برای کلید خاص، به طور کامل حذف کنند.
چهار API اصلی در کافکا وجود دارد:
- Producer API: به برنامه کاربردی اجازه می دهد تا جریان رکوردها را منتشر کند.
- Consumer API: به برنامه کاربردی برای مشترک شدن در مباحث و پردازش جریان سوابق اجازه می دهد.
- Connector API: می تواند API های تولیدکننده و مصرف کننده قابل استفاده مجدد را که موضوعات را به برنامه های موجود پیوند می دهد را اجرا می کند.
- Streams API: این API جریان های ورودی را به خروجی تبدیل می کند و نتیجه را تولید می کند.
API های consumer و producer بر روی پروتکل پیام رسانی کافکا ساخته شده و اجرای مرجع را برای consumer و کلاینت های producer کافکا در جاوا ارائه می دهند. پروتکل پیام رسانی اصلی پروتکل باینری است که توسعه دهندگان می توانند از آنها برای نوشتن consumer و کلاینت های producer خود به هر زبان برنامه نویسی استفاده کنند. این قفل کافکا را از سیستم اکو سیستم جاوا مجازی (JVM) باز می کند.