<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمدحسین کاکا</title>
        <link>https://virgool.io/feed/@mhosseinkaka</link>
        <description>99% مهندس کامپیوتر ، معلم ریاضی ، آنالیزور و از همه مهمتر عاشق گیم</description>
        <language>fa</language>
        <pubDate>2026-06-18 12:25:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/201842/avatar/cMBwOu.jpeg?height=120&amp;width=120</url>
            <title>محمدحسین کاکا</title>
            <link>https://virgool.io/@mhosseinkaka</link>
        </image>

                    <item>
                <title>نقد واکنش های طرفداران احزاب سیاسی</title>
                <link>https://virgool.io/@mhosseinkaka/%D9%86%D9%82%D8%AF-%D9%88%D8%A7%DA%A9%D9%86%D8%B4-%D9%87%D8%A7%DB%8C-%D8%B7%D8%B1%D9%81%D8%AF%D8%A7%D8%B1%D8%A7%D9%86-%D8%A7%D8%AD%D8%B2%D8%A7%D8%A8-%D8%B3%DB%8C%D8%A7%D8%B3%DB%8C-djvjusbg40jk</link>
                <description>ایران برای ایراننمی خوام خیلی دارک بنویسم ولی باید بگم که اوضاع سیاسی مردم ما اصلا به سمت خوبی نمیره.چند وقته واقعا فکرم رو مشغول کرده، اگر کمی اخبار رو پیگیری کرده باشید متوجه شدید که در همه ی کشور ها احزاب سیاسی وجود داره ولی بنظرم یک فرق عمده و اساسی وجود داره بین اونها با احزاب موجود در کشور ما؛ تقدم قدرت حزب بر اقتدار و موفقیت کشور ...در این وسط یک عده معدود هم هستند که واقعا دلشون برای کشور می سوزه.خیلی توی گذشته سیر نمی کنم و از زمان حال مثال میزنم که این مورد پررنگ تره. برای بررسی، دو مورد خطا از دو حزب سیاسی کشور، ری اکشن طرفداران و خبرگزاری ها رو نگاه کنیم.واردات 200 میلیونی لباس دختر وزیر آموزش و پرورش دولت آقای روحانی (اصلاح طلب) و سفر ترکیه جهت تفریح یا خرید سیسمونی خانواده آقای قالیباف (اصولگرا)هردو از نظر جامعه یک کار خطا محسوب شدند و هرکسی می خواست به نفع جریان خود از این ماجرا استفاده کنه. بهتره تاکید کنم الان بحث ما این نیست کدوم کار خوبه یا بد بلکه بحث اینکه هردو کار از سمت جامعه رد شده و هر جریان می خواست جمعیت خاکستری موجود رو جذب کنه.برای مثال کافیه به تیتر روزنامه های اصلاح طلب و اصولگرا نگاهی بندازید تا متوجه این حجم از بی اخلاقی بشید. بی اخلاقی که در آخر ضربه اش رو نه احزاب که اول مردم و بعد کشور متحمل می شوند.وضعیتی که الان هم جامعه داره با سرعت هرچه تمام به سمتش پیش میره و توی تک تک اعمال و رفتار افراد جامعه هویداست.و اما این وسط عده ی معدودی هستند که بسیار مورد احترام هستند. این افراد حتی اگر خطا از جریانی که طرفدار آن هستند سرزده باشد از آن چشم پوشی نمی کنند و تا حصول نتیجه حتی اگر جوابی که میگیرند ظاهری باشد، اون رو پیگیری میکنند.این افراد دلسوزان واقعی هستند که به معنای واقعی کلمه در این جمعیت بی اخلاق مدعی گم هستند و باید قدرشان را دانست.بشخصه امیدوارم که اولویت اول سیاست مداران محترم بشود ایران و موفقیت آن نه موفقیت احزابی که وجودشان را از همین ایران گرفته اند. </description>
                <category>محمدحسین کاکا</category>
                <author>محمدحسین کاکا</author>
                <pubDate>Sun, 24 Apr 2022 13:28:19 +0430</pubDate>
            </item>
                    <item>
                <title>بدون نام، بدون عنوان</title>
                <link>https://virgool.io/@mhosseinkaka/%D8%A8%D8%AF%D9%88%D9%86-%D9%86%D8%A7%D9%85-%D8%A8%D8%AF%D9%88%D9%86-%D8%B9%D9%86%D9%88%D8%A7%D9%86-splhtwsjfob5</link>
                <description>خیلی ها میگن که نوشتن سخته یا راحت نیست که هرچی می خوای بنویسی... ولی بنظرم برعکس، راحت ترین کار نوشتن. چرا؟ جواب ساده است، شما برای خودت می خوای بنویسی و این یعنی اینکه خودت باید خوشت بیاد نه دیگران، خودت باید راضی باشی از نوشته ات نه دیگران. با این دید که نگاه کنی میفهمی که آره چقدر نوشتن راحت و صدالبته خوش‌آیند.   حالا بیایید راجع به موضوع نوشتن صحبت کنیم ? نیاز نیست بگردید تا یک موضوع خفن و خاص و استثنایی پیدا کنید فقط باید راجع به اونچه که علاقه دارید بنویسید. می خواید ساده تر باشه ?، راجع به خودتون بنویسید. ساده ترین حالت ممکن همینه یعنی نوشتن راجع به خودمون، علایق‌مون، اخلاق‌مون، خاطرات‌مون و... می‌بینید نوشتن از اونی که فکر می‌کردیم راحت تره. می خوام شروع کنم؟ می خوام شروع کنم، چجوری؟ خیلی راحت مثلا امشب راجع به روزت بنویس یا اتفاق جالبی که افتاده یا دعوایی که دیدی یا نه اصلا راجع به بازی فوتبال دیشب بنویس نکته آخری که می خوام بگم اینه از منتشر کردن و شنیدن نقد نترس میدونی چرا؟ چون باعث میشه که رشد داشته باشی ??اگر این مطلب را خواندید و چیزی نوشتید، خوشحال میشم منم مطلب تون رو بخونم ?</description>
                <category>محمدحسین کاکا</category>
                <author>محمدحسین کاکا</author>
                <pubDate>Tue, 06 Jul 2021 12:42:43 +0430</pubDate>
            </item>
                    <item>
                <title>نماز؛ ادا یا قضا</title>
                <link>https://virgool.io/@mhosseinkaka/%D9%86%D9%85%D8%A7%D8%B2-%D8%A7%D8%AF%D8%A7-%DB%8C%D8%A7-%D9%82%D8%B6%D8%A7-r7am4f2bq8yv</link>
                <description>قافله...هیچ وقت فکر نمیکردم که اینقدر طولانی از خودم بگم.به قطعیت میتونم بگم که جلسه چهارشنبه قافله، اولین جایی بود که این همه صحبت کردم درباره ی خودم و تغییراتم، از دورانی که اگه جای دیگه من رو می‌دیدند با عنوان دوران جهالت اسم می‌بردم. چهارشنبه شب داشتم به جلسه فکر میکردم، به سوال خانم شعبانی، به جواب آقای جواد قدوسی ، به صحبت های خانم معارف و آقای حسینی. در آخر به خودم. اینکه قبل از جواب آقا جواد ( خیلی کیف کردم) چه نتیجه ای برای بدهکاری و پرداخت و نحوه پرداخت داشتم. ( منظور ادا کردن نماز قضا است)نتیجه برام مشخص بود، نمی فهمیدم. من به سمت شبیه سازی رفتم. (کاری که وقتی به جواب نمی رسم انجام میدم). با خودم اینجوری گفتم، من میرم یه تلوزیون میخرم و مقداری پول میدم و بقیه اش رو چک. من استفاده میکنم از تلوزیون و لذت میبرم اما وسطش فوت میکنم. اما چک دست مغازه داره. نمیاد بگه مرده من پولم رو نگیرم، میگه تو استفاده ات رو کردی به من چه که مردی. در واقع این دِین بر گردن من هست حتی بعد از مرگم.نحوه پرداخت هم متفاوته‌‌؛ یا توی حساب بانکی پول هست و از اونجا پرداخت میشه یا مالم رو می‌فروشن و یا نه اصلا یکی از بستگانم پرداخت می‌کند.باید ادا بشه چجوریش مهمه مگه، بنظرم ادا کردنش مهمه تا چگونه ادا کردنش.و با این فکر بخواب رفتم ...پ.ن : قافله جایی است که میتونیم دغدغه هامون رو بیان کنیم و این متن ادامه یکی از صحبت ها بود...</description>
                <category>محمدحسین کاکا</category>
                <author>محمدحسین کاکا</author>
                <pubDate>Sat, 06 Mar 2021 00:02:59 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با APACHE KAFKA</title>
                <link>https://virgool.io/@mhosseinkaka/apache-kafka-start-mnd81x4uetxi</link>
                <description>آپاچی کافکا چگونه کار می‌کند؟ وظیفه و هدف اصلی  Apache Kafka، ارائه یک بستر برای مدیریت و کنترل جریان‌های اطلاعاتی با کارآیی بسیار بالا، در سیستم‌ها و زیرسیستمهای مختلف است. یعنی شما می‌توانید با ایجاد کردن یک Pipeline برای جریان اطلاعات خود، وابستگی مستقیم سیستمها و زیرسیستمها را از بین ببرید؛ آن هم بصورتی که بروز مشکلی در هر قسمت، کمترین میزان تاثیر را در سایر قسمتها داشته باشد.فرض کنید شما تعداد زیادی سیستم و زیرسیستم مختلف را داشته باشید که هر کدام از آنها نیازمند ارتباط با برخی از قسمتهای دیگر است. در این صورت شما دو راه دارید: اول اینکه در هر قسمت سرویس‌هایی را برای ارتباط با سایر قسمت‌ها پیاده سازی کنید یا اینکه هر قسمت بصورت مستقیم با سایر قسمتها در ارتباط باشد.مشخصا کنترل و مدیریت جریان اطلاعاتی در این پیاده سازی کار بسیار دشواری است. تغییر هر قسمت، تاثیر مستقیمی بر روی سایر قسمتها دارد و در صورتی که هریک از قسمتها با مشکلی روبرو شوند، سایر قسمتهای مرتبط نیز با مشکل روبرو می‌شوند. این مشکل زمانی بسیار نمایان می‌شود که در معماری‌هایی مانند میکروسرویس، بدلیل بالا رفتن تعداد زیرسیستم‌ها و ارتباطات آنها، مدیریت این ارتباطات کار بسیار دشوار، پرهزینه و پیچیده‌ای می‌شود.روش Apache Kafka برای رفع مشکل فوق به این صورت است که Kafka با بر عهده گرفتن مدیریت ارتباطات و جریان داده‌ای قسمت‌های مختلف، به شما کمک می‌کند تا تیم پیاده سازی، تنها تمرکزشان را بر روی Business ی که می‌خواهند پیاده سازی کنند، قرار دهند. با این روش می‌توانیم به راحتی سیستم‌هایی را پیاده سازی کنیم که از نظر ارتباطی در حالت معمول، پیچیده یا بسیار پیچیده‌اند.مشاهده کنید :همانطور که می‌بینید دیگر نیازی نیست تا قسمتهای مختلف بصورت مستقیم با یکدیگر در ارتباط باشند؛ تمامی ارتباطات از طریق Kafka انجام می‌شود. تغییر یک قسمت، تاثیر زیادی بر روی سایر قسمتها ندارد یعنی دسترس خارج شدن یا بروز هر گونه مشکلی در یک قسمت، بر روی کل سیستم تاثیر زیادی ندارد. پیام‌های مربوط به یک قسمت تا زمانی که پردازش نشده‌اند از بین نمی‌روند؛ پس سیستم‌ها می‌توانند در حالت Offline نیز به کار خود ادامه دهند. شما می‌توانید در این روش تمامی قسمت‌های سیستم را بصورت یک Cluster پیاده سازی کنید. در اینصورت احتمال از دسترس خارج شدن هر قسمت به کمترین میزان می‌رسد. حتی درصورتی که یک قسمت بصورت موقت از دسترس خارج شود، پیام‌های مرتبط با آن قسمت تا زمانی که دوباره به جریان پردازش بازگردد، از بین نمی‌روند بلکه پس از اضافه شدن قسمت از دسترس خارج شده، بلافاصله تمامی پیامهای مرتبط با آن قسمت برایش ارسال می‌شوند. برای بالا رفتن میزان کارآیی و تحمل خطا، به راحتی می‌توانید خود Kafka را نیز بصورت یک Cluster پیاده سازی کنید و با بالا رفتن تعداد درخواست، در صورت نیاز می‌توانید عملیات مقیاس پذیری افقی را به راحت‌ترین روش ممکن انجام دهید.مقیاس پذیری یا توسعه پذیری (Scalability)توسعه پذیری یا همان Scalability که بعضا به آن مقیاس پذیری هم گفته می شود یک تعریف بسیار ساده دارد: سیستمی که بتواند خواسته های در حال افزایش را پاسخ دهد. برای مثال شما یک نرم افزار دارید که بر روی یک سرور قرار دارد (مثلا یک وب سایت) و روزانه ۱۰۰بازدید کننده از وب سایت شما دیدن می کنند اما بعد از مدتی این ۱۰۰بازدید کننده در روز به ۱۰هزار بازدید کننده می‌رسید، در صورتیکه سرور شما بتواند با هزینه ی به نسبت معقولی این ۱۰هزار بازدید کننده را مدیریت کند، شما یک سیستم Scalable یا توسعه پذیر خواهید داشت. مثلا فرض کنید، برای ۱۰۰بازدید در روز، شما مبلغ ۱۰هزار تومان در ماه پرداخت میکردید. حالا که بازدید شما ۱۰هزار نفر شده (یعنی ۱۰۰برابر)، هزینه ی شما نباید ۱۰۰برابر شود. مثلا هزینه شما به جای ۱۰هزار تومان در ماه، بایستی ۲۰هزار تومان در ماه شود، تا بتوانیم بگوییم یک سیستم توسعه پذیر داریم. یکی از اهداف سیستم های توزیع شده نیز، توسعه پذیری آن هاست. ( به قول آقای تننباوم یکی از چهار هدف سیستم توزیع شده، توسعه پذیر بودن آن است. یکی دیگر از این اهداف سیستم توزیع شده، شفافیت یا همان Transparency است.) همانطور که گفتیم اگر در یک سیستم توزیع شده، درخواست هایی(Requests) که به سیستم می آیند ۱۰برابر شود، سیستم توزیع شده باید بتواند مثلا با ۲برابر کردن منابع خود، این تعداد درخواست ها را بدون مشکل پاسخ گو باشد.انواع توسعه پذیری۱.توسعه عمودی یا به اصطلاح Scale Up۲. توسعه افقی یا به اصطلاح Scale Outتوسعه عمودیدر توسعه عمودی که به آن Scale Up کردن نیز گفته می شود، شما به هر کدام از گره ها (Nodes ) که در واقع همان کامپیوتر های موجود در سیستم توزیع شده هستند، منابعی مانند Ram ، CPU یا کارت گرافیک و… اضافه میکنید. با این کار شما سیستم های قوی تری دارید که میتوانند به درخواست های بیشتری در زمان سریعتر پاسخ دهند.توسعه افقیدر این روش، به جای اضافه کردن منابع بیشتر مانند Ram به کامیپوترهای جاری در سیستم توزیع شده، تعدا گره ها (Nodes) را افزایش می دهیم. برای مثال تعدادی بیشتری کامپیوتر به سیستم توزیع شده اضافه می کنیم.اگر چه روش اول، روشی ساده و بعضاً کارا است، ولی پیشنهاد می شود در یک سیستم توزیع شده از روش دوم استفاده کنید.ساختار کافکاکافکا به صورت خوشه ای بر روی یک یا چند سرور کار می کند.کافکا جریان داده ها و رکورد ها را در ساختارهایی به نام تاپیک( 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 های مرتبط ارسال می‌کند.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 ذخیره می‌شوند.هر خانه از یک Partition، توسط یک شناسه از نوع int و با نام offset در دسترس است. تمامی پیام‌های جدید ارسالی توسط Producer با offset ای بزرگتر از offset موجود در این Partition ذخیره می‌شوند؛ یعنی در انتهای آن قرار می‌گیرند. در مثال فوق در صورت دریافت پیام جدید، offset آن با عدد 10 مقداردهی می‌شود. همچنین عملیات خواندن نیز از کوچکترین offset ای که هنوز مقدار آن توسط Consumer ‌ها خوانده نشده‌است، انجام می‌شود. همانطور که مشخص است، بدلیل اینکه تعداد  Partitionهای این مثال عدد یک می‌باشد، تمامی درخواست‌های Producer‌ها در یک Partition قرار می‌گیرند و تمامی Consumer‌ها نیز از طریق یک Partition به پیام‌ها دسترسی دارند؛ یعنی در صورت بالا بردن تعداد Producerها یا Consumer‌ها، کارآیی بالا نمی‌رود. البته با اینکه کنترل مقدار اولیه offse برای شروع یک Consumer به دست خود Consumer و Zookeeper است، اما در اکثر موارد تمامی Consumer ‌های یک Topic باید از یک نقطه، شروع به خواندن داده‌ها کنند. در این حالت تا زمانیکه پیام با offset 1، توسط  Consumerای خوانده نشود، هیچ  Consumerای نمی‌تواند پیام شماره 2 را بخواند. استفاده کردن از یک Partition بیشتر زمانی کاربرد دارد که بخواهید تمامی پیام‌هایتان، واقعا در یک صف قرار بگیرند.حال فرض کنید در سازمان شما سه واحد اداری، مالی و آموزش وجود دارد. در این صورت بدلیل اینکه تمامی پیام‌ها در یک Partition ذخیره می‌شوند، تا زمانی که یک واحد تمامی پیام‌های مرتبط با خود را از ابتدای Partition نخوانده‌است، دیگر واحدها نمی‌توانند به پیام‌های مرتبط با خود دسترسی داشته باشند. پس در این صورت ما می‌توانیم تعداد Partition‌های این Topic را عدد 3 درنظر بگیریم؛ بصورتی که پیامهای مرتبط با هر واحد در یک Partition جدا قرار بگیرد.بدین شکل :در این روش هر Producer زمانیکه پیامی را برای این Topic ارسال می‌کند، یک Key نیز برای آن مشخص می‌کند و این Key  نشان دهنده این است که پیام جدید باید در کدام Partition ذخیره شود. یعنی بصورت همزمان می‌توانید در هر سه  Partition، پیام‌هایتان را ذخیره کنید؛ بصورتی که بطور مثال تمامی پیامهای مربوط به واحد اداری، در Partition0 و تمامی پیام‌های مربوط به واحد مالی، در Partition 1 و واحد آموزش در Partition 2 ذخیره شوند و همچنین عملیات خواندن از این Topic نیز می‌تواند بصورت همزمان در واحدهای مختلف انجام شود.باید در تعریف تعداد Partition‌ های یک Topic این نکته را در نظر بگیرید که این تعداد کاملا به نیازمندی شما و کارآیی که شما مد نظر دارید، بستگی دارد. تعداد این Partition‌ها حتی می‌تواند به تعداد User‌ های یک سیستم نیز تعریف شود. علاوه بر آن باید بدانید که هر Partition در هر زمان تنها توسط یک Primary Broker می‌تواند در دسترس سایر قسمت‌ها قرار بگیرد و تمامی عملیات خواندن و نوشتن در Partition توسط Kafka Server انجام می‌شود و در صورتیکه به هر دلیلی این سرور از دسترس خارج شود، مدیریت این Partition به سرور‌های دیگر داده می‌شود.نحوه کار کافکا بصورت شماتیک بدین شکل است:قبل از نمایش معماری کلی باید یکسری معانی دیگری نیز تعریف کنیم :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 پارتیشن‌های دیگر باشد.Replication Factor :این خصوصیت احتمال از دست دادن داده‌های یک Topic را به حداقل می‌رساند؛ به این صورت که هر پیام از یک Topic، در چندین سرور مختلف که تعداد آنها توسط این خصوصیت مشخص می‌شود، نگهداری می‌شود.Apache ZooKeeper :Kafka هیچ  Stateای را نگه نمی‌دارد (اصطلاحا stateless می‌باشد). برای ذخیره کردن و مدیریت تمامی State ها از جمله اینکه درحال حاضر Primary Broker برای یک Partition چه سروری است، یا اینکه پیام‌های یک Partition تا کدام offset توسط Consumer‌ ها خوانده شده‌اند یا اینکه کدام Consumer در حال حاضر در یک Consumer Group مسئول یک Partition می‌باشد، توسط Apache Zookeeper انجام می‌شود.نمایی از معماری کلی :نحوه کار کافکا بصورت کلیکافکا پیام‌هایی را که از بسیاری از &quot;تولید کنندگان&quot; دریافت می کند را ذخیره کرده و داده ها بدین صورت بر روی پارتیشن های گوناگونی در &quot;تاپیک‌های&quot; مختلف توزیع شده و پارتیشن بندی می شوند. در هر پارتیشن پیام‌ها با هم شاخص گذاری شده و با یک برچسب زمانی ذخیره می شوند. سایر فرایندها مثل &quot;مصرف کنندگان&quot; می توانند پیام‌ها را از پارتیشن‌ها دریافت کرده و اطلاعات مورد نظر خود را درخواست کنند. کافکا بر روی خوشه هایی از یک یا چند سرور اجرا می شود و پارتیشن‌ها می توانند بر روی چندین نود مختلف توزیع شوند.آپاچی کافکا هنگامی که همراه با آپاچی استورم، اچ بیس و اسپارک استفاده شود به طور موثری می تواند داده‌های بلادرنگ و جریان را پردازش کند. اگر کافکا به عنوان یک خوشه روی چندین سرور پیکر بندی و اجرا شود در اینصورت به کمک 4 رابط کاربری خود براحتی عملیات انتشار و دریافت و پردازش اطلاعات را به سرعت و با کارایی بالا انجام می دهد.توانایی کافکا برای ارایه جریان‌های عظیم داده و پیام ،همراه با تحمل خطای بالا ، آن را جایگزین برخی از سیستم‌های پیام‌رسانی مرسوم مانند JMS  ، AMQP و غیره کرده است.ضمانت های کافکاکافکا سه ضمانت برای کار خودش می‌دهد که عبارت اند از :1- تمامی پیام‌های دریافتی در یک Partition از یک Topic، به همان ترتیبی که دریافت می‌شوند ذخیره می‌شوند.2- ‌در یک Partition فعال ،consumer ها تمامی پیام‌ها را  به همان ترتیبی که ذخیره شده‌اند، دریافت می‌کنند.3- در یک Topic با Replication Factor ای با مقدار N، درجه تحمل خطا N - 1 می‌باشد.</description>
                <category>محمدحسین کاکا</category>
                <author>محمدحسین کاکا</author>
                <pubDate>Fri, 05 Jun 2020 23:32:37 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت LED رقصان</title>
                <link>https://virgool.io/@mhosseinkaka/dancing-led-kqodce2mrqnb</link>
                <description>در قسمت اول می خواهیم مرحله به مرحله تمام کارهایی که قرار است در برنامه کدویژن انجام دهیم را شرح دهم.در ابتدا وارد نرم افزار CodeVision AVR شده و از منوی بلای صفحه سمت چپ New Project را انتخاب می‌کنیم.در قسمتی که از ما پرسیده می شود می خواهید از CodeWizard Avr استفاده نمائید، ما No را انتخاب می‌کنیم.در مرحله بعد محل ذخیره پروژه را با نام دلخواه وارد می‌کنیم و روی گزینه  Saveکلیک می‌کنیم.مرحله اولدر مرحله بعدی باید نوع میکروکنترلر را انتخاب کنیم. ما در این پروژه از Atmega32 استفاده کرده‌ایم پس این میکروکنترلر رو انتخاب می‌کنیم و نام فایل را Led می‌گذاریم.مرحله دومدر مرحله بعد در قسمت C Compiler نوع chip را Atmega32 و Clock را بر روی 8MHz می گذاریم و بر روی OK کلیک می نمائیم.مرحله سومحال پنجره‌ای باز می‌شود که کدهای مربوطه را در آن می نویسیم.در ابتدا کتابخانه های مورد نیازمان را اضافه می‌کنیم :#include &lt;io.h&gt;#include &lt;mega32.h&gt;#include &lt;delay.h&gt;void main(void){{سپس در بدنه اصلی (main) کدهای برنامه را می‌نویسیم:ابتدا باید یک پورت را برای اتصال به ال ای دی ها فعال کنیم و ما پورت B را فعال می کنیم و متغییر a را برای شمارش حلقه تعریف می کنیم:void main(void){int a;DDRB=0b11111111;{برای روشن شدن ال ای دی ها باید مقدار آنها را 1 کنیم و اگر بخواهیم ال ای دی ها به ترتیب از چپ به راست یا بلعکس روشن و خاموش شوند باید برای هر وضعیت مقدار آن را مشخص کنیم و چون ما 8 ال ای دی داریم و می خواهیم در هر لحظه فقط یک ال ای دی روشن شود پس باید یک آرایه تعریف کرده و وضعیت ها را در آن مشخص نمائیم:char led[]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};حال باید در یک حلقه for روشن و خاموش شدن ال ای دی ها را تعریف کنیم:for (a=0; a&lt;=7; a++) {PORTB=led[a];delay_ms(50);};برای روشن شدن ال ای دی ها از چپ به راست مانند بالا عمل می کنیم فقط در حلقه for باید ترتیب فراخوانی متغییرها  برعکس شود و کد به شکل زیر می شود:for (a=6 ;a&gt;=0; a--) {PORTB=led[a];delay_ms(50);};حال اگر بخواهیم همه ال ای دی ها با هم روشن و خاموش شوند ابتدا باید همه ال ای دی ها را در حالت روشن قرار داد سپس یک وقفه داد تا نمایش داده بشوند و پس از آن همه ال ای دی ها را در حالت خاموش قرار داد و دوباره وقفه برای نمایش. برای تکرار این عملیات هم می توان این کار را در یک حلقه for قرار داد:for(a=0; a&lt;4; a++){PORTB=0b11111111;delay_ms(50);PORTB=0b00000000;delay_ms(50);};حال می خواهیم ال ای دی ها را یک در میان روشن و خاموش کنیم برای این کار ابتدا وضعیت هر پایه ال ای دی را یکی در میان 01 می کنیم و بعد 10 به صورت زیر:for(a=0; a&lt;4; a++) {PORTB=0b01010101;delay_ms(50);PORTB=0b10101010;delay_ms(50);};در دو حالت بالا که می خواستیم ال ای دی ها همزمان یا یک در میان روشن شوند ما در شرط حلقه a&lt;4  قرار دادیم که این یک مقدار دلخواه می‌باشد و تعداد تکرار عملیات را مشخص می‌سازد و. در مثال یکی مانده به آخر ال ای دی ها 4 بار خاموش و روشن می‌شوند و در مثال آخر هم 4 بار یکی در میان روشن و خاموش می‌شوند.در این حالت نیز ال ای دی ها دوتا درمیان خاموش و روشن می‌شوند:for(a=0;a&lt;4;a++){PORTB=0b11001100;delay_ms(50);PORTB=0b00110011;delay_ms(50);};اکنون کار کدنویسی تمام شده است و اگر بخواهیم همه کد های بالا را به ترتیب پشت سر هم اجرا کنیم قطعه کد ما در نهایت به شکل زیر می‌باشد:مرحله چهارمبعد از اتمام کد نویسی در نوار بالای صفحه روی گزینه Build All Project file را کلیک می‌کنیم اگر کدها را درست وارد کرده باشیم در پایین صفحه هیچ پیغام خطایی وجود نخواهد داشت در غیر این صورت باید خطا را رفع کنیم.PROTEUSحالا نوبت به کار با Proteus می رسد و ما باید مدار را شبیه سازی کنیم.نرم افزار Proteus را اجرا می‌کنیم و از قسمت بالای صفحه سمت چپ روی File =&gt; New Project کلیک می‌کنیم و در پنجره باز شده نام پروژه و محل ذخیره سازی پروژه را مشخص می‌کنیم .مراحل بعدی را بدون تغییر بر روی next کلیک می‌کنیم.و در نهایت بر روی finish کلیک می‌کنیم.داخل برنامه بر روی p  کلیک می کنیم.حال در پنجره باز شده در قسمت keywords نام قطعاتی که لازم داریم را جستجو کرده و به پروژه اضافه می کنیم. ما باید میکرو Atmega32، Res، Led را همانند شکل زیر به پروژه اضافه نمائیم.مرحله پنجمحال نوبت به بستن مدار می باشد که اتصالات به شکل زیر   هستند.مرحله ششمبر روی میکروکنترلر atmega32 دابل کلیک می‌کنیم، پنجره زیر باز می‌شود و در آنجا فایل برنامه نویسی شده را به آن معرفی می‌کنیم تا برنامه اجرا شود:مرحله هفتمدر آخر مداری را که بستیم رو اجرا می کنیم، مطابق شکل زیر:مرحله هشتمامیدوارم که استفاده لازم رو برده باشید.</description>
                <category>محمدحسین کاکا</category>
                <author>محمدحسین کاکا</author>
                <pubDate>Thu, 28 May 2020 23:37:08 +0430</pubDate>
            </item>
            </channel>
</rss>