SlideShare a Scribd company logo
1 of 19
Download to read offline
1
‫کاکا‬ ‫محمدحسین‬
‫استاد‬‫تبار‬ ‫یعغوبی‬ ‫آقای‬ :
‫سال‬1399-1398
APACHE
KAFKA
2
‫فهرست‬
‫مقدمه‬............................................................................................................................................................................................3
Apache Kafka‫چگونه‬‫کار‬‫م‬‫ی‬‫کند؟‬................................................................................................................................................4
‫مق‬‫ی‬‫اس‬‫پذ‬‫ی‬‫ر‬‫ی‬‫ی‬‫ا‬‫توسعه‬‫پذ‬‫ی‬‫ر‬‫ی‬(Scalability).........................................................................................................................................6
‫انواع‬‫توسعه‬‫پذ‬‫ی‬‫ر‬‫ی‬.......................................................................................................................................................................6
‫توسعه‬‫عمود‬‫ی‬.......................................................................................................................................................................6
‫توسعه‬‫افق‬‫ی‬..........................................................................................................................................................................6
‫ساختار‬‫کافکا‬...................................................................................................................................................................................7
Producer:...............................................................................................................................................................................7
Consumer:.............................................................................................................................................................................7
Consumer Group:................................................................................................................................................................7
Broke:....................................................................................................................................................................................7
Cluster:...................................................................................................................................................................................8
Topic:......................................................................................................................................................................................8
Partition:................................................................................................................................................................................8
Primary Broker:.................................................................................................................................................................11
Replicas Brokers:...............................................................................................................................................................11
Replication Factor:...........................................................................................................................................................12
Apache ZooKeeper:..........................................................................................................................................................12
‫نما‬‫یی‬‫از‬‫معمار‬‫ی‬‫کل‬‫ی‬:......................................................................................................................................................................12
‫نحوه‬‫کار‬‫کافکا‬‫بصورت‬‫کل‬‫ی‬..............................................................................................................................................................13
‫ضمانت‬‫ها‬‫ی‬‫کافکا‬...........................................................................................................................................................................13
‫مصاحبه‬‫جون‬‫راو‬.............................................................................................................................................................................14
‫منابع‬...........................................................................................................................................................................................19
3
‫مقدمه‬
‫ابزار‬ ‫از‬ ‫مختصری‬ ‫شرح‬ ‫و‬ ‫معرفی‬ ‫به‬ ‫ابتدا‬ ‫مقاله‬ ‫این‬ ‫در‬Apache Kafka‫می‬‫مصاحبه‬ ‫از‬ ‫هایی‬ ‫قسمت‬ ‫همچنین‬ . ‫پردازیم‬
( ‫راو‬ ‫جون‬Jun rao)‫می‬ ‫بیان‬ ‫را‬ ‫میرسون‬ ‫جف‬ ‫با‬.‫کنیم‬
‫جون‬‫راو‬‫ابتدا‬‫در‬LinkedIn‫مشغول‬‫بوده‬‫است‬‫و‬‫سپس‬‫به‬‫افتتاح‬‫شرکتی‬‫مبادرت‬‫کرده‬‫که‬‫کارش‬‫به‬‫شکل‬‫گسترده‬‫ای‬‫مبتنی‬‫بر‬
Kafka‫است‬.‫او‬‫یک‬‫محقق‬‫و‬‫توسعه‬‫دهنده‬‫نرم‬‫افزار‬‫است‬‫و‬‫بیشتر‬‫زمانش‬‫را‬‫به‬‫تحقیق‬‫در‬‫حوزه‬‫های‬MapReduce،‫پایگاه‬‫های‬
‫مقیاس‬،‫پذیر‬‫پردازش‬‫پرس‬‫وجوها‬‫و‬‫جنبه‬‫های‬‫دیگر‬‫انباره‬‫های‬‫داده‬(DataWarehouse)‫صرف‬‫کرده‬‫است‬.‫او‬‫طی‬‫چند‬‫سال‬
‫گذشته‬‫از‬‫تثبیت‬‫کننده‬‫های‬‫کد‬(Commiter)‫در‬‫پروژه‬Kafka‫بوده‬‫است‬.
Apache Kafka‫چیست؟‬
‫آپاچی‬‫کافکا‬‫یک‬‫پلتفرم‬‫توزیع‬‫شده‬‫برای‬‫پردازش‬‫داده‬‫های‬‫جریانی‬‫بوده‬‫و‬‫قادر‬‫به‬‫رسیدگی‬‫و‬‫پردازش‬‫چندین‬‫تریلیو‬‫ن‬‫رویداد‬
‫به‬‫صورت‬‫همزمان‬‫است‬.‫کافکا‬‫در‬‫ابتدا‬‫به‬‫عنوان‬‫یک‬‫ابزار‬‫برای‬‫ارسال‬‫پیامهایی‬‫با‬‫تعداد‬‫باال‬‫بکار‬‫برده‬‫می‬‫شد‬.‫کا‬‫فکا‬‫از‬‫زمان‬‫ایجاد‬
‫و‬‫منبع‬‫باز‬‫شدن‬‫توسط‬‫لینکدین‬‫در‬‫سال‬۲۰11،‫به‬‫سرعت‬‫از‬‫ارسال‬‫پیام‬‫به‬‫یک‬‫پلتفرم‬‫پردازش‬‫توزیعی‬‫کامل‬‫تبدیل‬‫شده‬‫ا‬‫ست‬.
‫آپاچی‬،‫کافکا‬‫به‬‫عنوان‬‫یک‬‫پلتفرم‬‫داده‬‫های‬‫در‬،‫جریان‬‫دارای‬‫قابلیتهایی‬‫ازقبیل‬‫زمان‬‫پاسخ‬،‫کوتاه‬‫کارایی‬‫باالو‬‫ت‬‫حمل‬‫خطا‬‫بوده‬‫و‬
‫قادر‬‫به‬‫پردازش‬‫جریانهایی‬‫سریع‬‫از‬‫رویدادها‬‫می‬‫باشد‬.،‫کافکا‬‫برای‬‫پشتیبانی‬‫از‬‫برنامه‬‫های‬‫کاربردی‬‫مشتری‬‫و‬‫اتصا‬‫ل‬‫سیستم‬‫های‬
‫پایین‬‫دست‬‫با‬‫داده‬‫های‬‫زمان‬‫واقعی‬‫پاسخ‬‫های‬‫در‬‫حد‬‫میلی‬‫ثانیه‬‫فراهم‬‫می‬‫کند‬.
4
Apache Kafka‫می‬ ‫کار‬ ‫چگونه‬‫کند؟‬
‫همانطور‬‫که‬‫گفته‬‫شد‬‫وظیفه‬‫و‬‫هدف‬‫اصلی‬Apache Kafka،‫ارائه‬‫یک‬‫بستر‬‫برای‬‫مدیریت‬‫و‬‫کنترل‬‫جریان‬‫های‬‫اطالعاتی‬‫با‬
‫کارآیی‬‫بسیار‬،‫باال‬‫در‬‫سیستم‬‫ها‬‫و‬‫زیرسیستمهای‬‫مختلف‬‫است‬.‫یعنی‬‫شما‬‫می‬‫توانید‬‫با‬‫ایجاد‬‫کردن‬‫یک‬Pipeline‫برای‬‫جریان‬
‫اطالعات‬،‫خود‬‫وابستگی‬‫مستقیم‬‫سیستمها‬‫و‬‫زیرسیستمها‬‫را‬‫از‬‫بین‬‫ببرید؛‬‫آن‬‫هم‬‫بصورتی‬‫که‬‫بروز‬‫مشکلی‬‫در‬‫هر‬،‫قسمت‬‫ک‬‫مترین‬
‫میزان‬‫تاثیر‬‫را‬‫در‬‫سایر‬‫قسمتها‬‫داشته‬‫باشد‬.
‫فرض‬‫کنید‬‫شما‬‫تعداد‬‫زیادی‬‫سیستم‬‫و‬‫زیرسیستم‬‫مختلف‬‫را‬‫داشته‬‫باشید‬‫که‬‫هر‬‫کدام‬‫از‬‫آنها‬‫نیازمند‬‫ارتباط‬‫با‬‫برخی‬‫ا‬‫ز‬‫قسمتهای‬
‫دیگر‬‫است‬.‫در‬‫این‬‫صورت‬‫شما‬‫دو‬‫راه‬‫دارید‬:‫اول‬‫اینکه‬‫در‬‫هر‬‫قسمت‬‫سرویس‬‫هایی‬‫را‬‫برای‬‫ارتباط‬‫با‬‫سایر‬‫قسمت‬‫ها‬‫پیاده‬‫سازی‬
‫کنید‬‫اینکه‬ ‫یا‬‫هر‬‫قسمت‬‫بصورت‬‫مستقیم‬‫با‬‫سایر‬‫قسمتها‬‫در‬‫ارتباط‬‫باشد‬.
‫مشخصا‬‫کنترل‬‫و‬‫مدیریت‬‫جریان‬‫اطالعاتی‬‫در‬‫این‬‫پیاده‬‫سازی‬‫کار‬‫بسیار‬‫دشواری‬‫است‬.‫تغییر‬‫هر‬،‫قسمت‬‫تاثیر‬‫مستقیمی‬‫بر‬‫روی‬
‫سایر‬‫قسمتها‬‫دارد‬‫و‬‫در‬‫صورتی‬‫که‬‫هریک‬‫از‬‫قسمتها‬‫با‬‫مشکلی‬‫روبرو‬،‫شوند‬‫سایر‬‫قسمتهای‬‫مرتبط‬‫نیز‬‫با‬‫مشکل‬‫روبرو‬‫می‬‫شوند‬.
‫این‬‫مشکل‬‫زمانی‬‫بسیار‬‫نمایان‬‫می‬‫شود‬‫که‬‫در‬‫معماری‬‫هایی‬‫مانند‬،‫میکروسرویس‬‫بدلیل‬‫باال‬‫رفتن‬‫تعداد‬‫زیرسیستم‬‫ها‬‫و‬‫ارتباطات‬
،‫آنها‬‫مدیریت‬‫این‬‫ارتباطات‬‫کار‬‫بسیار‬،‫دشوار‬‫پرهزینه‬‫و‬‫پیچیده‬‫ای‬‫می‬‫شود‬.
‫روش‬Apache Kafka‫برای‬‫رفع‬‫مشکل‬‫فوق‬‫به‬‫این‬‫صورت‬‫است‬‫که‬Kafka‫با‬‫بر‬‫عهده‬‫گرفتن‬‫مدیریت‬‫ارتباطات‬‫و‬‫جریان‬
‫داده‬‫ای‬‫قسمت‬‫های‬،‫مختلف‬‫به‬‫شما‬‫کمک‬‫می‬‫کند‬‫تا‬‫تیم‬‫پیاده‬،‫سازی‬‫تنها‬‫تمرکزشان‬‫را‬‫بر‬‫روی‬Business‫ی‬‫که‬‫می‬‫خواهند‬‫پیاده‬
5
‫سازی‬،‫کنند‬‫قرار‬‫دهند‬.‫با‬‫این‬‫روش‬‫می‬‫توانیم‬‫به‬‫راحتی‬‫سیستم‬‫هایی‬‫را‬‫پیاده‬‫سازی‬‫کنیم‬‫که‬‫از‬‫نظر‬‫ارتباطی‬‫در‬‫حالت‬،‫معمول‬
‫پیچیده‬‫یا‬‫بسیار‬‫پیچیده‬‫اند‬.
: ‫کنید‬ ‫مشاهده‬
‫همانطور‬‫که‬‫می‬‫بینید‬‫دیگر‬‫نیازی‬‫نیست‬‫تا‬‫قسمتهای‬‫مختلف‬‫بصورت‬‫مستقیم‬‫با‬‫یکدیگر‬‫در‬‫ارتباط‬‫باشند؛‬‫تمامی‬‫ارتباطات‬‫از‬‫طریق‬
Kafka‫انجام‬‫می‬‫شود‬.‫تغییر‬‫یک‬،‫قسمت‬‫تاثیر‬‫زیادی‬‫بر‬‫روی‬‫سایر‬‫قسمتها‬‫یعنی‬ ‫ندارد‬‫دسترس‬‫خارج‬‫شدن‬‫یا‬‫بروز‬‫هر‬‫گونه‬
‫مشکلی‬‫در‬‫یک‬،‫قسمت‬‫بر‬‫روی‬‫کل‬‫سیستم‬‫تاثیر‬‫زیادی‬‫ندارد‬.‫پیام‬‫های‬‫مربوط‬‫به‬‫یک‬‫قسمت‬‫تا‬‫زمانی‬‫که‬‫پردازش‬‫نشده‬‫اند‬‫از‬‫بین‬
‫نمی‬‫روند؛‬‫پس‬‫سیستم‬‫ها‬‫می‬‫توانند‬‫در‬‫حالت‬Offline‫نیز‬‫به‬‫کار‬‫خود‬‫ادامه‬‫دهند‬.‫شما‬‫می‬‫توانید‬‫در‬‫این‬‫روش‬‫تمامی‬‫قسمت‬‫های‬
‫سیستم‬‫را‬‫بصورت‬‫یک‬Cluster‫پیاده‬‫سازی‬‫کنید‬.‫اینصورت‬ ‫در‬‫احتمال‬‫از‬‫دسترس‬‫خارج‬‫شدن‬‫هر‬‫قسمت‬‫به‬‫کمترین‬‫میزان‬
‫می‬‫رسد‬.‫حتی‬‫درصورتی‬‫که‬‫یک‬‫قسمت‬‫بصورت‬‫موقت‬‫از‬‫دسترس‬‫خارج‬،‫شود‬‫پیام‬‫های‬‫مرتبط‬‫با‬‫آن‬‫قسمت‬‫تا‬‫زمانی‬‫که‬‫دوباره‬‫به‬
‫جریان‬‫پردازش‬،‫بازگردد‬‫از‬‫بین‬‫نمی‬‫بلکه‬ ‫روند‬‫پس‬‫از‬‫اضافه‬‫شدن‬‫قسمت‬‫از‬‫دسترس‬‫خارج‬،‫شده‬‫بالفاصله‬‫تمامی‬‫پیامهای‬‫مرتبط‬
‫با‬‫آن‬‫قسمت‬‫برایش‬‫ارسال‬‫می‬‫شوند‬.‫برای‬‫باال‬‫رفتن‬‫میزان‬‫کارآیی‬‫و‬‫تحمل‬،‫خطا‬‫به‬‫راحتی‬‫می‬‫توانید‬‫خود‬Kafka‫را‬‫نیز‬‫بصورت‬
‫یک‬Cluster‫پیاده‬‫سازی‬‫کنید‬‫و‬‫با‬‫باال‬‫رفتن‬‫تعداد‬،‫درخواست‬‫در‬‫صورت‬‫نیاز‬‫می‬‫توانید‬‫عملیات‬‫مقیاس‬‫پذیری‬‫افقی‬‫را‬‫به‬
‫راحت‬‫ترین‬‫روش‬‫ممکن‬‫انجام‬‫دهید‬.
6
‫مقیاس‬‫پذیری‬‫یا‬‫توسعه‬‫پذیری‬(Scalability)
‫توسعه‬‫پذیری‬‫یا‬‫همان‬Scalability‫که‬‫بعضا‬‫به‬‫آن‬‫مقیاس‬‫پذیری‬‫هم‬‫گفته‬‫می‬‫شود‬‫یک‬‫تعریف‬‫بسیار‬‫ساده‬‫دارد‬:‫سیستم‬‫ی‬‫که‬
‫بتواند‬‫خواسته‬‫های‬‫در‬‫حال‬‫افزایش‬‫را‬‫پاسخ‬‫دهد‬.‫برای‬‫مثال‬‫شما‬‫یک‬‫نرم‬‫افزار‬‫دارید‬‫که‬‫بر‬‫روی‬‫یک‬‫سرور‬‫قرار‬‫دارد‬
(‫مثال‬‫یک‬‫وب‬‫سایت‬)‫و‬‫روزانه‬1۰۰‫بازدید‬‫کننده‬‫از‬‫وب‬‫سایت‬‫شما‬‫دیدن‬‫می‬‫کنند‬‫اما‬‫بعد‬‫از‬‫مدتی‬‫این‬1۰۰‫بازدید‬‫کننده‬‫در‬‫روز‬
‫به‬1۰‫هزار‬‫بازدید‬‫کننده‬‫می‬،‫رسید‬‫در‬‫صورتیکه‬‫سرور‬‫شما‬‫بتواند‬‫با‬‫هزینه‬‫ی‬‫به‬‫نسبت‬‫معقولی‬‫این‬1۰‫هزار‬‫بازدید‬‫کنن‬‫ده‬‫را‬‫مدیریت‬
،‫کند‬‫شما‬‫یک‬‫سیستم‬Scalable‫یا‬‫توسعه‬‫پذیر‬‫خواهید‬‫داشت‬.‫مثال‬‫فرض‬،‫کنید‬‫برای‬1۰۰‫بازدید‬‫در‬،‫روز‬‫شما‬‫مبلغ‬1۰‫هز‬‫ار‬
‫تومان‬‫در‬‫ماه‬‫پرداخت‬‫میکردید‬.‫حاال‬‫که‬‫بازدید‬‫شما‬1۰‫هزار‬‫نفر‬‫شده‬(‫یعنی‬1۰۰‫برابر‬)،‫هزینه‬‫ی‬‫شما‬‫نباید‬1۰۰‫برابر‬‫شود‬.‫مثال‬
‫هزینه‬‫شما‬‫به‬‫جای‬1۰‫هزار‬‫تومان‬‫در‬،‫ماه‬‫بایستی‬۲۰‫هزار‬‫تومان‬‫در‬‫ماه‬،‫شود‬‫تا‬‫بتوانیم‬‫بگوییم‬‫یک‬‫سیستم‬‫توسعه‬‫پذی‬‫ر‬‫داریم‬.
‫یکی‬‫از‬‫اهداف‬‫سیستم‬‫های‬‫توزیع‬‫شده‬،‫نیز‬‫توسعه‬‫پذیری‬‫آن‬‫هاست‬.(‫به‬‫قول‬‫آقای‬‫تننباوم‬‫یکی‬‫از‬‫چهار‬‫هدف‬‫سیستم‬‫تو‬‫زیع‬
،‫شده‬‫توسعه‬‫پذیر‬‫بودن‬‫آن‬‫است‬.‫یکی‬‫دیگر‬‫از‬‫این‬‫اهداف‬‫سیستم‬‫توزیع‬،‫شده‬‫شفافیت‬‫یا‬‫همان‬Transparency‫است‬).
‫گفتیم‬ ‫که‬ ‫همانطور‬‫اگر‬‫در‬‫یک‬‫سیستم‬‫توزیع‬،‫شده‬‫درخواست‬‫هایی‬(Requests)‫که‬‫به‬‫سیستم‬‫می‬‫آیند‬1۰‫برابر‬،‫شود‬‫سیس‬‫تم‬
‫توزیع‬‫شده‬‫باید‬‫بتواند‬‫مثال‬‫با‬۲‫برابر‬‫کردن‬‫منابع‬،‫خود‬‫این‬‫تعداد‬‫درخواست‬‫ها‬‫را‬‫بدون‬‫مشکل‬‫پاسخ‬‫گو‬‫باشد‬.
‫انواع‬‫توسعه‬‫پذیری‬
1.‫توسعه‬‫عمودی‬‫یا‬‫به‬‫اصطالح‬Scale Up
۲.‫توسعه‬‫افقی‬‫یا‬‫به‬‫اصطالح‬Scale Out
‫عمودی‬ ‫توسعه‬
‫در‬‫توسعه‬‫عمودی‬‫که‬‫به‬‫آن‬Scale Up‫کردن‬‫نیز‬‫گفته‬‫می‬،‫شود‬‫شما‬‫به‬‫هر‬‫کدام‬‫از‬‫گره‬‫ها‬(Nodes)‫که‬‫در‬‫واقع‬‫همان‬
‫کامپیوتر‬‫های‬‫موجود‬‫در‬‫سیستم‬‫توزیع‬‫شده‬،‫هستند‬‫منابعی‬‫مانند‬Ram،CPU‫یا‬‫کارت‬‫گرافیک‬‫و‬…‫اضافه‬‫میکنید‬.‫با‬‫ای‬‫ن‬‫کار‬
‫شما‬‫سیستم‬‫های‬‫قوی‬‫تری‬‫دارید‬‫که‬‫میتوانند‬‫به‬‫درخواست‬‫های‬‫بیشتری‬‫در‬‫زمان‬‫سریعتر‬‫پاسخ‬‫دهند‬.
‫افقی‬ ‫توسعه‬
‫در‬‫این‬،‫روش‬‫به‬‫جای‬‫اضافه‬‫کردن‬‫منابع‬‫مانند‬ ‫بیشتر‬Ram‫به‬‫کامیپوترهای‬‫جاری‬‫در‬‫سیستم‬‫توزیع‬،‫شده‬‫تعدا‬‫گره‬‫ها‬(Nodes)
‫را‬‫افزایش‬‫می‬‫دهیم‬.‫برای‬‫مثال‬‫تعدادی‬‫بیشتری‬‫کامپیوتر‬‫به‬‫سیستم‬‫توزیع‬‫شده‬‫اضافه‬‫می‬‫کنیم‬.
‫اگر‬‫چه‬‫روش‬،‫اول‬‫روشی‬‫ساده‬‫و‬ً‫ا‬‫بعض‬‫کارا‬،‫است‬‫ولی‬‫پیشنهاد‬‫می‬‫شود‬‫در‬‫یک‬‫سیستم‬‫توزیع‬‫شده‬‫از‬‫روش‬‫دوم‬‫است‬‫فاده‬‫کنید‬.
7
‫ساختار‬‫کافکا‬
‫کافکا‬‫به‬‫صورت‬‫خوشه‬‫ای‬‫بر‬‫روی‬‫یک‬‫یا‬‫چند‬‫سرور‬‫کار‬‫می‬.‫کند‬
‫کافکا‬‫جریان‬‫داده‬‫ها‬‫و‬‫رکورد‬‫ها‬‫را‬‫در‬‫ساختارهایی‬‫به‬‫نام‬‫تاپیک‬( topics)‫ذخیره‬‫می‬.‫کند‬
‫هر‬‫رکوردی‬‫دارای‬‫یک‬،‫کلید‬‫یک‬‫مقدار‬‫و‬‫یک‬‫برچسب‬‫زمانی‬‫می‬‫باشد‬‫تا‬‫بصورت‬‫مجزا‬‫از‬‫سایر‬‫رکورد‬‫ها‬‫مشخص‬.‫باشد‬
: ‫کنیم‬ ‫تعریف‬ ‫را‬ ‫اصطالح‬ ‫چندین‬ ‫باید‬ ‫حال‬
Producer:
‫ارسال‬‫کننده‬‫کننده‬ ‫تولید‬ ‫رابط‬ ‫یا‬ ‫پیام‬.Application،‫سیستم‬‫یا‬‫زیرسیستمی‬‫که‬ ‫است‬‫عملیات‬Publish‫پیام‬‫را‬‫ب‬‫رای‬Topic
‫خاص‬‫از‬Kafka Server‫انجام‬‫می‬‫دهد‬.
Consumer:
‫دریافت‬‫کننده‬‫کننده‬ ‫مصرف‬ ‫رابط‬ ‫یا‬ ‫پیام‬.Application،‫سیستم‬‫یا‬‫زیرسیستمی‬‫که‬‫بر‬‫روی‬‫یک‬‫یا‬‫چند‬Topic،‫خاص‬
Subscribe‫کرده‬‫است‬.‫پردازد‬ ‫می‬ ‫رکوردها‬ ‫پردازش‬ ‫به‬ ‫و‬ ‫شده‬ ‫متصل‬ ‫تاپیک‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫به‬ ‫دیگر‬ ‫عبارتی‬ ‫به‬(‫همچنین‬‫ه‬‫ر‬
Consumer‫می‬‫تواند‬‫روی‬‫یک‬‫یا‬‫چند‬Partition‫از‬‫یک‬Topic‫خاص‬‫نیز‬Subscribe‫کند‬.)
Consumer Group:
‫گروهی‬‫از‬Consumer‫ها‬‫می‬‫باشند‬‫که‬‫با‬‫یک‬group.id،‫مشخص‬‫شده‬‫اند‬.‫عموما‬‫این‬‫گروه‬‫شامل‬‫یک‬Replicate‫از‬
‫یک‬Application‫است؛‬‫مانند‬‫گروه‬‫ارسال‬‫کننده‬‫ایمیل‬(‫یک‬‫زیر‬‫سیستم‬‫ارسال‬‫کننده‬‫ایمیل‬‫که‬‫چندین‬‫بار‬‫در‬‫سرور‬‫های‬
‫مختلف‬‫اجرا‬‫شده‬‫است‬)Kafka.‫این‬‫ضمانت‬‫را‬‫به‬‫ما‬‫می‬‫دهد‬‫که‬‫هر‬‫پیام‬‫ذخیره‬‫شده‬‫در‬‫یک‬Topic،‫برای‬‫تمامی‬
ConsumerGroup‫های‬‫مرتبط‬‫ارسال‬‫شود؛‬‫اما‬‫در‬‫هر‬Consumer Group،‫تنها‬‫یک‬‫دریافت‬‫کننده‬‫داشته‬‫باشد‬.‫یعنی‬
‫هر‬‫پیام‬‫در‬‫هر‬Consumer Group،‫تنها‬‫توسط‬‫یک‬Consumer‫دریافت‬‫شود‬.
Broke:
‫قسمتی‬‫که‬‫تمامی‬‫پیام‬‫ها‬‫را‬‫از‬Producer‫دریافت‬‫می‬،‫کند‬‫سپس‬‫آن‬‫ها‬‫را‬‫در‬Log‫مربوط‬‫به‬Topic‫مشخص‬‫ش‬‫ده‬‫ذخیره‬
‫می‬‫کند‬‫و‬‫پس‬‫از‬،‫آن‬‫پیام‬‫ذخیره‬‫شده‬‫را‬‫برای‬‫تمامی‬Consumer‫های‬‫مرتبط‬‫ارسال‬‫می‬‫کند‬.
8
Cluster:
‫مجموعه‬‫ای‬‫از‬Broker‫ها‬‫می‬‫باشد‬‫که‬‫بصورت‬‫یک‬Cluster‫اجرا‬‫شده‬‫اند‬.‫این‬‫کار‬‫باعث‬‫باال‬‫رفتن‬‫کارآیی‬‫و‬‫تح‬‫مل‬‫خطا‬‫می‬‫شود‬.
Topic:
‫یک‬‫دسته‬‫بندی‬‫برای‬‫ذخیره‬‫کردن‬‫پیامهای‬Publish‫شده‬‫می‬‫باشد‬.Topic‫ها‬‫همانند‬‫مفهوم‬Table‫ها‬‫در‬SQL Server
‫می‬‫باشند‬.‫همانطور‬‫که‬‫می‬‫دانید‬‫هر‬Table‫از‬‫قبل‬‫تعریف‬‫شده‬‫است‬.‫یک‬‫کاربر‬‫با‬‫ارسال‬‫یک‬‫درخواست‬‫ثب‬،‫ت‬‫داده‬‫ها‬‫را‬‫در‬‫آن‬
‫ذخیره‬‫می‬‫کند‬‫و‬‫سپس‬‫گروهی‬‫از‬‫کاربران‬‫از‬‫داده‬‫های‬‫ثبت‬‫شده‬‫استفاده‬‫می‬‫کنند‬.‫در‬‫مفهموم‬Topic‫نیز‬‫اب‬‫تدا‬‫ما‬Topic‫مورد‬
‫نظر‬‫را‬‫با‬‫خصوصیاتی‬‫که‬‫باید‬‫داشته‬‫باشد‬‫تعریف‬‫می‬‫کنیم‬(‫البته‬‫می‬‫توان‬‫بصورت‬Dynamic‫نیز‬‫آن‬‫را‬‫تعری‬‫ف‬‫کرد؛‬‫اما‬‫این‬‫روش‬
‫توصیه‬‫نمی‬‫شود‬.)‫سپس‬Producer‫پیام‬‫مربوطه‬‫را‬‫به‬‫همراه‬‫نام‬Topic‫برای‬Broker‫ارسال‬‫می‬‫کند‬.Broker‫پی‬‫ام‬‫را‬‫در‬
Partition‫مربوطه‬‫از‬Topic‫ذخیره‬‫می‬‫کند‬‫و‬‫سپس‬‫پیام‬‫برای‬‫تمامی‬Consumer‫های‬‫مربوطه‬‫ارسال‬‫می‬‫شود‬.
Partition:
‫یکی‬‫از‬‫تفاوتهای‬‫بسیار‬‫مهم‬Kafka‫با‬‫سایر‬Message broker‫ها‬‫مانند‬RabitMQ‫که‬‫باعث‬‫باالرفتن‬‫کارآیی‬‫آن‬‫نیز‬
‫شده‬،‫است‬‫قابلیت‬Partition‫در‬Topic‫ها‬‫می‬‫باشد‬.‫در‬‫واقع‬‫هر‬Topic‫از‬‫یک‬‫یا‬‫چندین‬Partition‫برای‬‫ذخیره‬‫داده‬‫ها‬
‫استفاده‬‫می‬‫کند‬.‫تعریف‬‫درست‬‫تعداد‬Partition‫ها‬‫در‬‫یک‬Topic،‫تاثیر‬‫مستقیمی‬‫بر‬‫درجه‬‫همزمانی‬‫و‬‫کارآیی‬‫د‬‫ر‬‫آن‬
Topic‫و‬‫کل‬‫سیستم‬‫دارد‬.‫در‬Kafka‫تمامی‬‫پیام‬‫ها‬‫به‬‫همان‬‫ترتیبی‬‫که‬‫وارد‬‫شده‬،‫اند‬‫در‬Partition‫های‬‫ی‬‫ک‬Topic‫ذخیره‬
‫می‬‫شوند‬‫و‬‫به‬‫همان‬‫ترتیب‬‫نیز‬‫برای‬Consumer‫ها‬‫ارسال‬‫می‬‫شوند‬.
‫بطور‬‫مثال‬‫فرض‬‫کنید‬‫تعداد‬Partition‫های‬‫یک‬Topic‫با‬‫نام‬DepartmentMessage‫یک‬ ،‫می‬‫باشد‬(‫از‬‫این‬Topic
‫برای‬‫ذخیره‬‫پیامهای‬‫واحدهای‬‫مختلف‬‫یک‬‫سازمان‬‫استفاده‬‫می‬‫شود‬.)‫در‬‫این‬‫صورت‬‫تمامی‬‫پیامهای‬‫دریافتی‬‫تنها‬‫در‬‫ی‬‫ک‬
Partition‫ذخیره‬‫می‬‫شوند‬.
9
‫هر‬‫خانه‬‫از‬‫یک‬Partition،‫توسط‬‫یک‬‫شناسه‬‫از‬‫نوع‬int‫و‬‫با‬‫نام‬offset‫در‬‫دسترس‬‫است‬.‫تمامی‬‫پیام‬‫های‬‫جدید‬‫ارسالی‬
‫توسط‬Producer‫با‬offset‫ا‬‫ی‬‫بزرگتر‬‫از‬offset‫موجود‬‫در‬‫این‬Partition‫ذخیره‬‫می‬‫شوند؛‬‫یعنی‬‫در‬‫انتهای‬‫آن‬‫قرار‬
‫می‬‫گیرند‬.‫در‬‫مثال‬‫فوق‬‫در‬‫صورت‬‫دریافت‬‫پیام‬،‫جدید‬offset‫آن‬‫با‬‫عدد‬1۰‫مقداردهی‬‫می‬‫شود‬.‫همچنین‬‫عملیات‬‫خواندن‬‫نیز‬‫از‬
‫کوچکترین‬offset‫ا‬‫ی‬‫که‬‫هنوز‬‫مقدار‬‫آن‬‫توسط‬Consumer‫ها‬‫خوانده‬‫نشده‬،‫است‬‫انجام‬‫می‬‫شود‬.‫همانطور‬‫که‬‫مشخص‬،‫است‬
‫بدلیل‬‫اینکه‬‫تعداد‬Partition‫های‬‫این‬‫مثال‬‫عدد‬‫یک‬‫می‬،‫باشد‬‫تمامی‬‫درخواست‬‫های‬Producer‫ها‬‫در‬‫یک‬Partition‫قرار‬
‫می‬‫گیرند‬‫و‬‫تمامی‬Consumer‫ها‬‫نیز‬‫از‬‫طریق‬‫یک‬Partition‫به‬‫پیام‬‫ها‬‫دسترسی‬‫دارند؛‬‫یعنی‬‫در‬‫صورت‬‫باال‬‫بردن‬‫تعداد‬
Producer‫ها‬‫یا‬Consumer‫ها‬،‫کارآیی‬‫باال‬‫نمی‬‫رود‬.‫البته‬‫با‬‫اینکه‬‫کنترل‬‫مقدار‬‫اولیه‬offse‫برای‬‫شروع‬‫یک‬Consumer
‫به‬‫دست‬‫خود‬Consumer‫و‬Zookeeper،‫است‬‫اما‬‫در‬‫اکثر‬‫موارد‬‫تمامی‬Consumer‫های‬‫یک‬Topic‫باید‬‫از‬‫یک‬
،‫نقطه‬‫شروع‬‫به‬‫خواندن‬‫داده‬‫ها‬‫کنند‬.‫در‬‫این‬‫حالت‬‫تا‬‫زمانیکه‬‫پیام‬‫با‬offset 1،‫توسط‬Consumer‫ا‬‫ی‬‫خوانده‬،‫نشود‬‫هیچ‬
Consumer‫ا‬‫ی‬‫نمی‬‫تواند‬‫پیام‬‫شماره‬۲‫را‬‫بخواند‬.‫استفاده‬‫کردن‬‫از‬‫یک‬Partition‫بیشتر‬‫زمانی‬‫کاربرد‬‫دارد‬‫که‬‫بخواهید‬
‫تمامی‬‫پیام‬،‫هایتان‬‫واقعا‬‫در‬‫یک‬‫صف‬‫قرار‬‫بگیرند‬.
‫حال‬‫فرض‬‫کنید‬‫در‬‫سازمان‬‫شما‬‫سه‬‫واحد‬،‫اداری‬‫مالی‬‫و‬‫آموزش‬‫وجود‬‫دارد‬.‫در‬‫این‬‫صورت‬‫بدلیل‬‫اینکه‬‫تمامی‬‫پیام‬‫ها‬‫در‬‫یک‬
Partition‫ذخیره‬‫می‬،‫شوند‬‫تا‬‫زمانی‬‫که‬‫یک‬‫واحد‬‫تمامی‬‫پیام‬‫های‬‫مرتبط‬‫با‬‫خود‬‫را‬‫از‬‫ابتدای‬Partition‫نخوانده‬،‫است‬‫دیگر‬
‫واحدها‬‫نمی‬‫توانند‬‫به‬‫پیام‬‫های‬‫مرتبط‬‫با‬‫خود‬‫دسترسی‬‫داشته‬‫باشند‬.‫پس‬‫در‬‫این‬‫صورت‬‫ما‬‫می‬‫توانیم‬‫تعداد‬Partition‫های‬‫این‬
Topic‫را‬‫عدد‬3‫درنظر‬‫بگیریم؛‬‫بصورتی‬‫که‬‫پیامهای‬‫مرتبط‬‫با‬‫هر‬‫واحد‬‫در‬‫یک‬Partition‫جدا‬‫قرار‬‫بگیرد‬.
: ‫شکل‬ ‫بدین‬
10
‫در‬‫این‬‫روش‬‫هر‬Producer‫زمانیکه‬‫پیامی‬‫را‬‫برای‬‫این‬Topic‫ارسال‬‫می‬،‫کند‬‫یک‬Key‫نیز‬‫برای‬‫آن‬‫مشخص‬‫می‬‫کند‬‫و‬‫این‬
Key‫نشان‬‫دهنده‬‫این‬‫است‬‫که‬‫پیام‬‫جدید‬‫باید‬‫در‬‫کدام‬Partition‫ذخیره‬‫شود‬.‫یعنی‬‫بصورت‬‫همزمان‬‫می‬‫توانید‬‫در‬‫هر‬‫سه‬
Partition،‫پیام‬‫هایتان‬‫را‬‫ذخیره‬‫کنید؛‬‫بصورتی‬‫که‬‫بطور‬‫مثال‬‫تمامی‬‫پیامهای‬‫مربوط‬‫به‬‫واحد‬،‫اداری‬‫در‬Partition0‫و‬‫تمامی‬
‫پیام‬‫های‬‫مربوط‬‫به‬‫واحد‬،‫مالی‬‫در‬Partition 1‫و‬‫واحد‬‫آموزش‬‫در‬Partition 2‫ذخیره‬‫شوند‬‫و‬‫همچنین‬‫عملیات‬‫خواندن‬
‫از‬‫این‬Topic‫نیز‬‫می‬‫تواند‬‫بصورت‬‫همزمان‬‫در‬‫واحدهای‬‫مختلف‬‫انجام‬‫شود‬.
‫باید‬‫در‬‫تعریف‬‫تعداد‬Partition‫های‬‫یک‬Topic‫این‬‫نکته‬‫را‬‫در‬‫نظر‬‫بگیرید‬‫که‬‫این‬‫تعداد‬‫کامال‬‫به‬‫نیازمندی‬‫شما‬‫و‬‫کارآیی‬
‫که‬‫شما‬‫مد‬‫نظر‬،‫دارید‬‫بستگی‬‫دارد‬.‫تعداد‬‫این‬Partition‫ها‬‫حتی‬‫می‬‫تواند‬‫به‬‫تعداد‬User‫های‬‫یک‬‫سیستم‬‫نیز‬‫تعریف‬‫شود‬.
‫عالوه‬‫بر‬‫آن‬‫باید‬‫بدانید‬‫که‬‫هر‬Partition‫در‬‫هر‬‫زمان‬‫تنها‬‫توسط‬‫یک‬Primary Broker‫می‬‫تواند‬‫در‬‫دسترس‬‫سایر‬‫قسمت‬‫ها‬
‫قرار‬‫بگیرد‬‫و‬‫تمامی‬‫عملیات‬‫خواندن‬‫و‬‫نوشتن‬‫در‬Partition‫توسط‬Kafka Server‫انجام‬‫می‬‫شود‬‫و‬‫در‬‫صورتیکه‬‫به‬‫هر‬‫دلیلی‬
‫این‬‫سرور‬‫از‬‫دسترس‬‫خارج‬،‫شود‬‫مدیریت‬‫این‬Partition‫به‬‫سرور‬‫های‬‫دیگر‬‫داده‬‫می‬‫شود‬.
:‫است‬ ‫شکل‬ ‫بدین‬ ‫شماتیک‬ ‫بصورت‬ ‫کافکا‬ ‫کار‬ ‫نحوه‬
11
: ‫کنیم‬ ‫تعریف‬ ‫نیز‬ ‫دیگری‬ ‫معانی‬ ‫یکسری‬ ‫باید‬ ‫کلی‬ ‫معماری‬ ‫نمایش‬ ‫از‬ ‫قبل‬
Primary Broker:
‫یک‬Kafka Server‫که‬‫مسئول‬‫خواندن‬‫و‬‫نوشتن‬‫در‬‫یک‬Partition‫است‬.‫در‬‫یک‬Cluster‫هر‬Partition‫در‬‫یک‬‫زمان‬
‫تنها‬‫یک‬Primary Broker‫دارد‬.‫این‬Primary Broker‫همزمان‬‫می‬‫تواند‬‫برای‬Partition‫های‬‫دیگر‬‫نقش‬
Replicas Broker‫را‬‫بازی‬‫کند‬.‫انتخاب‬‫یک‬Primary Broker‫برای‬‫یک‬Partition‫توسط‬ZooKeeper‫انجام‬
‫می‬‫شود‬.
Replicas Brokers:
Kafka Server‫هایی‬‫که‬ ‫هستند‬‫شامل‬‫یک‬‫کپی‬‫از‬Partition‫می‬‫باشند‬.‫عملیات‬‫خواندن‬‫و‬‫نوشتن‬‫در‬Partition‫توسط‬
Primary‫انجام‬‫می‬‫شود‬.‫در‬‫صورتیکه‬Primary‫از‬‫دسترس‬‫خارج‬،‫شود‬ZooKeeper‫یکی‬‫از‬Replicas Broker‫ها‬‫را‬
‫بعنوان‬Primary‫در‬‫نظر‬‫می‬‫گیرد‬.‫همچنین‬‫این‬‫نکته‬‫را‬‫باید‬‫در‬‫نظر‬‫بگیرید‬‫که‬‫هر‬Replicate‫همزمان‬‫می‬‫تواند‬Primary
‫پارتیشن‬‫های‬‫دیگر‬‫باشد‬.
12
Replication Factor:
‫این‬‫خصوصیت‬‫احتمال‬‫از‬‫دست‬‫دادن‬‫داده‬‫های‬‫یک‬Topic‫را‬‫به‬‫حداقل‬‫می‬‫رساند؛‬‫به‬‫این‬‫صورت‬‫که‬‫هر‬‫پیام‬‫از‬‫ی‬‫ک‬Topic،‫در‬
‫چندین‬‫سرور‬‫مختلف‬‫که‬‫تعداد‬‫آنها‬‫توسط‬‫این‬‫خصوصیت‬‫مشخص‬‫می‬،‫شود‬‫نگهداری‬‫می‬‫شود‬.
Apache ZooKeeper:
Kafka‫هیچ‬State‫ای‬‫را‬‫نگه‬‫نمی‬‫دارد‬(‫اصطالحا‬stateless‫می‬‫باشد‬.)‫برای‬‫ذخیره‬‫کردن‬‫و‬‫مدیریت‬‫تمامی‬State‫ها‬‫از‬
‫جمله‬‫اینکه‬‫درحال‬‫حاضر‬Primary Broker‫برای‬‫یک‬Partition‫چه‬‫سروری‬،‫است‬‫یا‬‫اینکه‬‫پیام‬‫های‬‫یک‬Partition‫ت‬‫ا‬
‫کدام‬offset‫توسط‬Consumer‫ها‬‫خوانده‬‫شده‬‫اند‬‫یا‬‫اینکه‬‫کدام‬Consumer‫در‬‫حال‬‫حاضر‬‫در‬‫یک‬Consumer
Group‫مسئول‬‫یک‬Partition‫می‬،‫باشد‬‫توسط‬Apache Zookeeper‫انجام‬‫می‬‫شود‬.
: ‫کلی‬ ‫معماری‬ ‫از‬ ‫نمایی‬
13
‫کافکا‬ ‫کار‬ ‫نحوه‬‫کلی‬ ‫بصورت‬
‫کافکا‬‫پیام‬‫هایی‬‫را‬‫که‬‫از‬‫بسیاری‬‫از‬"‫تولید‬‫کنندگان‬"‫دریافت‬‫می‬‫کند‬‫را‬‫ذخیره‬‫کرده‬‫و‬‫داده‬‫ها‬‫بدین‬‫صورت‬‫بر‬‫روی‬‫پ‬‫ارتیشن‬‫های‬
‫گوناگونی‬‫در‬"‫تاپیک‬‫های‬"‫مختلف‬‫توزیع‬‫شده‬‫و‬‫پارتیشن‬‫بندی‬‫می‬‫شوند‬.‫در‬‫هر‬‫پارتیشن‬‫پیام‬‫ها‬‫با‬‫هم‬‫شاخص‬‫گذاری‬‫شده‬‫و‬‫با‬
‫یک‬‫برچسب‬‫زمانی‬‫ذخیره‬‫می‬‫شوند‬.‫سایر‬‫فرایندها‬‫مثل‬"‫مصرف‬‫کنندگان‬"‫می‬‫توانند‬‫پیام‬‫ها‬‫را‬‫از‬‫پارتیشن‬‫ها‬‫دریافت‬‫کرد‬‫ه‬‫و‬
‫اطالعات‬‫مورد‬‫نظر‬‫خود‬‫را‬‫درخواست‬‫کنند‬.‫کافکا‬‫بر‬‫روی‬‫خوشه‬‫هایی‬‫از‬‫یک‬‫یا‬‫چند‬‫سرور‬‫اجرا‬‫می‬‫شود‬‫و‬‫پارتیشن‬‫ها‬‫می‬‫توانند‬
‫بر‬‫روی‬‫چندین‬‫نود‬‫مختلف‬‫توزیع‬‫شوند‬.
‫آپاچی‬‫کافکا‬‫هنگامی‬‫که‬‫همراه‬‫با‬‫آپاچی‬،‫استورم‬‫اچ‬‫بیس‬‫و‬‫اسپارک‬‫استفاده‬‫شود‬‫به‬‫طور‬‫موثری‬‫می‬‫تواند‬‫داده‬‫های‬‫بالدرنگ‬‫و‬
‫جریان‬‫را‬‫پردازش‬‫کند‬.‫اگر‬‫کافکا‬‫به‬‫عنوان‬‫یک‬‫خوشه‬‫روی‬‫چندین‬‫سرور‬‫پیکر‬‫بندی‬‫و‬‫اجرا‬‫شود‬‫در‬‫اینصورت‬‫به‬‫کمک‬4‫را‬‫بط‬
‫کاربری‬‫خود‬‫براحتی‬‫عملیات‬‫انتشار‬‫و‬‫دریافت‬‫و‬‫پردازش‬‫اطالعات‬‫را‬‫به‬‫سرعت‬‫و‬‫با‬‫کارایی‬‫باال‬‫انجام‬‫می‬‫دهد‬.
‫توانایی‬‫کافکا‬‫برای‬‫ارایه‬‫جریان‬‫های‬‫عظیم‬‫داده‬‫و‬‫پیام‬‫،همراه‬‫با‬‫تحمل‬‫خطای‬‫باال‬،‫آن‬‫را‬‫جایگزین‬‫برخی‬‫از‬‫سی‬‫ستم‬‫های‬‫پیام‬‫رسانی‬
‫مرسوم‬‫مانند‬JMS،AMQP‫و‬‫غیره‬‫کرده‬‫است‬.
‫کافکا‬ ‫های‬ ‫ضمانت‬
Kafka‫می‬ ‫خودش‬ ‫کار‬ ‫برای‬ ‫ضمانت‬ ‫سه‬ ،: ‫از‬ ‫اند‬ ‫عبارت‬ ‫که‬ ‫دهد‬
1-‫تمامی‬‫پیام‬‫های‬‫دریافتی‬‫در‬‫یک‬Partition‫از‬‫یک‬Topic،‫به‬‫همان‬‫ترتیبی‬‫که‬‫دریافت‬‫می‬‫شوند‬‫ذخیره‬‫می‬‫شوند‬.
۲-Consumer‫ها‬‫تمامی‬‫پیام‬‫ها‬‫را‬‫در‬‫یک‬Partition‫به‬‫همان‬‫ترتیبی‬‫که‬‫ذخیره‬‫شده‬،‫اند‬‫دریافت‬‫می‬‫کنند‬.
3-‫در‬‫یک‬Topic‫با‬Replication Factor‫ا‬‫ی‬‫با‬‫مقدار‬N،‫درجه‬‫تحمل‬‫خطا‬N - 1‫می‬‫باشد‬.
14
‫راو‬ ‫جون‬ ‫مصاحبه‬
-Kafka‫در‬‫مقایسه‬‫با‬‫سیستم‬‫های‬‫سنتی‬‫تر‬‫پیام‬‫رسانی‬‫از‬‫قبیل‬RabbitMQ‫و‬ActiveMQ‫چگونه‬‫است؟‬
‫این‬‫سئوال‬‫خوبی‬‫است‬‫که‬‫زیاد‬‫از‬‫ما‬‫پرسیده‬‫می‬‫شود‬.‫من‬‫این‬‫طور‬‫جمع‬‫بندی‬‫می‬‫کنم‬‫که‬‫دو‬‫تفاوت‬‫اصلی‬‫و‬‫جود‬‫دارد‬‫که‬‫در‬،‫آن‬
Kafka‫کمی‬‫مزیت‬‫دارد‬.‫یکی‬‫این‬‫است‬‫که‬Kafkaً‫ا‬‫واقع‬‫برای‬‫حجم‬‫زیاد‬‫داده‬‫طراحی‬‫شده‬،‫است‬‫سیستم‬‫های‬‫سنتی‬‫تر‬ً‫ا‬‫عموم‬
‫تنها‬‫مسئول‬‫ذخیره‬‫سازی‬‫داده‬‫هایی‬‫بودند‬‫که‬‫در‬‫پایگاه‬‫داده‬‫تولید‬‫می‬‫شد‬‫اما‬Kafka‫برای‬‫ذخیره‬‫سازی‬‫مواردی‬‫از‬‫قبیل‬‫آمارهای‬
‫سنجش‬‫کسب‬‫وکار‬(Business Metrics)،‫الگ‬‫های‬‫سرویس‬،‫ها‬‫آمارهای‬‫سنجش‬‫عملیاتی‬‫و‬…‫بوده‬،‫است‬‫این‬‫نوع‬‫د‬‫اده‬‫ها‬‫از‬
‫لحاظ‬‫حجم‬1۰۰‫یا‬1۰۰۰‫برابر‬‫بزرگ‬‫تر‬‫از‬‫داده‬‫هایی‬‫هستند‬‫که‬‫در‬‫پایگاه‬‫داده‬‫ذخیره‬‫می‬‫کنید‬.‫این‬‫ها‬‫چیزهایی‬‫نیست‬‫که‬
‫سیستم‬‫های‬‫پیام‬‫رسانی‬‫سنتی‬‫برایش‬‫طراحی‬‫شده‬‫باشد‬‫اما‬Kafkaً‫ا‬‫واقع‬‫برای‬‫این‬‫ها‬‫طراحی‬‫شده‬‫است‬.‫برای‬‫مثال‬Kafka‫از‬‫ابتدا‬
‫به‬‫عنوان‬‫یک‬‫سیستم‬‫توزیع‬‫شده‬‫طراحی‬‫شده‬‫است‬‫بنابراین‬‫اگر‬‫حجم‬‫داده‬‫ها‬‫افزایش‬‫یابد‬‫می‬‫توانید‬‫به‬‫راح‬‫تی‬‫ماشین‬‫های‬‫بیشتری‬
‫به‬‫کالستر‬‫اضافه‬‫کنید‬‫تا‬‫آن‬‫حجم‬‫داده‬‫را‬‫رسیدگی‬‫کنید‬‫و‬‫همینطور‬‫در‬‫مؤلفه‬‫های‬‫مختلف‬‫می‬‫توانیم‬‫چند‬‫بهی‬‫نه‬‫سازی‬‫مختصر‬‫از‬‫قبیل‬
‫فشرده‬‫سازی‬‫و‬‫دسته‬‫کردن‬(Batching)‫داشته‬‫باشیم‬‫تا‬‫بتوانیم‬‫این‬‫حجم‬‫از‬‫داده‬‫ها‬‫را‬‫به‬‫شکل‬‫کاراتری‬‫رسیدگی‬‫کنیم‬.
-‫آیا‬‫شما‬Kafka‫را‬‫به‬‫عنوان‬‫یک‬‫سیستم‬‫پیام‬ِ‫ی‬‫رسان‬‫انباره‬‫داده‬(Datawarehouse)‫توصیف‬‫می‬‫کنید؟‬‫یا‬‫این‬
‫تعریف‬‫خیلی‬‫محدود‬‫است؟‬
‫فکر‬‫می‬‫کنم‬‫می‬‫توانید‬‫آن‬‫را‬‫یک‬‫انباره‬‫داده‬‫در‬‫نظر‬‫بگیرید‬‫اما‬‫در‬‫واقع‬‫جایی‬‫است‬‫که‬‫می‬‫توانید‬‫هر‬‫نوع‬‫داده‬‫ای‬‫را‬‫جمع‬‫آوری‬‫کنید‬‫و‬
‫با‬‫آن‬‫داده‬،‫ها‬‫پلتفرم‬‫های‬‫مختلفی‬‫را‬‫تغذیه‬‫کنید‬.‫یکی‬‫از‬‫مهمترین‬‫جاهایی‬‫که‬‫می‬‫توانید‬‫تغذیه‬‫کنید‬‫پ‬‫لتفرم‬‫های‬‫مربوط‬‫به‬‫انباره‬‫های‬
‫داده‬‫برون‬‫خط‬‫است‬‫اما‬‫در‬‫عین‬‫حال‬‫می‬‫توانید‬‫از‬‫همان‬‫سیستم‬‫برای‬‫تغذیه‬‫پلتفرم‬‫های‬‫بالدرنگ‬‫تر‬‫هم‬‫استفاده‬‫کنید‬.‫نقطه‬‫ترکیب‬
‫برای‬‫هر‬‫دو‬‫نوع‬‫مصرف‬‫برون‬‫خط‬‫و‬‫بالدرنگ‬‫است‬.
-‫وقتی‬‫از‬‫موازی‬‫سازی‬‫صحبت‬‫می‬‫کنید‬‫به‬‫منظور‬‫افزونگی‬(Redundancy)‫یا‬‫تحمل‬‫خطا‬(Fault Tolerant)
‫است‬‫و‬‫یا‬‫بیشتر‬‫به‬‫این‬‫علت‬‫است‬‫که‬‫سرعت‬‫افزایش‬‫یابد؟‬
‫فکر‬‫می‬‫کنم‬‫بیشتر‬‫به‬‫این‬‫خاطر‬‫است‬‫که‬‫سرعت‬‫افزایش‬،‫یابد‬‫به‬‫این‬‫ترتیب‬‫که‬ً‫ا‬‫منطق‬‫پارتیشن‬‫های‬‫مختلف‬‫می‬‫توانند‬‫بصورت‬
،‫مستقل‬‫مصرف‬‫کنند‬.‫هرچه‬‫پارتیشن‬‫های‬‫بیشتری‬‫داشته‬‫باشید‬‫برای‬‫هم‬‫مصرف‬‫کننده‬‫ها‬‫و‬‫هم‬‫کالینت‬،‫ها‬‫کانال‬‫های‬‫موازی‬‫بیشتری‬
‫خواهید‬‫داشت‬.‫به‬‫این‬‫ترتیب‬‫درجه‬‫موازی‬‫بودن‬‫را‬‫افزایش‬‫می‬‫دهید‬.‫هر‬‫پارتیشن‬‫می‬‫تواند‬‫رونوشت‬‫برداری‬(Replicate)‫هم‬
‫بشود‬‫و‬‫این‬‫راهی‬‫است‬‫که‬‫برای‬‫فراهم‬‫کردن‬‫قابلیت‬‫اطمینان‬‫در‬‫سیستم‬‫می‬‫توانیم‬‫استفاده‬‫کنیم‬‫اما‬‫این‬،‫مسأله‬‫ارتباطی‬‫با‬
‫موازی‬‫سازی‬‫ندارد‬.
15
-‫پیام‬‫رسانی‬ً‫ا‬‫عموم‬‫دو‬‫مدل‬‫دارد‬:‫صف‬‫کردن‬(Queueing)‫و‬‫انتشار‬/‫عضویت‬(Publish/Subscribe).‫در‬‫رو‬‫ش‬
‫صف‬،‫کردن‬‫انبوهی‬‫از‬‫مصرف‬‫کننده‬‫ها‬‫را‬‫داریم‬‫که‬‫از‬‫سرور‬‫می‬‫خوانند‬‫و‬‫هر‬‫پیام‬‫تنها‬‫به‬‫یکی‬‫از‬‫مصرف‬‫کننده‬‫ها‬‫می‬‫رود‬.
ً‫ال‬‫مث‬‫ممکن‬‫است‬‫لیستی‬‫از‬‫وظایف‬‫داشته‬‫باشید‬‫که‬‫سرور‬‫می‬‫خواهد‬‫هر‬‫کدام‬‫تنها‬‫یک‬‫بار‬‫انجام‬‫شوند‬.‫اما‬‫د‬‫ر‬‫انتشار‬/،‫عضویت‬
‫پیام‬‫ها‬‫به‬‫همه‬‫مصرف‬‫کننده‬‫ها‬‫ارسال‬‫می‬‫شود‬.Kafka‫تنها‬‫یک‬‫انتزاع‬‫از‬‫مصرف‬‫کننده‬‫دارد‬‫که‬‫گروه‬‫های‬‫مصرف‬‫کننده‬
‫خوانده‬‫می‬‫شود‬‫و‬‫حالت‬‫عمومیت‬‫یافته‬‫هر‬‫دو‬‫مورد‬‫است‬.‫ممکن‬‫است‬‫کمی‬‫در‬‫مورد‬‫گروه‬‫های‬‫مصرف‬‫کننده‬‫و‬‫نحوه‬
‫عملکردشان‬‫صحبت‬‫کنید؟‬
،‫بله‬‫فکر‬‫می‬‫کنم‬‫گروه‬‫های‬‫مصرف‬‫کننده‬‫خیلی‬‫جالب‬‫هستند‬.‫همانطور‬‫که‬‫شما‬‫گفتید‬‫هر‬‫دو‬‫مورد‬‫الگو‬‫های‬‫کاربرد‬‫را‬‫پوشش‬‫می‬‫دهد‬.
‫یک‬‫مورد‬‫این‬‫است‬‫که‬‫تنها‬‫یک‬‫گروه‬‫مصرف‬‫کننده‬‫داشته‬‫باشید‬‫و‬‫در‬‫آن‬‫چندین‬‫مصرف‬‫کننده‬‫داشته‬‫باشید‬‫که‬‫م‬ً‫ا‬‫شترک‬‫یک‬‫نوع‬
‫از‬‫موضوع‬‫را‬‫مصرف‬‫کنند‬.ً‫ال‬‫مث‬‫می‬‫توانید‬‫دو‬‫مصرف‬‫کننده‬‫در‬‫یک‬‫گروه‬‫مصرف‬‫کننده‬‫داشته‬‫باشید‬‫و‬‫ا‬‫مید‬‫داشته‬‫باشید‬‫که‬‫آن‬
،‫موضوع‬‫بصورت‬ِ‫ی‬‫مساو‬‫نصف‬‫و‬‫نصف‬‫بین‬‫آن‬‫دو‬‫مصرف‬‫کننده‬‫تقسیم‬‫شود‬.‫این‬‫روشی‬‫برای‬‫افزایش‬‫درجه‬‫موازی‬‫سازی‬‫بین‬
‫مصرف‬‫کننده‬‫ها‬‫است‬.‫مورد‬‫کابرد‬‫دیگر‬‫آنجا‬‫است‬‫که‬‫منطقی‬‫که‬‫برای‬‫مصرف‬‫وجود‬‫دارد‬‫کمی‬CPU‫َر‬‫ب‬‫یا‬‫زمان‬‫بر‬‫باشد‬.‫در‬
‫اینصورت‬‫اگر‬‫مصرف‬‫کننده‬‫های‬‫بیشتری‬‫داشته‬،‫باشید‬‫می‬‫توانید‬‫از‬‫قدرت‬CPU‫و‬‫منابع‬‫بیشتر‬‫استف‬‫اده‬‫کنید‬‫تا‬‫سرعت‬‫پردازش‬
‫داده‬‫ها‬‫را‬‫افزایش‬‫دهید‬.‫این‬‫یک‬‫مورد‬‫کاربرد‬‫است‬.
‫مورد‬‫کاربرد‬‫دیگر‬‫این‬‫است‬‫که‬‫چندین‬‫گروه‬‫مصرف‬‫کننده‬‫بر‬‫روی‬‫یک‬‫موضوع‬‫داشته‬‫باشید‬‫که‬‫نوعی‬‫مدل‬‫چندعضویتی‬‫ا‬‫ست‬.‫در‬
‫این‬،‫حالت‬‫هر‬‫گروه‬‫مصرف‬‫کننده‬،‫ای‬‫بصورت‬‫کامل‬‫با‬‫همه‬‫داده‬‫های‬‫آن‬،‫موضوع‬‫تغذیه‬‫می‬‫شوند‬.‫موارد‬‫زیادی‬‫وجود‬‫دارد‬‫که‬
‫نرم‬‫افزارهای‬‫مختلف‬‫می‬‫خواهند‬‫داده‬‫های‬‫یکسانی‬‫را‬‫مصرف‬‫کنند‬‫اما‬‫بر‬‫اساس‬‫کاربردشان‬‫به‬‫روش‬‫های‬‫متفاوتی‬‫آن‬‫ها‬‫را‬‫پردازش‬
‫کنند‬‫و‬‫این‬‫مدل‬،‫چندعضویتی‬‫روش‬‫خیلی‬‫قدرتمندی‬‫برای‬‫این‬‫نرم‬‫افزارها‬‫برای‬‫مصرف‬‫داده‬‫ها‬‫بصورت‬‫مستقل‬‫از‬‫یکدیگر‬‫است‬.
‫در‬‫واقع‬‫شما‬‫می‬‫توانید‬‫در‬‫این‬‫مدل‬‫چندعضویتی‬‫در‬‫هر‬‫کدام‬‫از‬‫این‬‫گروه‬‫های‬‫مصرف‬‫کننده‬،‫هم‬‫چندین‬‫م‬‫صرف‬‫کننده‬‫داشته‬‫باشید‬
‫تا‬‫بتوانید‬‫ترکیب‬‫مزایای‬‫چندعضویتی‬‫و‬‫موازی‬‫سازی‬‫در‬‫هر‬‫کدام‬‫از‬‫این‬‫نمونه‬‫های‬‫مصرف‬‫را‬‫داشته‬‫باشید‬.
-‫چه‬‫جنبه‬‫های‬‫دیگری‬‫از‬‫ارتباط‬‫بین‬‫تولید‬‫کنندگان‬‫و‬‫مصرف‬،‫کنندگان‬‫منحصر‬‫به‬Kafka‫است؟‬
‫اگر‬Kafka‫را‬‫با‬‫سیستم‬‫های‬‫پیام‬‫رسانی‬‫سنتی‬ً‫ال‬‫مث‬GMS‫مقایسه‬‫کنید‬‫ما‬‫یک‬‫سری‬‫چیزها‬‫را‬،‫نداریم‬GMS‫مج‬‫موعه‬‫امکانات‬
‫گسترده‬‫ای‬‫از‬‫قبیل‬‫تحویل‬‫مرتب‬‫شده‬(Ordered Delivery)،‫اولویت‬(Priority)‫و‬…‫را‬‫دارد‬‫که‬‫ما‬‫در‬Kafka‫ن‬‫داریم‬.
‫همانطور‬‫که‬ً‫ال‬‫قب‬‫گفتم‬Kafkaً‫ا‬‫واقع‬‫برای‬‫حجم‬‫باالی‬‫داده‬‫ها‬‫و‬‫رسیدگی‬‫به‬‫آن‬‫ها‬‫با‬‫یک‬‫روش‬‫کارا‬‫طراحی‬‫شده‬‫ا‬‫ست‬‫به‬‫همین‬
‫خاطر‬‫ما‬‫بسیاری‬‫از‬‫امکانات‬‫موجود‬‫در‬‫سیستم‬‫های‬‫پیام‬‫رسانی‬‫سنتی‬‫را‬‫نداریم‬.
16
-‫بسیار‬،‫خوب‬‫بیا‬‫کمی‬‫عقب‬‫برگردیم‬‫تا‬‫به‬‫صورت‬‫خاص‬‫در‬‫مورد‬Kafka‫صحبت‬‫کنیم‬.‫شما‬‫به‬‫مثال‬‫های‬‫انتزاعی‬‫ا‬‫ز‬
Kafka‫اشاره‬‫داشتید‬.‫شاید‬‫بهتر‬‫باشد‬‫به‬‫سراغ‬‫برخی‬‫کاربردهای‬‫مشخص‬Kafka‫برویم‬.‫توضیح‬‫دهید‬‫که‬‫اگر‬‫کسی‬
‫می‬‫خواهد‬Kafka‫را‬‫مستقر‬‫کند‬‫چطور‬‫این‬‫کار‬‫را‬‫انجام‬‫داده‬‫و‬‫به‬‫دیگر‬‫مؤلفه‬‫ها‬‫متصل‬‫می‬‫کند‬‫؟‬
‫از‬‫دیدگاه‬‫سطح‬‫باال‬‫این‬‫به‬‫تغییرات‬‫در‬‫گرایشات‬‫صنعت‬‫برمی‬‫گردد‬‫که‬‫پیش‬‫از‬‫این‬‫اشاره‬‫کردم‬‫یعنی‬‫به‬‫خاطر‬‫وجود‬‫و‬‫یا‬‫بروز‬
‫سیستم‬‫های‬‫مقیاس‬‫پذیر‬‫تخصصی‬‫مختلف‬‫است‬.‫این‬‫سیستم‬‫ها‬‫نیاز‬‫دارند‬‫که‬‫با‬‫نوع‬‫یکسانی‬‫از‬‫داده‬‫ها‬‫تغذیه‬‫شوند‬.ً‫ال‬‫مث‬‫اگر‬
‫مجموعه‬‫ای‬‫از‬‫داده‬‫های‬‫الگ‬‫داشته‬،‫باشیم‬ً‫ا‬‫حتم‬‫می‬‫خواهید‬‫آن‬‫ها‬‫را‬‫برای‬‫پردازش‬‫برون‬‫خط‬‫به‬Hadoop‫وارد‬،‫کنید‬‫اما‬‫با‬‫همان‬
‫درجه‬‫از‬‫اهمیت‬‫می‬‫خواهید‬‫آن‬‫را‬‫به‬‫سیستم‬‫جستجوی‬‫تان‬‫نیز‬‫وارد‬‫کنید‬‫تا‬‫بتوانید‬‫با‬،‫سرعت‬‫هر‬‫رخداد‬‫الگی‬‫را‬‫جستجو‬‫کنید‬.‫این‬
‫تا‬‫حدود‬‫زیادی‬‫همان‬‫منطق‬‫کاری‬‫است‬‫که‬Splunk‫انجام‬‫می‬‫دهد‬.‫به‬‫همین‬‫ترتیب‬‫اگر‬ً‫ال‬‫مث‬‫جریانی‬‫از‬‫داده‬‫های‬‫عملیات‬‫داشته‬
‫باشید‬‫می‬‫خواهید‬‫که‬‫هم‬‫آن‬‫را‬‫به‬‫سیستم‬‫برون‬‫خط‬‫وارد‬‫کنید‬‫و‬‫هم‬‫البته‬‫آن‬‫را‬‫به‬‫سیستم‬‫بالدرنگ‬‫مانیتور‬‫خ‬‫ود‬‫وارد‬‫کنید‬‫تا‬‫بتوانید‬
‫آن‬‫داده‬‫ها‬‫را‬‫مانیتور‬‫کرده‬‫و‬‫از‬‫آن‬‫ها‬‫نمودار‬‫بکشید‬.‫حال‬‫سئوال‬‫این‬‫است‬‫که‬‫این‬‫سیستم‬‫های‬،‫مستقل‬‫داده‬‫های‬‫خود‬‫را‬‫از‬‫کجا‬
‫بیاورند؟‬‫شما‬‫به‬‫یک‬‫نقطه‬‫یکپارچه‬‫سازی‬‫نیاز‬‫دارید‬‫که‬‫همه‬‫این‬‫سیستم‬‫ها‬‫بتوانند‬‫داده‬‫های‬‫شان‬‫را‬‫از‬‫آن‬‫بگیرند‬.‫خیلی‬‫از‬‫آن‬
‫سیستم‬‫ها‬‫بر‬‫خالف‬Hadoop‫بیشتر‬‫جنبه‬‫بالدرنگ‬‫دارند‬‫بنابراین‬‫نمی‬‫توانید‬‫آن‬‫ها‬‫را‬‫در‬‫همان‬‫انباره‬‫دا‬‫ده‬‫برون‬‫خط‬‫خود‬‫یکپارچه‬
‫کنید‬‫زیرا‬‫از‬‫لحاظ‬‫تأخیر‬(Latency)،‫ممکن‬‫است‬‫به‬‫مقدار‬‫کافی‬‫خوب‬‫نباشند‬‫که‬‫داده‬‫های‬‫نرم‬‫افزارها‬‫یا‬‫پلتفرم‬‫های‬‫بالدرنگی‬
‫در‬‫ارتباط‬‫با‬ً‫ال‬‫مث‬‫جستجو‬‫و‬‫یا‬‫رسم‬‫نمودار‬‫را‬‫تغذیه‬‫کنند‬.Kafka‫به‬‫نوعی‬‫این‬‫نقش‬‫را‬‫پر‬‫می‬،‫کند‬‫زیرا‬‫سیست‬‫می‬‫است‬‫که‬‫در‬‫واقع‬
‫برای‬‫جمع‬‫آوری‬‫و‬‫ذخیره‬‫سازی‬‫حجم‬‫باالی‬‫داده‬‫طراحی‬‫شده‬‫است‬‫و‬‫می‬‫تواند‬‫هر‬‫تعداد‬‫نرم‬‫افزار‬‫پایین‬‫دستی‬‫را‬‫تغذیه‬‫کند‬‫و‬‫این‬
‫نرم‬‫افزارها‬‫هم‬‫می‬‫توانند‬‫بالدرنگ‬‫و‬‫هم‬‫می‬‫توانند‬‫برون‬‫خط‬‫باشند‬.‫بنابراین‬‫می‬‫توانید‬‫آن‬‫را‬‫به‬‫مثابه‬‫یک‬‫هاب‬‫یکپارچه‬‫سازی‬‫برای‬
‫همه‬‫این‬‫کالن‬‫داده‬‫ها‬‫در‬‫نظر‬‫بگیرید‬.
‫از‬‫منظر‬‫نحوه‬‫به‬‫خدمت‬‫گرفتن‬Kafka‫می‬‫بینیم‬‫که‬‫افراد‬‫چیزهای‬‫مختلفی‬‫را‬‫برمی‬‫گزینند‬.‫یکی‬‫از‬‫موارد‬‫ک‬‫اربرد‬‫رایج‬‫این‬‫است‬
‫که‬‫از‬Kafka‫به‬‫عنوان‬‫یک‬‫خط‬‫لوله‬‫مصرف‬‫استفاده‬‫می‬‫کنند‬‫تا‬‫داده‬‫ها‬‫را‬‫وارد‬Hadoop‫کنند‬.‫اما‬‫در‬‫عین‬‫حال‬‫یک‬‫یا‬‫چند‬
‫نرم‬‫افزار‬‫برای‬‫کاربردهای‬‫بالدرنگ‬‫هم‬‫دارند‬‫که‬‫می‬‫تواند‬‫یک‬‫نرم‬‫افزار‬‫بالدرنگ‬‫و‬‫یا‬‫یکی‬‫از‬‫فریم‬‫ورک‬‫های‬‫پردازش‬‫جریان‬‫باشد‬
‫و‬‫یا‬‫گاهی‬‫سیستم‬‫جستجویی‬‫باشد‬‫که‬‫به‬‫خدمت‬‫گرفته‬‫اند‬.‫به‬‫خاطر‬‫نیاز‬‫به‬‫بیش‬‫از‬‫یک‬‫کاربرد‬‫برای‬‫داده‬‫های‬،‫یکسان‬‫برایشان‬
‫خیلی‬‫اهمیت‬‫دارد‬‫که‬‫این‬‫خط‬‫های‬‫لوله‬‫را‬‫به‬‫کار‬‫بیاندازند‬.‫این‬‫یک‬‫الگوی‬‫رایج‬‫از‬‫نحوه‬‫به‬‫خدمت‬‫گیری‬Kafka‫است‬‫که‬‫ما‬
‫می‬‫بینیم‬.
17
-‫بیا‬‫در‬‫مورد‬‫جنبه‬‫دیگری‬‫صحبت‬‫کنیم‬‫که‬ً‫ال‬‫ک‬‫در‬‫سیستم‬‫های‬‫توزیع‬‫شده‬‫و‬‫خاصه‬‫در‬Kafka‫وجود‬‫دارد‬.‫می‬‫خواهم‬‫در‬
‫مورد‬‫مانایی‬(Durability)‫صحبت‬‫کنم‬.‫آیا‬‫پیام‬‫ها‬‫در‬‫هنگام‬‫از‬‫نو‬‫اجرا‬‫کردن‬‫یا‬‫بروز‬،‫خرابی‬‫قابل‬‫ترمیم‬‫هستند؟‬
‫خرابی‬‫های‬‫متفاوتی‬‫وجود‬‫دارد‬.‫همانطور‬‫که‬‫پیش‬‫از‬‫این‬‫اشاره‬‫کردم‬‫در‬‫سمت‬‫کارگزار‬‫پشتیبانی‬‫از‬‫رونوشت‬‫برداری‬
(Replication)‫را‬‫اضافه‬‫کرده‬‫ایم‬‫بنابراین‬‫در‬‫یک‬،‫کالستر‬‫پیام‬‫ها‬‫می‬‫توانند‬‫بر‬‫روی‬‫چندین‬‫کارگزار‬‫ت‬‫کرار‬‫شوند‬.
-‫آیا‬،‫کارگزار‬‫معادل‬‫با‬‫یک‬‫پارتیشن‬‫از‬‫موضوع‬(Topic Partition)‫است؟‬
‫کارگزار‬‫مانند‬‫یک‬‫سرور‬‫یا‬‫گره‬‫می‬‫ماند‬‫که‬‫چندین‬‫پارتیشن‬‫داده‬‫می‬‫تواند‬‫بر‬‫روی‬‫آن‬‫ذخیره‬‫شود‬.‫مانند‬‫مو‬‫توری‬‫برای‬‫ذخیره‬
‫پیام‬‫ها‬‫است‬‫و‬‫در‬‫یک‬‫کالستر‬‫می‬‫توانیم‬‫چندین‬‫عدد‬‫از‬‫این‬‫موتورهای‬‫ذخیره‬‫سازی‬‫داشته‬‫باشیم‬‫اما‬‫رونو‬‫شت‬‫های‬‫یک‬‫موضوع‬‫بین‬
‫این‬‫موتورهای‬‫ذخیره‬‫سازی‬‫پخش‬‫می‬‫شوند‬‫و‬‫هر‬‫کدام‬‫از‬‫این‬‫موتورهای‬‫ذخیره‬‫سازی‬‫یا‬‫کارگزارها‬ً‫ا‬‫عموم‬‫چ‬‫ندین‬‫پارتیشن‬‫را‬‫ذخیره‬
‫می‬‫کنند‬.‫البته‬‫هرکدام‬‫از‬‫این‬‫پارتیشن‬‫ها‬‫متناظر‬‫با‬‫یک‬‫دایرکتوری‬‫فایل‬‫محلی‬‫هستند‬‫و‬‫مجموعه‬‫فایل‬‫های‬‫خودشان‬‫را‬‫دارند‬‫و‬‫نوعی‬
ِ‫ی‬‫مجزاساز‬‫در‬‫سطح‬‫دیسک‬‫وجود‬‫دارد‬.
‫از‬‫لحاظ‬‫قابلیت‬،‫اطمینان‬‫اگر‬‫یک‬‫موضوع‬(Topic)‫را‬‫طوری‬‫تنظیم‬‫کنید‬‫که‬‫چندین‬‫رونوشت‬‫داشته‬‫باشد‬‫در‬‫آنصورت‬‫می‬‫تواند‬
‫خرابی‬‫های‬‫کارگزار‬‫را‬‫تحمل‬‫کند‬.‫خرابی‬‫معمول‬‫در‬Kafka‫نوعی‬‫از‬‫خرابی‬‫است‬‫که‬‫ما‬‫آن‬‫را‬‫خرابی‬‫نرم‬‫می‬‫نامیم‬‫به‬‫این‬‫ترتیب‬
‫که‬‫در‬‫واقع‬‫کارگزار‬‫سالم‬‫است‬‫و‬‫تنها‬‫می‬‫خواهید‬‫که‬‫کد‬‫جدیدی‬‫را‬‫مستقر‬‫کنید‬‫یا‬‫تغییری‬‫در‬‫تنظیمات‬‫اعمال‬‫ک‬‫نید‬‫و‬‫به‬‫همین‬‫خاطر‬
‫باید‬‫یکی‬‫از‬‫کارگزارها‬‫یا‬‫همه‬‫کارگزارهای‬‫کالستر‬‫را‬‫پایین‬‫بیاورید‬‫و‬‫آن‬‫ها‬‫را‬‫از‬‫نو‬‫اجرا‬‫کنید‬.‫در‬‫واقع‬‫این‬8۰‫یا‬9۰‫درصد‬‫از‬
‫موارد‬‫خرابی‬‫در‬‫کالستر‬Kafka‫است‬.‫با‬‫رونوشت‬‫برداری‬‫می‬‫توانیم‬‫چنین‬‫خرابی‬‫هایی‬‫را‬‫بصورت‬‫خیلی‬‫کارایی‬‫رسیدگی‬‫کنیم‬.‫ما‬
‫امکانی‬‫داریم‬‫که‬‫بصورت‬‫خودکار‬‫پیشوای‬‫یک‬‫پارتیشن‬‫را‬‫به‬‫رونوشت‬‫دیگری‬‫منتقل‬‫کنیم‬‫و‬‫در‬‫این‬،‫حالت‬‫کالینت‬‫ها‬‫به‬‫همان‬‫شکل‬
‫قبل‬‫رفتار‬‫می‬‫کنند‬.
-‫بیا‬‫کمی‬‫به‬‫موضوع‬‫نحوه‬‫توسعه‬Kafka‫بپردازیم‬.‫چرا‬‫زبان‬،‫انتخابی‬Scala‫بوده‬‫است؟‬‫آیا‬ً‫ا‬‫مشخص‬Erlang‫را‬‫ه‬‫م‬
‫در‬‫نظر‬‫داشتید؟‬
‫فکر‬‫می‬‫کنم‬‫جی‬‫کرپس‬‫اولین‬‫توسعه‬‫دهنده‬Kafka‫بود‬.‫آن‬،‫موقع‬Scala‫تا‬‫حدی‬‫محبوب‬‫شده‬‫بود‬‫و‬‫او‬‫شاید‬‫می‬‫خواست‬
Scala‫را‬‫یاد‬‫بگیرد‬‫و‬‫به‬‫این‬‫خاطر‬‫بود‬‫که‬Scala‫را‬‫انتخاب‬،‫کرد‬‫به‬‫نوعی‬‫می‬‫خواسته‬‫آن‬‫را‬‫امتحان‬‫کند‬‫و‬‫ببیند‬‫چطور‬‫کار‬‫می‬‫کند‬.
‫از‬‫دیدگاه‬‫یک‬‫توسعه‬‫دهنده‬‫همواره‬‫جذاب‬‫است‬‫که‬‫یک‬‫زبان‬‫برنامه‬‫نویسی‬‫جدید‬‫و‬‫پرآتیه‬‫را‬‫امتحان‬‫کنیم‬.‫در‬‫مورد‬Scala‫فکر‬
‫می‬‫کنم‬‫آنچه‬‫از‬‫آن‬‫بهره‬‫زیادی‬،‫بردیم‬‫موجز‬‫بودن‬‫نحو‬(Syntax)‫آن‬‫بود‬.‫و‬‫همینطور‬‫از‬‫پشتیبانی‬‫های‬‫زیادی‬‫که‬‫برای‬
‫عملکردهای‬‫روی‬‫مجموعه‬‫ها‬(Collection)‫داشت‬‫و‬‫اجازه‬‫می‬‫داد‬‫که‬‫دور‬‫زدن‬‫بر‬‫روی‬‫آن‬‫ها‬‫را‬‫خیلی‬‫راحت‬‫انجام‬،‫دهیم‬
18
‫استفاده‬‫کردیم‬.‫به‬‫همین‬‫خاطر‬‫است‬‫که‬‫اگر‬‫به‬‫کدهای‬Kafka‫نگاه‬‫کنید‬‫به‬‫نسبت‬‫سیستم‬‫های‬‫مشابهی‬‫که‬‫با‬‫جاوا‬‫نوشته‬‫شده‬
،‫است‬‫ما‬‫از‬‫نحو‬‫موجز‬‫آن‬‫بهره‬‫زیادی‬‫برده‬‫ایم‬.
‫اما‬‫یکی‬‫از‬‫چیزهایی‬‫که‬‫کمی‬‫کار‬‫با‬Scala‫را‬‫دشوار‬‫می‬،‫کرد‬‫در‬‫ارتباط‬‫با‬‫مشتریان‬‫بود‬.‫از‬‫آنجایی‬‫که‬Scala‫ی‬‫ک‬‫تکنولوژی‬‫در‬
‫حال‬‫ظهور‬،‫است‬ً‫ال‬‫مث‬‫از‬‫لحاظ‬‫حفاظت‬‫از‬‫سازگاری‬،‫باینری‬‫به‬‫اندازه‬Java‫بالغ‬‫نیست‬‫و‬‫چون‬‫در‬‫ریلیزهای‬‫ابتدایی‬‫خ‬‫ود‬‫قرار‬‫دارد‬
‫مجبور‬‫می‬‫شود‬‫که‬‫سازگاری‬‫باینری‬‫ها‬‫را‬‫نقض‬‫کند‬‫و‬‫برخی‬‫از‬‫بایت‬‫کدهایی‬‫که‬‫با‬‫نسخه‬‫های‬‫قبلی‬Scala‫تولید‬‫شده‬‫اند‬‫را‬‫نمی‬‫توان‬
‫با‬‫نسخه‬‫های‬‫جدیدتر‬Scala‫اجرا‬‫کرد‬.‫این‬‫مشکالتی‬‫برای‬‫بروزرسانی‬[‫نسخه‬‫های‬‫محصول‬]‫مشتری‬‫های‬‫مان‬‫ایجاد‬‫می‬‫کند‬.‫چون‬
‫خیلی‬‫از‬‫مشتری‬‫های‬‫ما‬‫که‬‫به‬‫خاطر‬‫استفاده‬‫از‬Kafka‫به‬Scala‫وابستگی‬‫دارند‬‫ممکن‬‫است‬‫در‬‫عین‬‫حال‬‫از‬‫مؤلفه‬‫های‬‫دیگری‬
‫هم‬‫استفاده‬‫کنند‬‫که‬‫آن‬‫ها‬‫هم‬‫به‬Scala‫و‬ً‫ال‬‫احتما‬‫نسخه‬‫دیگری‬‫از‬،‫آن‬‫وابسته‬‫باشد‬.‫بنابراین‬‫اگر‬‫این‬‫نسخه‬‫های‬Scala‫با‬‫هم‬
‫سازگار‬‫نباشند‬‫بروزرسانی‬‫برای‬‫چنین‬‫مشتری‬‫هایی‬‫خیلی‬‫دردسرساز‬‫می‬‫شود‬.‫این‬‫یکی‬‫از‬‫چیزهایی‬‫است‬‫که‬‫در‬‫ارت‬‫باط‬‫با‬Scala
‫کمی‬‫کار‬‫را‬‫دشوار‬‫کرده‬‫است‬.‫ما‬‫تالش‬‫کردیم‬‫برای‬‫حل‬‫این‬،‫مشکل‬‫مؤلفه‬‫های‬‫سمت‬‫کالینت‬‫را‬‫با‬‫جاوای‬‫خالص‬‫بنویسی‬،‫م‬‫به‬‫این‬
‫ترتیب‬‫می‬‫توانیم‬‫در‬‫عین‬‫حالی‬‫که‬‫تا‬‫حد‬‫ممکن‬‫از‬‫مزیت‬‫موجز‬‫بودن‬‫نحو‬Scala‫بهره‬،‫ببریم‬‫بروزرسانی‬‫کالینت‬‫ها‬‫را‬‫هم‬‫خیلی‬
‫ساده‬‫تر‬‫کنیم‬.
-‫از‬‫اینکه‬‫به‬SE Radio‫آمدید‬‫خیلی‬‫متشکرم‬.‫خوشحال‬‫شدیم‬.
‫خیلی‬‫ممنونم‬.
19
‫منابع‬
http://se-topics.ir/topicview?id=48
https://www.dotnettips.info/post/2822
http://www.bdbanalytics.ir
https://chistio.ir

