6 اسفند 1402
تهران، خیابان آزادی، تقاطع قریب
هوش مصنوعی GPT
برنامه نویسی وب

کافکا و پایتون

کافکا و پایتون

آپاچی کافکا که به نام کافکا نیز شناخته می‌شود، یک سیستم میانجی پیام رسانی و پخش جریانی در سطح سازمانی است. آپاچی کافکا توسط بیش از 60 درصد از 100 شرکت Fortune در تمامی صنایع و بخش‌ها مورد استفاده قرار می‌گیرد. پس از مدتی که از کافکا استفاده کردم، اکنون هر معمار سیستم کامپیوتری را به کاوش در اکوسیستم کافکا تشویق می‌کنم که در ادامه مقاله خواهید دید. محبوبیت آپاچی کافکا به دلیل ویژگی‌های فوق‌العاده‌ای که ارائه می‌دهد، هر روز در حال افزایش است. پایتون نیز یکی از محبوب ترین زبان های برنامه نویسی در بازار توسعه است. در این مقاله، نوع ارتباط بین پلتفرم پیام رسانی کافکا و زبان برنامه نویسی پایتون تصریح خواهد شد.

کافکا یک تکنولوژی عالی برای طراحی و ساخت خطوط لوله داده بلادرنگ و اپلیکیشن‌ها است.

هدف مقاله

این مقاله قصد دارد نکات کلیدی زیر را بیان کند:

  • معرفی سریع آپاچی کافکا
  • کافکا در معماری مایکروسرویس
  • مفاهیم کلیدی کافکا
  • بلوک‌های سازنده کافکا

من توضیح خواهم داد که چگونه می‌توانیم یک سرویس داخلی پایتون بسازیم که از آپاچی کافکا استفاده می‌کند.

در نهایت، برخی از تجربیاتی که در حین استفاده از آپاچی کافکا کسب کرده‌ام را به شما منتقل خواهم کرد.

معرفی سریع آپاچی کافکا

می‌توانیم با درنظر گرفتن کافکا به عنوان یک سیستم مسیریابی پیام شروع کنیم.

کافکا = یک سیستم پیام رسانی مقیاس‌پذیر، با توان بالا، مقیاس‌ پذیر، بادوام و مقاوم در برابر خطا
نمایی ساده از کافکا
نمایی ساده از پلتفرم پیام‌رسان کافکا

در تصویر بالا یک تولید کننده (یک فرآیند) در حال ارسال پیام‌هایی به تاپیک کافکا است که سپس توسط یک مصرف کننده (یک فرآیند) مصرف می‌شود.

کافکا را می‌توان روی سخت‌افزارهای دارای سرور فیزیکی، ماشین‌های واقعیت مجازی، کانتینرها و همچنین در فضای ابری مستقر کرد.

برای نصب کافکا:

1-آخرین نسخه کافکا را دانلود و اکسترکت کنید.

2-سرویس Zookeeper را استارت کنید.

				
					bin/zookeeper-server-start.sh config/zookeeper.properties
				
			

3-خدمات میانجی‌گری کافکا را راه اندازی کنید.

				
					bin/kafka-server-start.sh config/server.properties
				
			

همچنین می‌توانیم یک داکر ایمیجِ کافکا، مانند confluentinc/cp-kafka/ را دانلود کنیم.

اگر تجربه زیادی در کار با داکر ندارید، خواندن این مقاله انگلیسی به شدت توصیه می‌شود.

کافکا با معماری مایکروسرویس

قبل از این‌که بخواهیم از کافکا استفاده کنیم، اجازه دهید کمی وقتمان را صرف این کنیم که بفهمیم کافکا چه زمانی می‌تواند در معماری جا بیفتد و کافکا چگونه به ناجفت کردن اجزای یک سیستم کمک می‌کند.

مهم‌ترین درسی که در طراحی سیستم‌ها آموخته‌ این است که حتماً نقش‌ها و مسئولیت‌های هر جزء در سیستم را به وضوح تعریف کنم.

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