More Related Content

What's hot

Cisco ucs blade servers in persian
Cisco ucs blade servers in persianCisco ucs blade servers in persian
Cisco ucs blade servers in persianFarid Nasiri
 
کتاب قدرت در درون ماست . لوئیس ال هی
کتاب قدرت در درون ماست . لوئیس ال هیکتاب قدرت در درون ماست . لوئیس ال هی
کتاب قدرت در درون ماست . لوئیس ال هیFarid Kamali
 
Qafla e-haq302014
Qafla e-haq302014Qafla e-haq302014
Qafla e-haq302014Zubair Zman
 
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...Muhammad Nabeel Musharraf
 
Natural resources law(qom)
Natural resources law(qom)Natural resources law(qom)
Natural resources law(qom)Ali Mashhadi
 
اساسات کمپیوتر ساینس
اساسات کمپیوتر ساینساساسات کمپیوتر ساینس
اساسات کمپیوتر ساینسKunduz University
 
NATM تونل زنی به روش
NATM تونل زنی به روشNATM تونل زنی به روش
NATM تونل زنی به روشHamed Zarei
 
واقعیت مجازی ( Virtual Reality )
واقعیت مجازی ( Virtual Reality )واقعیت مجازی ( Virtual Reality )
واقعیت مجازی ( Virtual Reality )Farbod Behnaminia
 
Tafheem ul Quran - Surah Al-Fatiha
Tafheem ul Quran - Surah Al-FatihaTafheem ul Quran - Surah Al-Fatiha
Tafheem ul Quran - Surah Al-FatihaThe Chosen One
 
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Research
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Researchمستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Research
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic ResearchMuhammad Nabeel Musharraf
 
Andesha y-zawal by ahmed nadeem qasmi
Andesha y-zawal by ahmed nadeem qasmiAndesha y-zawal by ahmed nadeem qasmi
Andesha y-zawal by ahmed nadeem qasmipakiza ch
 
آبمیوه گیری
آبمیوه گیریآبمیوه گیری
آبمیوه گیریali.pb
 
سامانه دبیرخانه
سامانه دبیرخانهسامانه دبیرخانه
سامانه دبیرخانهAmir Deljouyi
 

What's hot (20)

Cisco ucs blade servers in persian
Cisco ucs blade servers in persianCisco ucs blade servers in persian
Cisco ucs blade servers in persian
 
گزارش پانوراما
گزارش پانوراماگزارش پانوراما
گزارش پانوراما
 
کتاب قدرت در درون ماست . لوئیس ال هی
کتاب قدرت در درون ماست . لوئیس ال هیکتاب قدرت در درون ماست . لوئیس ال هی
کتاب قدرت در درون ماست . لوئیس ال هی
 