اگر می‌خواهید درک بهتری از معماری مایکروسرویس داشته باشید، خواندن این مقاله انگلیسی و این مقاله در سایت نیکان دانش هارون به شدت توصیه می‌شود.

یکی از راه‌های ناجفت کردن مایکروسرویس‌ها، معرفی یک پلتفرم پیام رسانی و استریم بین سرویس‌ها است تا به یکدیگر وابسته و حتی از حضور هم آگاه هم نباشند. برای توضیح بیشتر، می‌توان این‌طور گفت که دوسرویس می‌توانند از طریق پروتکل HTTP با یکدیگر ارتباط برقرار کنند. و برای این که سرویس‌ها از طریق پروتکل HTTP با همدگیر ارتباط برقرار کنند، باید از وجود یکدیگر آگاه باشند. علاوه بر این، اگر یکی از سرویس‌ها قطع شود، دیگر سرویس‌ها قادر به برقراری ارتباط نیستند.

معماری مایکروسرویس

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

فرآیندهای جاوا در حال انتشار پیام هستند. فرآیندهای پایتون+جاوا در حال مصرف آن‌ها هستند
فرآیندهای جاوا در حال انتشار پیام هستند. فرآیندهای پایتون+جاوا در حال مصرف آن‌ها هستند.

کافکا ارائه دهنده یک پروتکل ناهمزمان (Asynchronous)، برای کمک به سرویس‌ها در برقراری ارتباط با یکدیگر است. Asynchronous پروتکلی است که اغلب از آن به‌عنوان «شلیک و دیگر هیچ» یاد می‌شود. برای این که بهتر توضیح دهم، یک سرویس می‌تواند داده‌هایی را در مورد تاپیک کافکا منتشر کند. سپس می‌تواند بر روی مراحل بعدی کار کند. پیام‌ها از تاپیک کافکا توسط یک سرویس مصرف‌کننده دریافت می‌شود که سپس عملیات سختی را به انجام می‌رساند و پس از تکمیل، پاسخ به تاپیک کافکا را منتشر می‌کند. سپس سرویس فرستنده رویداد را از تاپیک کافکا دریافت می‌کند که پاسخ آن آماده است.

مفاهیم کلیدی آپاچی-کافکا

بیایید تفحصی در عمق کافکا داشته باشیم.

در لول بالا، برنامه‌های سرویس‌‌گیرنده، مثلاً یک سرور شبکه، یک سرویس داخلی، و/یا یک دستگاه تلفن همراه می‌توانند تولیدکنندگانی باشند که پیام‌هایی را برای تاپیک کافکا منتشر می‌کنند.

اکوسیستم کافکا پیرامون خوشه‌ها (clusters)، واسط‌ها (brokers)، تاپیک‌ها، پارتیشن‌ها، تولیدکنندگان و گروه‌های مصرف‌کننده  طراحی شده است. من این مفاهیم کلیدی را در این بخش توضیح خواهم داد.

هدف این است که اکوسیستم کافکا را به روشی ساده توضیح دهیم. این به ما در طراحی بهتر سیستم‌ها کمک می‌کند.

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

واسط‌ها را می‌توان بدون هیچ‌گونه تأخیر مقیاس‌بندی کرد. واسط‌ها را می‌توان در چندین ماشین مستقر کرد. این موضوع مقیاس‌پذیری بالایی را فراهم می‌کند.

واسط‌ها می‌توانند به ما کمک کنند تا اپلیکیشن‌هایی را که بر روی فناوری‌های مختلف اجرا می‌شوند، به هم متصل کنیم.

مفاهیم واسط و پارتیشن در کافکا

اساساً یک یا چند واسط کافکا بین مصرف‌کننده و منتشر‌کننده وجود دارد.

کافکا - پایتون

تصویر فوق نشان می‌دهد که پیام‌ها توسط تولیدکنندگان منتشر شده و توسط مصرف‌کنندگان مصرف می‌شوند. تولیدکنندگان و مصرف‌کنندگان فرآیند‌هایی هستند که می‌توانند در هر تکنولوژی که از کافکا پشتیبانی می‌کند، مانند پایتون، سی‌شارپ، جاوا، اسکالا و غیره پیاده‌سازی شوند.

هر تاپیک می‌تواند چندین پارتیشن داشته باشد. همچنین هر پارتیشن پیام‌ها را در فایل‌های گزارش ذخیره می‌کند. و هر پایم دارای نشانه افست است.

تولیدکنندگان پیام‌ها را در مورد تاپیک کافکا منتشر می‌کنند. یک تولیدکننده می‌تواند یک فرآیند مستقل باشد که بر روی یک سرور اجرا می‌شود. کافکا داده‌ها را بافر می‌کند. سپس آن‌ها را حفظ می‌کند و بر روی دیسک در سراسر گره‌های خوشه تکرار می‌کند. این تضمین‌کننده مقاوم بودن سیستم دربرابر خطا است.

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

ما می‌توانیم با استفاده از فناوری‌های مختلفی از جمله پایتون، اسکالا، جاوا و غیره با API واسط کافکا تعامل داشته باشیم.

بلوک‌های سازنده کافکا

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

خوشه کافکا

در قلب پلتفرم کافکا، یک خوشه کافکا قرار می گیرد.

خوشه کافکا اساساً یک سیستم توزیع‌شده است که خدمات پردازش پیام‌های کافکا را اجرا می‌کند. واسط‌های کافکا در خوشه‌های کافکا نصب می‌شوند.

خوشه کافکا

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

واسط کافکا

واسط کافکا کامپوننتی است که بر روی یک سرور در یک خوشه کافکا اجرا می‌شود. بنابراین، یک واسط کافکا، بخشی از یک خوشه کافکا است.

ممکن است واسط‌های کافکا زیادی در یک خوشه کافکا کار کنند. این امر منجر به پیشبرد پایایی و تعادل بار ترافیکی می‌شود.

واسط، به‌عنوان رهبر پارتیشن عمل می‌کند. در حالی که بقیه به‌عنوان دنبال‌کننده عمل می‌کنند.

واسط‌ها می‌توانند به صورت توزیع شده اجرا شوند و توسط زوکیپر هماهنگ می‌شوند.

واسط

یک واسط می‌تواند هزاران پیام بزرگ را در ثانیه مدیریت کند.

یک واسط همچنین می‌تواند یک یا چند تاپیک را مدیریت کند. ناشران در آن تاپیک به صورت مداوم پیام‌ها را انتشار می‌دهند و مصرف‌کنندگان پیام‌ها را از آن‌جا مصرف می‌کنند.

آپاچی زوکیپر (ZooKeeper)

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

واسط‌های کافکا بی‌ثبات هستند. زوکیپر برای حفظ وضعیت خوشه‌ها استفاده می‌شود.

کافکا بر روی سرویس همگام‌سازی زوکیپر ساخته شده است.

به طور خلاصه، زوکیپر پیکربند، هماهنگی بین سرورها، انتخاب لیدر و وظایف مرتبط با مدیریت را تسهیل می‌کند.

زوکیپر همچنین نام‌گذاری رجیستری را حفظ می‌کند.

زوکیپر

زوکیپر با ارسال درخواست‌های منظم بررسی می‌کند که آیا واسطه‌گری در حال اجراست یا خیر. بنابراین ما می‌توانیم با استفاده از زوکیپر همه واسط‌های موجود و تاپیک‌های موجود در هر واسط را پیدا کنیم.

زوکیپر لیدرهای پارتیشن را انتخاب می‌کند.

زوکیپر همچنین از منتشرکنندگان، مصرف‌کنندگان و تعداد پیام‌های هر پیام مصرف‌شده از هر تاپیک آگاه است.

تاپیک