Panorama2
Panorama2Panorama2
Panorama2
 
گزارش پانوراما
گزارش پانوراما گزارش پانوراما
گزارش پانوراما
 
Qafla e-haq302014
Qafla e-haq302014Qafla e-haq302014
Qafla e-haq302014
 
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...
Kitab ut tib (Urdu) || Australian Islamic Library || www.australianislamiclib...
 
گزارش پانوراما
گزارش پانوراماگزارش پانوراما
گزارش پانوراما
 
گام بعدی
گام بعدیگام بعدی
گام بعدی
 
Natural resources law(qom)
Natural resources law(qom)Natural resources law(qom)
Natural resources law(qom)
 
اساسات کمپیوتر ساینس
اساسات کمپیوتر ساینساساسات کمپیوتر ساینس
اساسات کمپیوتر ساینس
 
NATM تونل زنی به روش
NATM تونل زنی به روشNATM تونل زنی به روش
NATM تونل زنی به روش
 
فهرست مطالب
فهرست مطالبفهرست مطالب
فهرست مطالب
 
واقعیت مجازی ( Virtual Reality )
واقعیت مجازی ( Virtual Reality )واقعیت مجازی ( Virtual Reality )
واقعیت مجازی ( Virtual Reality )
 
انفورمتیک
انفورمتیکانفورمتیک
انفورمتیک
 
Tafheem ul Quran - Surah Al-Fatiha
Tafheem ul Quran - Surah Al-FatihaTafheem ul Quran - Surah Al-Fatiha
Tafheem ul Quran - Surah Al-Fatiha
 
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Research
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Researchمستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Research
مستشرقین اور تحقیقات اسلامی || Orientalists and Islamic Research
 
Andesha y-zawal by ahmed nadeem qasmi
Andesha y-zawal by ahmed nadeem qasmiAndesha y-zawal by ahmed nadeem qasmi
Andesha y-zawal by ahmed nadeem qasmi
 
آبمیوه گیری
آبمیوه گیریآبمیوه گیری
آبمیوه گیری
 
سامانه دبیرخانه
سامانه دبیرخانهسامانه دبیرخانه
سامانه دبیرخانه
 

Apache kafka