بیایید ببینیم که تاپیک چیست. همان‌طور که در تصویر بالا نشان داده شده است، تاپیک سطلی است که پیام‌ها در آن منتشر می‌شوند و در آن مصرف می‌شوند.

تاپیک‌ها به پارتیشن تقسیم می‌شوند. پیام‌ها در فایل‌های گزارش ذخیره می‌شوند. پیام‌ها سازماندهی شده و در پارتیشن‌ها نگهداری می‌شوند.

تاپیک کافکا

کافکا یک پیام از یک تولیدکننده دریافت می‌کند، آن را در یک فایل لاگ ذخیره می‌کند و پیام را برای مصرف‌کننده می‌فرستد.

تولید کننده و مصرف‌کننده می‌توانند دو برنامه متفاوت باشند که در محیط‌های کاملاً متفاوت با استفاده از فناوری‌های کاملا متفاوت اجرا می‌شوند.

با ویژگی‌های مسیریاب پیام و ذخیره گزارش، کافکا می‌تواند پیام‌ها را تکرار کند. این باعث می‌شود کافکا خطاناپذیر باشد بتواند به خوبی با شکست‌ها برخورد کند.

پارتیشن‌ها و فایل‌های گزارش (پرونده‌ها-Log Files)

هر تاپیک می‌تواند چندین پارتیشن داشته باشد. ما می‌توانیم یک تاپیک را در چندین سرور پارتیشن‌بندی کنیم.

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

هر پارتیشن را می‌توان در ماشین‌های مختلف تکرار کرد تا خطاپذیری و دسترسی بالا فراهم شود.

داشتن پارتیشن‌های متعدد در یک تاپیک، مصرف موازی پیام‌ها را امکان‌پذیر می‌کند.

پارتیشن‌ها و فایل‌های گزارش کافکا

هر پارتیشن رکوردها را در یک دنباله نگه‌ می‌دارد.

گزارش‌ها ماهیتشان فقط ضمیمه‌ای است و فایل‌های گزارشی که گزارش‌ها در آن ضمیمه می‌شوند را می‌توان در چندین ماشین توزیع کرد.

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

نکته اصلی که باید به خاطر بسپارید این است که هنگام انتشار پیام‌ها، از همان شناسه پارتیشن استفاده کنید تا مطمئن شوید که پیام‌ها به ترتیب درستی دریافت می‌شوند.

آفست مصرف‌کننده

این بخش توضیح می‌دهد که آفست مصرف‌کننده چیست. این به ما کمک می‌کند تا درک کنیم چگونه کافکا تضمین می‌کند که پیام‌ها گم نمی‌شوند.

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

هر پیام را می‌توان به‌طور منحصر به فرد با تاپیک، پارتیشن و شناسه آفست آن شناسایی کرد.

آفست مصرف‌کننده کافکا

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

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

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

گروه‌های مصرف‌کننده

یک مصرف‌کننده پیامی را از یک تاپیک کافکا مصرف می‌کند. چندین مصرف‌کننده را می‌توان در یک گروه مصرف گروه‌بندی کرد. مصرف‌کنندگان در یک گروه مصرف‌کننده، می‌توانند پیام‌ها را در چندین تاپیک مصرف کنند. این منجر به مقیاس‌پذیری می‌شود.

گروه‌های مصرف‌کننده

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

کافکا می‌تواند در صورت عدم موفقیت یکی از مصرف‌کنندگان، پیام‌ها را به طور خودکار به سمت مصرف‌کنندگان هدایت کند.

پایتون کافکا

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

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

پایتون کافکا

یکی از پرکاربردترین کتابخانه‌های پایتون (برای کافکا)، کافکا – پایتون است.

نصب کتابخانه (پایتون):

				
					pip install kafka-python
				
			

انتشار پیام (پایتون):

				
					from kafka import KafkaProducer
from kafka.errors import KafkaError# create a producer. broker is running on localhostproducer = KafkaProducer(retries=5, bootstrap_servers=['localhost:9092'])# define the on success and on error callback functionsdef on_success(record):    print(record.topic)
    print(record.partition)
    print(record.offset)

def on_error(excp):
    log.error(excp)
    raise Exception(excp)# send the message to fintechexplained-topic
producer.send('fintechexplained-topic', {'key': 'value'}).add_callback(on_success).add_errback(on_error)# block until all async messages are sent
producer.flush()

				
			

مصرف پیام (پایتون):

				
					# To consume from fintechexplained-topic
consumer = KafkaConsumer('fintechexplained-topic',
                         group_id='my-group', enable_auto_commit=False,
                         bootstrap_servers=['localhost:9092'],
           value_deserializer=lambda m: json.loads(m.decode('ascii')))for message in consumer:
    print(message.topic)
    print(message.partition)
    print(message.offset)
    print(message.key)

				
			

ویژگی group_id اجباری است. این ویژگی مشخص می‌کند که مصرف‌کننده عضو کدام گروه از مصرف‌کنندگان است.

enable_auto_commit= اطمینان حاصل می‌کند که ما به طور خودکار آفست ایجاد نمی‌کنیم.

همچنین APIهای Stream (پخش) وConnect  (اتصال) نیز وجود دارند. Stream APIها عمدتاً برای معماری پردازش جریان استفاده می‌شوند و Connect API به تاپیک‌های کافکا اجازه می‌دهد تا به برنامه‌ها متصل شوند.

مشکلات پیش‌بینی نشده

این بخش برخی از درس‌های مهمی را که در حین استفاده از کافکا آموخته‌ام تصریح می‌کند:

6. مشکلات پیش‌بینی نشده پایتون و کافکا
  • برای فعال کردن پردازش موازی پیام‌ها، در یک تاپیک چندین پارتیشن ایجاد کنید. این کار به چندین مصرف‌کننده امکان می‌دهد تا پیام‌ها را به صورت موازی پردازش کنند. هر پارتیشن می‌تواند تنها توسط یک مصرف کننده در یک گروه مصرف‌کننده مصرف شود. بنابراین، اگر چندین مصرف کننده در یک گروه وجود داشته باشد، آن‌ها می‌توانند پیام‌های پارتیشن‌های مختلف را مصرف کنند. بنابراین، اگر بخواهیم مصرف پیام‌ها را موازی کنیم، باید چندین در یک تاپیک چندین پارتیشن ایجاد کنیم.
  • هر پیام به هر گروه مصرف‌کننده‌ای که در یک تاپیک/پارتیشن مشترک شده است منتقل می‌شود، اما در یک گروه، تنها به یک مصرف‌کننده می‌رسد. بنابراین، تمام consumer groups که در تاپیک مشترک شده‌اند، پیام‌ها را دریافت می‌کنند. اما تنها یک مصرف‌کننده در یک گروه مصرف‌کننده پیامی را از یک پارتیشن دریافت می‌کند. بنابراین، اگر می‌خواهید پیام را برای چندین مصرف‌کننده پخش کنید، consumer groups مختلفی را به آن‌ها اختصاص دهید.
  • تنظیم پیش‌فرض اندازه پیام در کافکا 1 مگابایت است. پیام‌ها را می‌توان قبل از تحویل به کافکا فشرده کرد. برای ذخیره داده‌های بیشتر در یک تاپیک واحد، می‌توانیم چند پارتیشن را در چند سرور ایجاد کنیم.
  • اطمینان حاصل کنید که پیام‌هایی که باید منتشر یا مصرف شوند، قابل پخش باشند. مراقب تاریخ و ساختارهای تودرتو باشید.
  • از تابع seek(TopicPartition, long) برای تعیین موقعیت جدید استفاده کنید.

سایر موارد

  • اگر در حال طراحی اپلیکیشنی هستیم که ترتیب پیام‌ها در آن مهم است و می‌خواهیم این موضوع تضمین شود، از همان شناسه پارتیشن در همه پیام‌ها استفاده کنید. دلیلش این است که این‌گونه گارانتی ترتیب‌بندی در سطح پارتیشن اعمال می‌شود. بنابراین، اگر بیش از یک پارتیشن در تاپیک دارید، باید اطمینان حاصل کنید که پیام‌هایی که برای داشتن همان شناسه پارتیشن نیاز دارید، ظاهر شوند. همه پیام‌هایی که در یک پارتیشن از یک تاپیک قرار می‌گیرند، در صورتی که شناسه پارتیشن یکسانی داشته باشند، به درستی مرتب می‌شوند.
  • اگر می‌خواهیم در تمامی تاپیک‌ها ترتیب سراسری ایجادکنیم، از یک پارتیشن تاپیک منفرد استفاده می‌کنیم.
  • برای طراحی یک سیستم بادوام، اطمینان حاصل کنید که در تنظیمات کافکا، ضریب تکثیر بالایی تنظیم شده است. کافکا گزارش مربوط به پارتیشن‌های هر تاپیک را در چندین سرور تکثیر می‌کند.
    هنگامی که یک سرور از کار می‌افتد، این به سیستم خودکار ردکردن خطاها اجازه می‌دهد تا نسخه‌های تکثیرشده پیام‌ها را در صورت وجود خرابی در دسترس نگه‌دارد. ما می‌توانیم ضریب تکثیر را با ترتیب تاپیک‌ها تنظیم کنیم. به علاوه، می‌توانیم اندازه دسته تولید کننده را روی 1 تنظیم کنیم.
    این فرآیند اطمینان حاصل می‌کند که هر پیام در دیسک ذخیره شود و پیام‌ها به صورت دسته‌ای حذف نشوند. که بر عملکرد کلی تأثیر می‌گذارد. برای سیستم‌های بادوام و با سطح دسترسی بسیار بالا، مهم است که تکثیر تاپیکشان بالا باشد. معمولاً حداقل 3 رابط برای یک سیستم خودکار ردکردن خطای قابل اعتماد توصیه می‌شود.
  • اگر بخواهیم پیام‌های قدیمی‌تر را حذف کنیم، از تاپیک‌های فشرده‌شده استفاده می‌کنیم که در آن رویدادهای قدیمی‌تر، زمانی که رویددهای جدیدتر در تاپیک منتشر می‌شوند، حذف می‌شوند.
  • برای ایمن کردن کافکا، از سرتیفیکیت‌های مصرف‌کننده TLS استفاده کنید. پیام‌ها را رمزگذاری و مجوزهای کاربر را اضافه کنید.
  • همچنین می‌توانیم برای ایجاد و پردازش جریان‌های دیتا که در کافکا ذخیره می‌شوند، از Java DSL یا Kafka’s SQL به مثابه زبان پخش‌کننده استفاده کنیم.

خلاصه

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

کافکا یک سیستم پیام‌رسانی با توان عملیاتی، مقیاس‌پذیری و دوام بالا در برابر خطا است. این سیستم می‌تواند به ما در طراحی و ساخت سیستم‌های مبتنی بر رویدادهای بلادرنگ کمک کند. کافکا در بیش از 60 درصد از 100 شرکت Fortune مورد استفاده قرار می‌گیرد و پلتفرمی است که باید آن را بشناسید. کافکا برای تعامل سرویس‌های پیاده‌سازی شده به زبان‌های مختلف، به روشی بدون خطا استفاده می‌شود.

به هر معمار سیستم‌های کامپیوتری اکیداً توصیه می‌کنم که با اکوسیستم کافکا و ارتباط آن با پایتون آشنا شود. به ویژه در مورد مفاهیمی مانند خوشه کافکا، رابط، تاپیک‌ها، پارتیشن‌ها، مصرف‌کننده، تولیدکننده و آفست.

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

Leave feedback about this

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
هوش مصنوعی GPT
X