RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي

В آخري مضمون اسان RabbitMQ ڪلسترنگ کي غلطي رواداري ۽ اعلي دستيابي لاءِ ڏٺو. ھاڻي اچو ته اپاچي ڪافڪا ۾ گھيرو.

هتي نقل جو يونٽ ورهاڱو آهي. هر موضوع ۾ هڪ يا وڌيڪ سيڪشن آهن. هر سيڪشن ۾ هڪ اڳواڻ آهي پيروڪار سان يا بغير. جڏهن هڪ موضوع ٺاهي، توهان ورهاڱي جو تعداد ۽ نقل جي گنجائش بيان ڪريو. عام قدر 3 آهي، جنهن جو مطلب آهي ٽي نقل: هڪ اڳواڻ ۽ ٻه پيروڪار.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 1. چار حصا ٽن بروکرز ۾ ورهايل آھن

سڀ پڙهڻ ۽ لکڻ جي درخواست ليڊر ڏانهن وڃو. پيروڪار وقتي طور تي ليڊر کي تازو پيغام حاصل ڪرڻ لاءِ درخواستون موڪليندا آهن. صارفين ڪڏهن به پيروڪار ڏانهن رخ نه ڪندا آهن؛ بعد ۾ صرف بيڪار ۽ غلطي رواداري لاء موجود آهن.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي

ورهاڱي جي ناڪامي

جڏهن هڪ بروکر ناڪام ٿئي ٿو، ڪيترن ئي حصن جا اڳواڻ اڪثر ناڪام ٿيندا آهن. انهن مان هر هڪ ۾، هڪ پيروڪار ٻئي نوڊ کان اڳواڻ بڻجي ويندو آهي. حقيقت ۾، اهو هميشه معاملو ناهي، ڇو ته هم وقت سازي جو عنصر پڻ اثر انداز ڪري ٿو: ڇا اتي هم وقت سازي پيروڪار آهن، ۽ جيڪڏهن نه، ته پوء ڇا هڪ غير هم وقت سازي واري نقل کي تبديل ڪرڻ جي اجازت آهي. پر اچو ته هاڻي شين کي پيچيده نه ڪريون.

بروکر 3 نيٽ ورڪ ڇڏي ٿو، ۽ بروکر 2 تي سيڪشن 2 لاءِ نئون ليڊر چونڊيو ويو آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 2. بروکر 3 مري ويو ۽ بروکر 2 تي سندس پوئلڳ ورهاڱي 2 جو نئون اڳواڻ چونڊيو ويو

پوءِ بروکر 1 ڇڏي ٿو ۽ سيڪشن 1 پڻ پنهنجو ليڊر وڃائي ٿو، جنهن جو ڪردار بروکر 2 ڏانهن وڃي ٿو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 3. اتي ھڪڙو بروکر رھيو آھي. سڀئي اڳواڻ هڪ بروکر تي آهن صفر بيدليءَ سان

جڏهن بروکر 1 واپس آن لائن اچي ٿو، اهو چار پوئلڳن کي شامل ڪري ٿو، هر ورهاڱي کي ڪجهه بيڪار فراهم ڪري ٿو. پر سڀئي اڳواڻ اڃا تائين بروکر 2 تي رهيا.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 4. اڳواڻن بروکر تي رهي ٿو 2

جڏهن بروکر 3 اچي ٿو، اسان هر ورهاڱي جي ٽن نقلن ڏانهن واپس آهيون. پر سڀئي اڳواڻ اڃا تائين بروکر 2 تي آهن.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 5. بروکرز 1 ۽ 3 جي بحالي کان پوء اڳواڻن جي غير متوازن پوزيشن

ڪافڪا وٽ RabbitMQ کان بهتر ليڊر ريبلانسنگ جو اوزار آهي. اتي، توھان کي ھڪڙي ٽئين پارٽي پلگ ان يا اسڪرپٽ استعمال ڪرڻو پوندو جيڪو لڏپلاڻ دوران بيڪار گھٽائڻ سان ماسٽر نوڊ لڏپلاڻ لاءِ پاليسيون تبديل ڪيو. ان کان علاوه، وڏي قطار لاء اسان کي هم وقت سازي جي دوران غير موجودگي کي قبول ڪرڻو پوندو.

ڪافڪا وٽ ليڊر رول لاءِ ”ترجيح ٿيل نقل“ جو تصور آهي. جڏهن موضوع جي ورهاڱي ٺاهي رهيا آهن، ڪافڪا اڳواڻن کي هڪجهڙائي سان نوڊس ۾ ورهائڻ جي ڪوشش ڪري ٿو ۽ انهن پهرين اڳواڻن کي ترجيح ڏني وئي آهي. وقت سان گڏ، سرور ريبوٽ، ناڪامي، ۽ رابطي جي ڀڃڪڙي جي ڪري، اڳواڻن ٻين نوڊس تي ختم ٿي سگھي ٿو، جيئن مٿي بيان ڪيل انتهائي صورت ۾.

هن کي درست ڪرڻ لاءِ، ڪافڪا پيش ڪري ٿو ٻه آپشن:

  • اختيار auto.leader.rebalance.enable=سچو ڪنٽرولر نوڊ کي اجازت ڏئي ٿو ته خودڪار طور تي اڳواڻن کي ٻيهر ترجيح ڏني وڃي ۽ ان سان گڏ يونيفارم ورڇ بحال ڪري.
  • منتظم اسڪرپٽ هلائي سگھي ٿو kafka-preferred-replica-election.sh دستي ٻيهر تفويض لاء.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 6. rebalancing کان پوء replicas

هي ناڪامي جو هڪ آسان نسخو هو، پر حقيقت وڌيڪ پيچيده آهي، جيتوڻيڪ هتي ڪجھ به پيچيده ناهي. اهو سڀ ڪجهه هم وقت سازي ٿيل نقلن تي اچي ٿو (In-Sync Replicas، ISR).

هم وقت سازي (ISR)

هڪ ISR هڪ ورهاڱي جي نقلن جو هڪ سيٽ آهي جنهن کي سمجهيو ويندو آهي "هم وقت سازي" (in-sync). رهبر آهي، پر پيروڪار نه آهن. هڪ پيروڪار کي هم وقت سازي سمجهيو ويندو آهي جيڪڏهن اهو وقفو ختم ٿيڻ کان اڳ سڀني ليڊر جي پيغامن جون صحيح ڪاپيون ٺاهي چڪو آهي replica.lag.time.max.ms.

هڪ پيروڪار ISR سيٽ تان هٽايو ويو آهي جيڪڏهن اهو:

  • وقفي لاءِ چونڊڻ جي درخواست نه ڪئي replica.lag.time.max.ms (موت سمجهي)
  • وقفي دوران اپڊيٽ ڪرڻ جو انتظام نه ڪيو replica.lag.time.max.ms (سست سمجهيو ويندو)

پوئلڳ وقفي ۾ نموني جون درخواستون ٺاهيندا آهن replica.fetch.wait.max.ms، جيڪو ڊفالٽ 500ms تائين.

واضح طور تي ISR جي مقصد کي بيان ڪرڻ لاء، اسان کي پروسيسر کان تصديق ۽ ڪجهه ناڪامي منظرنامن کي ڏسڻ جي ضرورت آهي. پروڊڪٽر چونڊي سگھن ٿا جڏهن بروکر تصديق موڪلي ٿو:

  • acks = 0، تصديق نه موڪلي وئي آهي
  • acks = 1، تصديق موڪلي وئي آهي ليڊر پنهنجي مقامي لاگ ڏانهن هڪ پيغام لکيو آهي
  • acks = سڀ، تصديق موڪلي ويندي آهي جڏهن ISR ۾ سڀني نقلن کي مقامي لاگن ڏانهن پيغام لکيو آهي

ڪافڪا جي اصطلاح ۾، جيڪڏهن ISR هڪ پيغام محفوظ ڪيو آهي، اهو "عزم" آهي. Acks = سڀ کان محفوظ اختيار آهي، پر اضافي دير پڻ شامل ڪري ٿو. اچو ته ڏسو ناڪامي جا ٻه مثال ۽ ڪيئن مختلف 'acks' آپشن ISR تصور سان لهه وچڙ ۾ اچن ٿا.

Acks = 1 ۽ ISR

هن مثال ۾، اسان ڏسندا سين ته جيڪڏهن اڳواڻ انتظار نٿو ڪري ته هر پيغام کي سڀني پوئلڳن کان بچايو وڃي، پوء ڊيٽا نقصان ممڪن آهي جيڪڏهن اڳواڻ ناڪام ٿئي. هڪ غير هم وقت ٿيل پيروڪار ڏانهن وڃڻ کي سيٽنگ ذريعي فعال يا غير فعال ڪري سگهجي ٿو unclean.leader.election.enable.

هن مثال ۾، ڪارخانو آهي قدر acks = 1. سيڪشن سڀني ٽن بروکرز ۾ ورهايل آهي. بروکر 3 پويان آهي، اهو اٺ سيڪنڊ اڳ ليڊر سان هم وقت ساز ٿيو ۽ هاڻي 7456 پيغامن جي پويان آهي. بروکر 1 صرف هڪ سيڪنڊ جي پويان هو. اسان جو پروڊيوسر هڪ پيغام موڪلي ٿو ۽ جلدي هڪ ايڪ واپس وصول ڪري ٿو، بغير سست يا مئل پوئلڳن جي مٿي کان سواء جيڪو اڳواڻ انتظار نه ڪري رهيو آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 7. ٽي replicas سان ISR

بروکر 2 ناڪام ٿئي ٿو ۽ پيدا ڪندڙ کي ڪنيڪشن جي غلطي ملي ٿي. قيادت کان پوء بروکر 1 ڏانهن گذري ٿو، اسان 123 پيغام وڃائي ڇڏيو. بروکر 1 تي پيروڪار ISR جو حصو هو، پر مڪمل طور تي ليڊر سان هم وقت سازي نه ڪئي وئي جڏهن اهو گر ٿي ويو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 8. پيغام گم ٿي ويا آهن جڏهن اهو حادثو

ترتيب ۾ bootstrap.servers ٺاهيندڙ وٽ ڪيترائي بروکر درج ٿيل آهن ۽ ڪنهن ٻئي بروکر کان پڇي سگهن ٿا جيڪو نئون سيڪشن ليڊر آهي. اهو وري بروکر 1 سان ڪنيڪشن قائم ڪري ٿو ۽ پيغام موڪلڻ جاري رکي ٿو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 9. پيغام موڪلڻ ٿوري وقفي کان پوءِ ٻيهر شروع ٿئي ٿو

بروکر 3 اڃا به پوئتي آهي. اهو درخواستون آڻيندو پر هم وقت سازي نٿو ڪري سگهي. اهو ٿي سگهي ٿو بروڪرز جي وچ ۾ سست نيٽ ورڪ ڪنيڪشن، اسٽوريج مسئلو، وغيره. اهو ISR مان هٽايو ويو آهي. هاڻي ISR هڪ نقل تي مشتمل آهي - اڳواڻ! ٺاهيندڙ پيغام موڪلڻ ۽ تصديق حاصل ڪرڻ جاري رکي ٿو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 10. بروکر 3 تي پوئلڳ ISR مان هٽايو ويو آهي

بروکر 1 هيٺ ٿي وڃي ٿو ۽ قيادت جو ڪردار بروکر 3 ڏانهن وڃي ٿو 15286 پيغامن جي نقصان سان! ٺاهيندڙ هڪ ڪنيڪشن غلطي پيغام وصول ڪري ٿو. ISR کان ٻاهر اڳواڻ ڏانهن منتقلي صرف سيٽنگ جي ڪري ئي ممڪن هئي unclean.leader.election.enable=سچو. جيڪڏهن اهو نصب ٿيل آهي ڪوڙي، پوءِ منتقلي نه ٿيندي ۽ سڀ پڙهڻ ۽ لکڻ جون درخواستون رد ڪيون وينديون. انهي صورت ۾، اسان بروکر 1 جو انتظار ڪريون ٿا ته واپسي ۾ پنهنجي برقرار ڊيٽا سان گڏ، جيڪو ٻيهر قيادت تي قبضو ڪندو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 11. بروکر 1 پوي ٿو. جڏهن هڪ ناڪامي ٿئي ٿي، پيغامن جو وڏو تعداد گم ٿي ويو آهي

پيدا ڪندڙ آخري بروکر سان رابطو قائم ڪري ٿو ۽ ڏسي ٿو ته هو هاڻي سيڪشن جو اڳواڻ آهي. هو بروکر 3 ڏانهن پيغام موڪلڻ شروع ڪري ٿو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 12. ٿوري وقفي کان پوءِ، پيغام ٻيهر موڪليا ويندا سيڪشن 0 ڏانهن

اسان ڏٺو ته، نوان ڪنيڪشن قائم ڪرڻ ۽ نئين ليڊر جي ڳولا لاءِ مختصر رڪاوٽن کان سواءِ، ٺاهيندڙ مسلسل پيغام موڪلي رهيو هو. هي تشڪيل استحڪام جي خرچ تي دستيابي کي يقيني بڻائي ٿو (ڊيٽا سيڪيورٽي). ڪافڪا هزارين نياپا وڃائي ڇڏيا پر نئين لکڻين کي قبول ڪرڻ جاري رکيو.

Acks = سڀ ۽ ISR

اچو ته هن منظر کي ٻيهر ورجائي، پر سان acks = سڀ. بروکر 3 وٽ چار سيڪنڊن جي سراسري ويڪرائي آھي. ٺاهيندڙ هڪ پيغام موڪلي ٿو acks = سڀ، ۽ ھاڻي تڪڙو جواب نٿو ملي. اڳواڻ انتظار ڪري ٿو پيغام کي محفوظ ڪيو وڃي ISR ۾ سڀني نقلن طرفان.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 13. ISR ٽن replicas سان. ھڪڙو سست آھي، نتيجي ۾ رڪارڊنگ ۾ دير ٿي

اضافي دير جي چئن سيڪنڊن کان پوء، بروکر 2 هڪ ack موڪلي ٿو. سڀئي نقل هاڻي مڪمل طور تي اپڊيٽ ٿيل آهن.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 14. سڀ replicas پيغام محفوظ ۽ ack موڪليو

بروکر 3 هاڻي وڌيڪ پوئتي پوي ٿو ۽ ISR کان هٽايو ويو آهي. دير سان خاص طور تي گھٽجي وئي آهي ڇو ته ISR ۾ ڪا به سست ريپليڪس باقي نه رهي آهي. بروکر 2 هاڻي صرف بروکر 1 جو انتظار ڪري ٿو، ۽ هن وٽ 500 ايم ايس جي اوسط وقف آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 15. بروکر 3 تي نقل ISR مان هٽايو ويو آهي

پوء بروکر 2 پوي ٿو ۽ قيادت پيغامن جي نقصان کان سواء بروکر 1 ڏانهن گذري ٿو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 16. بروکر 2 پوي ٿو

ٺاهيندڙ هڪ نئون اڳواڻ ڳولي ٿو ۽ کيس پيغام موڪلڻ شروع ڪري ٿو. ويڪرائي وڌيڪ گھٽجي وئي آهي ڇو ته ISR هاڻي هڪ نقل تي مشتمل آهي! تنهن ڪري اختيار acks = سڀ بيڪار اضافو نه ڪندو آھي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 17. بروکر 1 تي نقل پيغامن کي وڃائڻ کان سواءِ اڳواڻي وٺندي آهي

پوءِ بروکر 1 حادثو ٿيو ۽ ليڊ 3 پيغامن جي نقصان سان بروکر 14238 ڏانهن وڃي ٿو!

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 18. بروکر 1 مري ويو ۽ قيادت جي منتقلي ناپاڪ سيٽنگ سان وسيع ڊيٽا جي نقصان ۾ نتيجا

اسان اختيار کي انسٽال نه ڪري سگهياسين unclean.leader.election.enable معنيٰ ۾ سچ. ڊفالٽ طور اهو برابر آهي ڪوڙي. سيٽنگون acks = سڀ с unclean.leader.election.enable=سچو ڪجهه شامل ڪيل ڊيٽا سيڪيورٽي سان رسائي فراهم ڪري ٿي. پر جيئن توهان ڏسي سگهو ٿا، اسان اڃا تائين پيغام وڃائي سگهون ٿا.

پر ڇا جيڪڏهن اسان چاهيون ٿا ڊيٽا سيڪيورٽي کي وڌائڻ لاءِ؟ توهان وجهي سگهو ٿا unclean.leader.election.enable = غلط، پر اهو ضروري ناهي ته اسان کي ڊيٽا جي نقصان کان بچائي. جيڪڏهن اڳواڻ سخت ٿي ويو ۽ ان سان گڏ ڊيٽا ورتو، پوء پيغام اڃا تائين گم ٿي ويا آهن، ۽ دستيابي گم ٿي ويندي جيستائين منتظم صورتحال کي بحال ڪري.

اهو بهتر آهي ته پڪ ڪريو ته سڀئي پيغام بيڪار آهن، ۽ ٻي صورت ۾ رڪارڊنگ کي رد ڪريو. پوء، گهٽ ۾ گهٽ بروکر جي نقطي نظر کان، ڊيٽا نقصان صرف ٻن يا وڌيڪ هڪ ئي وقت جي ناڪامي جي صورت ۾ ممڪن آهي.

Acks = سڀ، min.insync.replicas ۽ ISR

موضوع جي ترتيب سان min.insync.replicas اسان ڊيٽا سيڪيورٽي جي سطح وڌائي رهيا آهيون. اچو ته پوئين منظر جي آخري حصي جي ذريعي وڃو، پر هن ڀيري سان min.insync.replicas=2.

تنهن ڪري بروکر 2 وٽ هڪ ريپليڪا ليڊر آهي ۽ بروکر 3 تي پوئلڳ ISR مان هٽايو ويو آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 19. ISR ٻن replicas مان

بروکر 2 پوي ٿو ۽ قيادت پيغامن جي نقصان کان سواء بروکر 1 ڏانهن گذري ٿو. پر هاڻي ISR صرف هڪ نقل تي مشتمل آهي. اهو رڪارڊ حاصل ڪرڻ لاءِ گهٽ ۾ گهٽ نمبر پورو نٿو ڪري، ۽ تنهن ڪري بروکر غلطي سان لکڻ جي ڪوشش جو جواب ڏئي ٿو NotEnoughReplicas.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 20. ISRs جو تعداد min.insync.replicas ۾ بيان ڪيل کان گھٽ آھي

هي تشڪيل استحڪام لاء دستيابي کي قربان ڪري ٿو. پيغام کي مڃڻ کان اڳ، اسان پڪ ڪريون ٿا ته اهو گهٽ ۾ گهٽ ٻن نقلن ڏانهن لکيل آهي. اهو ٺاهيندڙ کي وڌيڪ اعتماد ڏئي ٿو. هتي، پيغام جو نقصان صرف ممڪن آهي جيڪڏهن ٻه نقل هڪ ئي وقت ۾ هڪ مختصر وقفي ۾ ناڪام ٿي وڃن جيستائين پيغام هڪ اضافي پيروڪار ڏانهن نقل نه ڪيو وڃي، جيڪو ممڪن ناهي. پر جيڪڏهن توهان سپر پارنائڊ آهيو، ته توهان ريپليڪشن فيڪٽر کي 5 تائين سيٽ ڪري سگهو ٿا، ۽ min.insync.replicas پاران 3. هتي ٽي بروڪرز کي هڪ ئي وقت گر ٿيڻو پوندو رڪارڊ وڃائڻ لاءِ! يقينا، توهان اضافي ويڪرائي ۾ هن اعتماد جي لاء ادا ڪندا آهيو.

جڏهن ڊيٽا سيڪيورٽي لاء رسائي ضروري آهي

تيئن ۾ RabbitMQ سان ڪيس, ڪڏهن ڪڏهن رسائي ضروري آهي ڊيٽا سيڪيورٽي لاء. هتي آهي توهان کي سوچڻ جي ضرورت آهي:

  • ڇا پبلشر صرف هڪ غلطي واپس ڪري سگهي ٿو ۽ اپ اسٽريم سروس يا صارف کي بعد ۾ ٻيهر ڪوشش ڪري سگهي ٿو؟
  • ڇا پبلشر پيغام کي مقامي طور تي يا ڊيٽابيس ۾ محفوظ ڪري سگھي ٿو ته پوءِ ٻيهر ڪوشش ڪري؟

جيڪڏهن جواب نه آهي، ته پوءِ دستيابي کي بهتر بڻائڻ ڊيٽا جي حفاظت کي بهتر بڻائي ٿو. جيڪڏهن توهان رڪارڊ نه ڪرڻ جي بدران دستيابي کي چونڊيو ته توهان گهٽ ڊيٽا وڃائي ويهندا. ان ڪري، اهو سڀ ڪجهه اچي ٿو توازن ڳولڻ لاء، ۽ فيصلو مخصوص صورتحال تي منحصر آهي.

ISR جي معني مان مراد

ISR سوٽ توهان کي ڊيٽا جي حفاظت ۽ دير جي وچ ۾ بهترين توازن چونڊڻ جي اجازت ڏئي ٿو. مثال طور، اڪثريت جي نقلن جي ناڪامي جي صورت ۾ دستيابي کي يقيني بڻائي، دير جي لحاظ کان مئل يا سست ريپليڪس جي اثر کي گھٽائڻ.

اسان پنهنجو مطلب پاڻ چونڊيندا آهيون replica.lag.time.max.ms توهان جي ضرورتن مطابق. لازمي طور تي، هن پيٽرولر جو مطلب آهي ته اسان ڪيتري دير سان قبول ڪرڻ لاء تيار آهيون جڏهن acks = سڀ. ڊفالٽ قدر ڏهه سيڪنڊ آهي. جيڪڏهن اهو توهان لاء تمام ڊگهو آهي، توهان ان کي گهٽائي سگهو ٿا. پوءِ ISR ۾ تبديلين جي تعدد وڌندي، ڇو ته پوئلڳن کي هٽايو ويندو ۽ گهڻو ڪري شامل ڪيو ويندو.

RabbitMQ صرف آئيني جو هڪ سيٽ آهي جنهن کي نقل ڪرڻ جي ضرورت آهي. سست آئيني اضافي دير سان متعارف ڪرايو، ۽ مئل آئيني انتظار ڪري سگھن ٿا جيستائين پيڪيٽس جيڪي جواب ڏيڻ لاء هر نوڊ (نيٽ ٽڪ) جي دستيابي جي جانچ ڪن. ISR انهن ويڪرائي مسئلن کان بچڻ لاء هڪ دلچسپ طريقو آهي. پر اسان خطري کي وڃائڻ جو خطرو آهي ڇو ته ISR صرف ليڊر ڏانهن ڇڪي سگهي ٿو. ھن خطري کان بچڻ لاء، سيٽنگ استعمال ڪريو min.insync.replicas.

ڪلائنٽ ڪنيڪشن جي ضمانت

سيٽنگون ۾ bootstrap.servers ٺاهيندڙ ۽ صارف ڪيترن ئي بروکرز کي ڪلائنٽ سان ڳنڍڻ لاء وضاحت ڪري سگھن ٿا. خيال اهو آهي ته جڏهن هڪ نوڊ هيٺ ٿي وڃي ٿو، اتي ڪيترائي فالتو بچيا آهن جن سان ڪلائنٽ ڪنيڪشن کولي سگهي ٿو. اهي ضروري طور تي سيڪشن ليڊر نه آهن، پر صرف شروعاتي لوڊ ڪرڻ لاء هڪ اسپرنگ بورڊ. ڪلائنٽ انهن کان پڇي سگھي ٿو ته ڪهڙو نوڊ هوسٽ ڪري ٿو ريڊ/لائيٽ ورشن ليڊر.

RabbitMQ ۾، گراهڪ ڪنهن به نوڊ سان ڳنڍي سگهن ٿا، ۽ اندروني روٽنگ درخواست موڪلي ٿو جتي ان کي وڃڻ جي ضرورت آهي. هن جو مطلب آهي ته توهان RabbitMQ جي سامهون هڪ لوڊ بيلنس انسٽال ڪري سگهو ٿا. ڪافڪا کي ضرورت آهي ته گراهڪن کي نوڊ سان ڳنڍڻ لاءِ جيڪو لاڳاپيل ورهاڱي جي اڳواڻ کي ميزبان ڪري ٿو. اهڙي صورتحال ۾، توهان لوڊ بيلنسر انسٽال نٿا ڪري سگهو. فهرست bootstrap.servers اهو نازڪ آهي ته گراهڪ ناڪامي کان پوءِ صحيح نوڊس تائين رسائي ۽ ڳولي سگهن ٿا.

ڪافڪا اتفاق آرڪيٽيڪچر

هينئر تائين، اسان غور نه ڪيو آهي ته ڪيئن ڪلستر بروکر جي زوال جي باري ۾ سکندو آهي ۽ ڪيئن هڪ نئون اڳواڻ چونڊيو ويندو آهي. سمجھڻ لاءِ ته ڪفڪا نيٽ ورڪ ورهاڱي سان ڪيئن ڪم ڪري ٿو، توھان کي پھريائين سمجھڻ جي ضرورت آھي اتفاق آرڪيٽيڪچر.

هر ڪافڪا ڪلسٽر کي زوڪيپر ڪلسٽر سان گڏ لڳايو ويو آهي، جيڪا هڪ تقسيم ڪيل اتفاق راءِ جي خدمت آهي جيڪا نظام کي اجازت ڏئي ٿي ته ڪنهن ڏنل رياست تي اتفاق راءِ تائين پهچي، دستيابي تي تسلسل کي ترجيح ڏئي. زوڪيپر نوڊس جي اڪثريت جي رضامندي جي ضرورت آهي پڙهڻ ۽ لکڻ جي عملن کي منظور ڪرڻ لاء.

Zookeeper ڪلستر جي حالت کي محفوظ ڪري ٿو:

  • عنوانن جي فهرست، سيڪشن، ترتيب، موجوده ليڊر نقل، ترجيحي نقل.
  • ڪلستر ميمبر. هر بروکر زوڪيپر ڪلستر کي پنگ ڪري ٿو. جيڪڏهن اهو مخصوص وقت جي اندر پنگ حاصل نٿو ڪري، ته پوءِ زوڪيپر بروکر کي غير دستياب طور رڪارڊ ڪري ٿو.
  • ڪنٽرولر لاء مکيه ۽ اضافي نوڊس کي چونڊيو.

ڪنٽرولر نوڊ ڪافڪا بروکرز مان هڪ آهي جيڪو ريپليڪا اڳواڻن کي چونڊڻ جو ذميوار آهي. Zookeeper ڪلسٽر رڪنيت ۽ موضوع جي تبديلين بابت ڪنٽرولر کي اطلاع موڪلي ٿو، ۽ ڪنٽرولر کي انهن تبديلين تي عمل ڪرڻ گهرجي.

مثال طور، اچو ته هڪ نئون موضوع وٺون ڏهن ورهاڱي سان ۽ 3 جي هڪ ريپليڪيشن فيڪٽر سان. ڪنٽرولر کي هر ورهاڱي لاءِ هڪ ليڊر چونڊڻو پوندو، ڪوشش ڪري اڳواڻن کي بروڪرز جي وچ ۾ بهتر نموني ورهائڻ جي.

هر سيڪشن ڪنٽرولر لاءِ:

  • Zookeeper ۾ ISR ۽ اڳواڻ بابت معلومات تازه ڪاري؛
  • هر بروکر ڏانهن هڪ ليڊر ۽ آئي ايس آر آرڪمانڊ موڪلي ٿو جيڪو هن ورهاڱي جي هڪ نقل کي ميزباني ڪري ٿو، بروکرز کي ISR ۽ ليڊر بابت ڄاڻ ڏئي ٿو.

جڏهن هڪ بروکر هڪ ليڊر سان پوي ٿو، زوڪيپر ڪنٽرولر ڏانهن هڪ نوٽيفڪيشن موڪلي ٿو، ۽ اهو هڪ نئون اڳواڻ چونڊيندو آهي. ٻيهر، ڪنٽرولر پهريون ڀيرو زوڪيپر کي تازه ڪاري ڪري ٿو ۽ پوء هر بروکر ڏانهن هڪ حڪم موڪلي ٿو انهن کي قيادت جي تبديلي جي اطلاع ڏيڻ.

هر اڳواڻ ISRs کي ڀرتي ڪرڻ جو ذميوار آهي. سيٽنگون replica.lag.time.max.ms اهو طئي ڪري ٿو ته ڪير اتي داخل ٿيندو. جڏهن ISR تبديل ٿئي ٿي، ليڊر نئين معلومات کي زوڪيپر ڏانهن منتقل ڪري ٿو.

Zookeeper کي هميشه ڪنهن به تبديليءَ جي خبر ڏني ويندي آهي ته جيئن ناڪامي جي صورت ۾، انتظاميا آسانيءَ سان نئين ليڊر ڏانهن منتقل ٿئي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 21. ڪافڪا اتفاق

نقل پروٽوڪول

نقل جي تفصيلن کي سمجھڻ ۾ مدد ڪري ٿي توھان کي بھتر سمجھڻ ۾ امڪاني ڊيٽا جي نقصان واري منظرنامي.

نموني جا سوال، لاگ انڊ آف سيٽ (LEO) ۽ هاءِ واٽر مارڪ (HW)

اسان سمجهيو ته پيروڪار وقتي طور تي ليڊر ڏانهن موڪلڻ جون درخواستون موڪليندا آهن. ڊفالٽ وقفو 500ms آهي. هي RabbitMQ کان مختلف آهي ته RabbitMQ ۾ نقل قطار آئيني طرفان نه پر ماسٽر طرفان شروع ڪئي وئي آهي. ماسٽر آئيني ۾ تبديلين کي زور ڏئي ٿو.

ليڊر ۽ سڀئي پوئلڳ محفوظ ڪريو لاگ انڊ آف سيٽ (LEO) ۽ هاءِ واٽر (HW) ليبل. LEO نشان مقامي ريپليڪا ۾ آخري پيغام جي آفسيٽ کي ذخيرو ڪري ٿو، ۽ HW آخري وابستگي جي آفسيٽ کي محفوظ ڪري ٿو. ياد رکو ته وابستگي جي حيثيت لاءِ، پيغام کي لازمي طور تي سڀني ISR نقلن تي جاري رکڻ گهرجي. هن جو مطلب آهي ته LEO عام طور تي HW کان ٿورو اڳتي آهي.

جڏهن اڳواڻ هڪ پيغام وصول ڪري ٿو، اهو مقامي طور تي ذخيرو ڪري ٿو. پيروڪار پنهنجي LEO کي منتقل ڪندي هڪ آڻڻ جي درخواست ڪري ٿو. ليڊر وري هن LEO کان شروع ٿيندڙ پيغامن جو هڪ بيچ موڪلي ٿو ۽ موجوده HW کي پڻ منتقل ڪري ٿو. جڏهن ليڊر کي معلومات ملي ٿي ته سڀني نقلن پيغام کي ڏنل آفسيٽ ۾ محفوظ ڪيو آهي، اهو HW نشان کي منتقل ڪري ٿو. صرف اڳواڻ HW کي منتقل ڪري سگھي ٿو، ۽ تنھنڪري سڀئي پوئلڳ پنھنجي درخواست جي جوابن ۾ موجوده قدر ڄاڻندا. هن جو مطلب اهو آهي ته پوئلڳ شايد اڳواڻ جي پويان پيغام ۽ HW علم ٻنهي ۾ پوئتي هوندا. صارفين صرف موجوده HW تائين پيغام وصول ڪن ٿا.

نوٽ ڪريو ته "مسلسل" جو مطلب آهي ميموري ڏانهن لکيل، نه ڊسڪ ڏانهن. ڪارڪردگي لاء، ڪافڪا هڪ مخصوص وقفي تي ڊسڪ کي هم وقت سازي ڪري ٿو. RabbitMQ وٽ پڻ هڪ وقفو آهي، پر اهو صرف پبلشر ڏانهن هڪ اعتراف موڪليندو جڏهن ماسٽر ۽ سڀني آئيني پيغام کي ڊسڪ ڏانهن لکيو آهي. ڪافڪا ڊولپرز، ڪارڪردگي جي سببن لاء، هڪ پيغام موڪلڻ جو فيصلو ڪيو جيئن ئي ميموري ڏانهن پيغام لکيو ويو آهي. ڪافڪا شرط رکي ٿو ته فالتوت صرف ياداشت ۾ تسليم ٿيل پيغامن کي مختصر طور تي محفوظ ڪرڻ جي خطري کي ختم ڪري ٿي.

اڳواڻ جي ناڪامي

جڏهن هڪ ليڊر اچي ٿو، زوڪيپر ڪنٽرولر کي اطلاع ڏئي ٿو، ۽ اهو هڪ نئين ليڊر ريپليڪا کي چونڊيندو آهي. نئون اڳواڻ پنھنجي LEO جي مطابق ھڪڙو نئون HW نشان ٺاھي ٿو. پوئلڳن کي وري نئين اڳواڻ بابت معلومات ملي ٿي. ڪافڪا جي نسخي تي مدار رکندي، پيروڪار ٻن منظرن مان هڪ کي چونڊيندو:

  1. اهو مقامي لاگ کي سڃاتل HW ڏانهن ڇڪيندو ۽ هن نشان کان پوءِ پيغامن لاءِ نئين ليڊر کي درخواست موڪليندو.
  2. ليڊر کي درخواست موڪليندو ته HW کي معلوم ڪرڻ وقت هن کي ليڊر چونڊيو ويو، ۽ پوء لاگ ان کي هن آفسيٽ ڏانهن ڇڪايو. ان کان پوء هن آفسيٽ تي شروع ٿيندڙ وقتي وصولي جي درخواستون ٺاهڻ شروع ڪندو.

هڪ پيروڪار کي هيٺين سببن جي ڪري لاگ کي ٽوڙڻ جي ضرورت پوندي.

  • جڏهن ڪو اڳواڻ ناڪام ٿئي ٿو، ISR سيٽ ۾ پهريون پيروڪار جيڪو زوڪيپر سان رجسٽر ٿيو آهي، اليڪشن کٽي ٿو ۽ اڳواڻ بڻجي ٿو. ISR تي سڀئي پوئلڳ، جيتوڻيڪ سمجهي رهيا آهن "هم وقت سازي ۾،" شايد اڳوڻي اڳواڻ کان سڀني پيغامن جون ڪاپيون حاصل نه ڪيون هجن. اهو مڪمل طور تي ممڪن آهي ته نمايان پيروڪار وٽ سڀ کان جديد ڪاپي نه هجي. ڪافڪا يقيني بڻائي ٿو ته نقلن جي وچ ۾ ڪوبه فرق نه آهي. اهڙيءَ طرح، اختلافن کان بچڻ لاءِ، هر پيروڪار کي لازمي آهي ته هو پنهنجي لاگ کي ڇنڊڇاڻ ڪري پنهنجي چونڊ جي وقت نئين اڳواڻ جي HW قدر. اهو هڪ ٻيو سبب آهي ته سيٽنگ acks = سڀ تسلسل لاء تمام ضروري آهي.
  • نياپا وقتي طور تي ڊسڪ تي لکيل آهن. جيڪڏهن سڀئي ڪلسٽر نوڊس هڪ ئي وقت ناڪام ٿين ٿا، ته پوءِ مختلف آفسٽن سان نقلون ڊسڪ تي محفوظ ڪيون وينديون. اهو ممڪن آهي ته جڏهن بروکرز آن لائن واپس اچن، نئين ليڊر جيڪو چونڊيو ويندو هو پنهنجي پوئلڳن جي پويان هوندو، ڇاڪاڻ ته هو ٻين کان اڳ ڊسڪ ۾ محفوظ ڪيو ويو هو.

ڪلستر سان ٻيهر اتحاد

ڪلستر ۾ ٻيهر شامل ٿيڻ تي، ريپليڪس ائين ئي ڪندا آهن جيئن ڪو ليڊر ناڪام ٿئي ٿو: اهي ليڊر جي ريپليڪا کي چيڪ ڪن ٿا ۽ انهن جي لاگ کي ان جي HW (چونڊ جي وقت) ڏانهن ڇڪيندا آهن. مقابلي ۾، RabbitMQ هڪجهڙائي سان ٻيهر ملندڙ نوڊس کي مڪمل طور تي نئون سمجهي ٿو. ٻنهي صورتن ۾، بروکر ڪنهن به موجوده رياست کي رد ڪري ٿو. جيڪڏهن خودڪار هم وقت سازي استعمال ٿئي ٿي، پوء ماسٽر کي لازمي طور تي سڀني موجوده مواد کي نئين آئيني ۾ نقل ڪرڻ گهرجي "سڄي دنيا کي انتظار ڪريو" طريقي سان. ماسٽر هن آپريشن دوران ڪنهن به پڙهڻ يا لکڻ جي عمل کي قبول نه ڪندو آهي. اهو طريقو وڏي قطار ۾ مسئلا پيدا ڪري ٿو.

ڪافڪا هڪ ورهايل لاگ آهي ۽ عام طور تي اهو RabbitMQ قطار کان وڌيڪ پيغامن کي محفوظ ڪري ٿو، جتي ڊيٽا پڙهڻ کان پوءِ قطار مان ڪڍيو ويندو آهي. فعال قطارون نسبتا ننڍيون رهڻ گهرجن. پر ڪافڪا هڪ لاگ ان جي پنهنجي برقرار رکڻ واري پاليسي سان آهي، جيڪو ڏينهن يا هفتن جو عرصو مقرر ڪري سگهي ٿو. قطار کي بلاڪ ڪرڻ ۽ مڪمل هم وقت سازي جو طريقو ورهايل لاگ لاء بلڪل ناقابل قبول آهي. ان جي بدران، ڪافڪا جا پيروڪار صرف پنهنجي لاگ کي ليڊر جي HW ڏانهن ڇڪيندا آهن (هن جي چونڊ جي وقت) جيڪڏهن انهن جي ڪاپي اڳواڻ جي اڳيان آهي. وڌيڪ امڪاني صورت ۾، جڏهن پيروڪار پوئتي آهي، اهو صرف پنهنجي موجوده LEO سان شروع ٿيندڙ درخواستون آڻڻ شروع ڪري ٿو.

نوان يا ٻيهر شامل ٿيل پوئلڳ ISR کان ٻاهر شروع ڪن ٿا ۽ ڪمن ۾ حصو نه وٺندا آهن. اهي صرف گروپ سان گڏ ڪم ڪن ٿا، پيغام وصول ڪن ٿا جيترو جلدي ڪري سگهن جيستائين اهي اڳواڻ سان پڪڙي ۽ ISR ۾ داخل ٿين. ڪو به تالا-ان نه آهي ۽ توهان جي سڀني ڊيٽا کي اڇلائڻ جي ڪا ضرورت ناهي.

رابطي جو نقصان

ڪافڪا ۾ RabbitMQ کان وڌيڪ جزا آهن، تنهنڪري ان ۾ وڌيڪ پيچيده رويي جو سيٽ هوندو آهي جڏهن ڪلستر ختم ٿي ويندو آهي. پر ڪافڪا اصل ۾ ڪلسترن لاءِ ٺهيل هئي، تنهن ڪري حل تمام چڱيءَ طرح سوچيا ويا آهن.

هيٺيان ڪيترائي ڪنيڪشن ناڪامي جا منظر آهن:

  • منظر 1: پيروڪار اڳواڻ کي نه ٿو ڏسي، پر اڃا به زوڪيپر کي ڏسي ٿو.
  • منظر 2: ليڊر ڪو به پيروڪار نٿو ڏسي، پر اڃا به زوڪيپر کي ڏسي ٿو.
  • منظر 3: پيروڪار ليڊر کي ڏسي ٿو، پر زوڪيپر کي نٿو ڏسي.
  • منظر 4: اڳواڻ پوئلڳن کي ڏسي ٿو، پر زوڪيپر کي نٿو ڏسي.
  • منظر 5: پيروڪار مڪمل طور تي ٻئي ڪافڪا نوڊس ۽ زوڪيپر کان الڳ آهي.
  • منظر 6: اڳواڻ مڪمل طور تي ٻئي ڪافڪا نوڊس ۽ زوڪيپر کان الڳ آهي.
  • منظر 7: ڪافڪا ڪنٽرولر نوڊ ڪو ٻيو ڪافڪا نوڊ ڏسي نٿو سگهي.
  • منظر 8: ڪافڪا سنڀاليندڙ زوڪيپر کي نٿو ڏسي.

هر منظر جو پنهنجو رويو آهي.

منظر 1: پيروڪار ليڊر کي نه ٿو ڏسي، پر اڃا به زوڪيپر کي ڏسي ٿو

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 22. منظر 1: ٽن نقلن جو ISR

رابطي جي ناڪامي بروکر 3 کي بروکرز 1 ۽ 2 کان جدا ڪري ٿي، پر زوڪيپر کان نه. بروکر 3 هاڻي موڪلڻ جون درخواستون نه ٿو موڪلي سگهي. وقت گذرڻ کان پوءِ replica.lag.time.max.ms اهو ISR مان هٽايو ويو آهي ۽ پيغام جي ڪمن ۾ حصو نه وٺندو آهي. هڪ دفعو ڪنيڪشن بحال ٿي ويندو، اهو ٻيهر شروع ڪندو درخواستون آڻڻ ۽ ISR ۾ شامل ٿيندو جڏهن اهو ليڊر سان ملندو. زوڪيپر پنگ وصول ڪرڻ جاري رکندو ۽ فرض ڪندو ته بروکر زنده ۽ سٺو آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 23. منظر 1: بروکر کي ISR مان هٽايو ويندو آهي جيڪڏهن ان کان ڪا به وصولي جي درخواست نه ملي آهي replica.lag.time.max.ms وقفي ۾

ڪو به تقسيم دماغ يا نوڊ معطلي نه آهي جهڙوڪ RabbitMQ ۾. ان جي بدران، بيروزگاري گهٽجي وئي آهي.

منظر 2: ليڊر ڪو به پيروڪار نٿو ڏسي، پر اڃا به زوڪيپر کي ڏسي ٿو

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 24. منظر 2. اڳواڻ ۽ ٻه پيروڪار

نيٽ ورڪ رابطي ۾ هڪ خرابي اڳواڻ کي پوئلڳن کان جدا ڪري ٿو، پر بروکر اڃا تائين زوڪيپر ڏسي سگهي ٿو. جيئن ته پهرين منظر ۾، ISR ڇڪيندو آهي، پر هن ڀيري صرف ليڊر ڏانهن جيئن سڀئي پيروڪار موڪلڻ جون درخواستون موڪلڻ بند ڪن ٿا. ٻيهر، ڪو به منطقي تقسيم ناهي. ان جي بدران، نون پيغامن لاء بيڪارگي جو نقصان آهي جيستائين ڪنيڪشن بحال ٿئي. زوڪيپر پنگس حاصل ڪرڻ جاري رکي ٿو ۽ مڃي ٿو ته بروکر زنده ۽ سٺو آهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 25. منظر 2. آئي ايس آر صرف ليڊر ڏانهن ڇڪيو آهي

منظر 3. پيروڪار اڳواڻ کي ڏسي ٿو، پر زڪريادار کي نه ٿو ڏسي

پوئلڳ زوڪيپر کان جدا ٿي ويو آهي، پر ليڊر سان بروکر کان نه. نتيجي طور، پيروڪار درخواستون آڻڻ ۽ ISR جو ميمبر ٿيڻ جاري رکي ٿو. Zookeeper هاڻي پنگ حاصل نٿو ڪري ۽ هڪ بروکر حادثي کي رجسٽر ڪري ٿو، پر جيئن ته اهو صرف هڪ پيروڪار آهي، وصولي کان پوء ڪو به نتيجو ناهي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 26. منظر 3: پيروڪار ليڊر ڏانهن موڪلڻ جون درخواستون موڪلڻ جاري رکي ٿو

منظر 4. ليڊر پوئلڳن کي ڏسي ٿو، پر زوڪيپر کي نٿو ڏسي

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 27. منظر 4. اڳواڻ ۽ ٻه پيروڪار

اڳواڻ Zookeeper کان جدا ٿي ويو آهي، پر پوئلڳن سان بروکرز کان نه.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 28. منظر 4: اڳواڻ Zookeeper کان الڳ

ڪجهه وقت کان پوء، Zookeeper هڪ بروکر جي ناڪامي کي رجسٽر ڪندو ۽ ان بابت ڪنٽرولر کي اطلاع ڏيندو. هو پنهنجي پوئلڳن مان هڪ نئون اڳواڻ چونڊيندو. بهرحال اصل ليڊر اهو ئي سوچيندو رهندو ته اهو ليڊر آهي ۽ ان کان داخلائون قبول ڪندو رهندو acks = 1. پوئلڳ هاڻي هن کي موڪلڻ جي درخواستون نه موڪلي رهيا آهن، تنهنڪري هو انهن کي مئل سمجهندو ۽ ISR کي پاڻ ڏانهن ڇڪڻ جي ڪوشش ڪندو. پر جيئن ته ان جو زوڪيپر سان ڪو واسطو نه آهي، اهو ائين ڪرڻ جي قابل نه هوندو، ۽ ان موقعي تي وڌيڪ داخلائن کي قبول ڪرڻ کان انڪار ڪندو.

نياپا acks = سڀ هڪ اعتراف حاصل نه ٿيندو ڇو ته ISR پهريون ڀيرو سڀني نقلن کي چالو ڪري ٿو، ۽ پيغام انهن تائين نه پهچندا آهن. جڏهن اصل اڳواڻ انهن کي ISR مان هٽائڻ جي ڪوشش ڪندو، اهو ائين ڪرڻ ۾ ناڪام ٿيندو ۽ ڪنهن به پيغام کي قبول ڪرڻ کان روڪي ڇڏيندو.

گراهڪ جلد ئي ليڊر ۾ تبديلي کي نوٽيس ڪندا ۽ نئين سرور ڏانهن رڪارڊ موڪلڻ شروع ڪندا. هڪ دفعو نيٽ ورڪ بحال ٿيو، اصل ليڊر ڏسي ٿو ته اهو هاڻي ليڊر نه رهيو آهي ۽ پنهنجي لاگ کي HW قدر تائين ڇڪي ٿو، جيڪا نئين ليڊر جي ناڪاميءَ جي وقت هئي، لاگ ڊورجن کان بچڻ لاءِ. اهو وري نئين ليڊر ڏانهن موڪلڻ جون درخواستون موڪلڻ شروع ڪندو. اصل ليڊر کان سڀئي رڪارڊ جيڪي نئين ليڊر ڏانهن نقل نه ڪيا ويا آهن گم ٿي ويا آهن. اهو آهي، پيغام جيڪي اصل ليڊر طرفان انهن چند سيڪنڊن ۾ تسليم نه ڪيا ويا هئا جڏهن ٻه اڳواڻ ڪم ڪري رهيا هئا.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 29. منظر 4. بروکر 1 تي ليڊر نيٽ ورڪ بحال ٿيڻ کان پوءِ پيروڪار بڻجي ويندو

منظر 5: پيروڪار مڪمل طور تي ٻئي ڪافڪا نوڊس ۽ زوڪيپر کان الڳ آهي

پيروڪار مڪمل طور تي ٻئي ڪافڪا نوڊس ۽ زوڪيپر کان الڳ آهي. هو صرف پنهنجو پاڻ کي ISR کان هٽائي ٿو جيستائين نيٽ ورڪ بحال نه ٿئي، ۽ پوء ٻين سان گڏ پڪڙي.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 30. منظر 5: الڳ ٿيل پوئلڳ ISR مان هٽايو ويو آهي

منظر 6: اڳواڻ مڪمل طور تي ٻئي ڪافڪا نوڊس ۽ زوڪيپر کان الڳ آهي

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 31. منظر 6. اڳواڻ ۽ ٻه پيروڪار

اڳواڻ مڪمل طور تي پنهنجي پوئلڳن، ڪنٽرولر ۽ زوڪيپر کان الڳ ٿي ويو آهي. ٿوري عرصي لاءِ ان مان داخلائون قبول ڪنديون رهنديون acks = 1.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 32. منظر 6: ليڊر کي ٻين ڪافڪا ۽ زوڪيپر نوڊس کان ڌار ڪرڻ

ختم ٿيڻ کان پوءِ درخواستون نه مليون replica.lag.time.max.ms، اهو ISR کي پاڻ ڏانهن ڇڪڻ جي ڪوشش ڪندو، پر ائين ڪرڻ جي قابل نه هوندو ڇو ته زوڪيپر سان ڪو رابطو ناهي، پوء اهو لکڻيون قبول ڪرڻ بند ڪري ڇڏيندو.

ان دوران، زوڪيپر الڳ ٿيل بروکر کي مئل طور نشان لڳايو ۽ ڪنٽرولر هڪ نئون اڳواڻ چونڊيندو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 33. منظر 6. ٻه اڳواڻ

اصل اڳواڻ ڪجھ سيڪنڊن لاءِ داخلائون قبول ڪري سگھي ٿو، پر پوءِ ڪنھن به پيغام کي قبول ڪرڻ بند ڪري ٿو. ڪلائنٽ هر 60 سيڪنڊن ۾ تازه ڪاري ميٽا ڊيٽا سان تازه ڪاري ڪيا ويا آهن. انهن کي ليڊر جي تبديلي جي خبر پئجي ويندي ۽ نئين ليڊر ڏانهن داخلائون موڪلڻ شروع ڪندا.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 34. منظر 6: ٺاهيندڙ نئين ليڊر ڏانهن تبديل ڪن ٿا

سڀ تصديق ٿيل داخلون اصل ليڊر پاران ڪيون ويون آهن جتان ڪنيڪشن جي نقصان ٿي ويندي. هڪ دفعو نيٽ ورڪ بحال ٿيو، اصل ليڊر زوڪيپر ذريعي دريافت ڪندو ته اهو هاڻي ليڊر ناهي رهيو. پوءِ اهو اليڪشن جي وقت نئين ليڊر جي HW ڏانهن لاگ ان کي ٽوڙي ڇڏيندو ۽ پوئلڳ طور درخواستون موڪلڻ شروع ڪندو.

RabbitMQ بمقابلہ ڪافڪا: غلطي رواداري ۽ اعلي دستيابي
چانور. 35. منظر 6: نيٽ ورڪ ڪنيڪشن بحال ٿيڻ کان پوءِ اصل ليڊر هڪ پيروڪار بڻجي ويندو آهي

هن صورتحال ۾، منطقي جدائي ٿوري عرصي لاء ٿي سگهي ٿي، پر صرف جيڪڏهن acks = 1 и min.insync.replicas پڻ 1. منطقي علحدگي خود بخود ختم ٿي ويندي آهي يا ته نيٽ ورڪ بحال ٿيڻ کان پوءِ، جڏهن اصل ليڊر محسوس ڪري ٿو ته هو هاڻي ليڊر نه رهيو آهي، يا جڏهن سڀ گراهڪ محسوس ڪن ٿا ته ليڊر بدلجي ويو آهي ۽ نئين ليڊر ڏانهن لکڻ شروع ڪن ٿا- جيڪو به ٿئي ٿو پهريان. ڪنهن به صورت ۾، ڪجهه پيغام گم ٿي ويندا، پر صرف سان acks = 1.

ھن منظر جو ھڪڙو ٻيو قسم آھي جتي، نيٽ ورڪ جي تقسيم کان اڳ، پوئلڳن جي پويان پئجي ويا ۽ اڳواڻ صرف پاڻ کي ISR کي دٻايو. اهو وري ڪنيڪشن جي نقصان جي ڪري الڳ ٿي ويندو آهي. هڪ نئون اڳواڻ چونڊيو ويو آهي، پر اصل اڳواڻ داخل ٿيڻ کي قبول ڪرڻ جاري رکي ٿو، جيتوڻيڪ acks = سڀ، ڇاڪاڻ ته هن کان سواءِ ايس ايس آر ۾ ٻيو ڪو به ناهي. نيٽ ورڪ بحال ٿيڻ کان پوءِ اهي رڪارڊ گم ٿي ويندا. هن اختيار کان بچڻ جو واحد طريقو آهي min.insync.replicas = 2.

منظر 7: ڪافڪا ڪنٽرولر نوڊ ٻيو ڪافڪا نوڊ نه ڏسي سگھي

عام طور تي، هڪ دفعو ڪافڪا نوڊ سان رابطو گم ٿي ويندو آهي، ڪنٽرولر ان کي ڪنهن به ليڊر جي تبديلي جي معلومات کي منتقل ڪرڻ جي قابل نه هوندو. بدترين صورت ۾، اهو هڪ مختصر مدت جي منطقي علحدگيء جو سبب بڻجندو، جيئن منظر 6 ۾. گهڻو ڪري نه، بروکر صرف قيادت لاء اميدوار نه ٿيندو جيڪڏهن بعد ۾ ناڪام ٿي.

منظر 8: ڪافڪا سنڀاليندڙ زوڪيپر کي نٿو ڏسي

زوڪيپر گريل ڪنٽرولر کان پنگ وصول نه ڪندو ۽ ڪنٽرولر طور هڪ نئون ڪافڪا نوڊ چونڊيو ويندو. اصل ڪنٽرولر پنهنجو پاڻ کي اهڙي طرح پيش ڪرڻ جاري رکي سگهي ٿو، پر اهو Zookeeper کان نوٽيفڪيشن وصول نٿو ڪري، تنهنڪري ان کي انجام ڏيڻ لاءِ ڪو به ڪم نه هوندو. هڪ دفعو نيٽ ورڪ بحال ٿيندو، هن کي احساس ٿيندو ته هو هاڻي ڪنٽرولر نه رهيو آهي، پر هڪ باقاعده ڪافڪا نوڊ بڻجي چڪو آهي.

منظرنامي مان نتيجا

اسان ڏسون ٿا ته پيروڪار رابطي جي نقصان جي نتيجي ۾ پيغام جي نقصان جي نتيجي ۾ نه آهي، پر صرف عارضي طور تي بيڪار گھٽائي ٿي جيستائين نيٽ ورڪ بحال نه ٿئي. اهو، يقينا، ڊيٽا جي نقصان جي ڪري سگھي ٿو جيڪڏهن هڪ يا وڌيڪ نوڊس گم ٿي ويا آهن.

جيڪڏهن ليڊر ڪنيڪشن جي نقصان جي ڪري Zookeeper کان الڳ ٿي وڃي ٿو، ان جي نتيجي ۾ پيغام گم ٿي سگهن ٿا acks = 1. Zookeeper سان رابطي جي کوٽ سبب ٻن اڳواڻن سان مختصر منطقي تقسيم جو سبب بڻيل آهي. اهو مسئلو پيٽرولر ذريعي حل ڪيو ويو آهي acks = سڀ.

نيم min.insync.replicas ٻن يا وڌيڪ نقلن ۾ اضافي اطمينان فراهم ڪري ٿي ته اهڙي مختصر مدت واري منظرنامي جي نتيجي ۾ گم ٿيل پيغام نه هوندا جيئن منظرنامو 6 ۾.

گم ٿيل پيغامن جو خلاصو

اچو ته سڀني طريقن جي فهرست ڏيون ٿا جيڪي توهان ڪيفڪا ۾ ڊيٽا وڃائي سگهو ٿا:

  • ڪنهن به اڳواڻ جي ناڪامي جيڪڏهن پيغامن جي استعمال جي تصديق ڪئي وئي acks = 1
  • قيادت جي ڪا به ناپاڪ منتقلي، اهو آهي، ISR کان ٻاهر هڪ پيروڪار ڏانهن، جيتوڻيڪ ان سان گڏ acks = سڀ
  • زوڪيپر کان ليڊر کي الڳ ڪرڻ جيڪڏهن پيغامن جي استعمال جي تصديق ڪئي وئي acks = 1
  • اڳواڻ جي مڪمل اڪيلائي جنهن اڳ ۾ ئي ISR گروپ کي پاڻ ڏانهن ڇڪايو آهي. سڀ نياپا گم ٿي ويندا، ايستائين acks = سڀ. اهو صرف صحيح آهي جيڪڏهن min.insync.replicas=1.
  • سڀني ورهاڱي جي نوڊس جي هڪ ئي وقت ۾ ناڪامي. ڇاڪاڻ ته پيغام ميموري مان تسليم ڪيا ويا آهن، ڪجهه اڃا تائين ڊسڪ تي نه لکيا ويندا آهن. سرورز کي ريبوٽ ڪرڻ کان پوءِ، ڪجھ پيغام غائب ٿي سگھن ٿا.

ناپاڪ قيادت جي منتقلي کان بچي سگهجي ٿو يا ته انهن کي منع ڪرڻ يا گهٽ ۾ گهٽ ٻن بيڪارين کي يقيني بڻائي. سڀ کان وڌيڪ پائيدار جوڙجڪ هڪ ميلاپ آهي acks = سڀ и min.insync.replicas 1 کان مٿي.

RabbitMQ ۽ Kafka جي reliability جو سڌو مقابلو

قابل اعتماد ۽ اعلي دستيابي کي يقيني بڻائڻ لاء، ٻئي پليٽ فارم هڪ بنيادي ۽ ثانوي نقل واري نظام کي لاڳو ڪن ٿا. بهرحال، RabbitMQ وٽ هڪ Achilles heel آهي. جڏهن ناڪامي کان پوء ٻيهر ڳنڍڻ، نوڊس انهن جي ڊيٽا کي رد ڪري ٿو ۽ هم وقت سازي کي روڪيو ويو آهي. هي ٻٽي وارم RabbitMQ ۾ وڏين قطارن جي ڊگهي عمر کي سوال ۾ سڏي ٿو. توهان کي قبول ڪرڻو پوندو يا ته گهٽجي وڃڻ واري بيڪار يا ڊگهي بلاڪنگ وقت. بيڪارگي کي گھٽائڻ وڏي ڊيٽا جي نقصان جو خطرو وڌائي ٿو. پر جيڪڏهن قطارون ننڍيون آهن، ته پوءِ بيڪاريءَ جي خاطر، مختصر عرصي جي غير موجودگيءَ (چند سيڪنڊن) کي بار بار ڪنيڪشن جي ڪوششن سان حل ڪري سگهجي ٿو.

ڪافڪا کي اهو مسئلو ناهي. اهو صرف ليڊر ۽ پيروڪار جي وچ ۾ تڪرار جي نقطي کان ڊيٽا کي رد ڪري ٿو. سڀ حصيداري ڊيٽا محفوظ ڪئي وئي آهي. ان کان سواء، نقل سسٽم کي بلاڪ نٿو ڪري. ليڊر پوسٽون قبول ڪرڻ جاري رکي ٿو جڏهن ته نئون پوئلڳ پڪڙي ٿو، تنهنڪري ڊيوپس لاء، ڪلستر ۾ شامل ٿيڻ يا ٻيهر شامل ٿيڻ هڪ ننڍڙو ڪم بڻجي ويندو آهي. يقينن، اڃا به مسئلا آهن جهڙوڪ نيٽ ورڪ بينڊوڊٿ نقل جي دوران. جيڪڏهن توهان هڪ ئي وقت ڪيترن ئي پوئلڳن کي شامل ڪيو ٿا، توهان شايد بينڊوڊٿ جي حد کي منهن ڏئي سگهو ٿا.

RabbitMQ قابل اعتماد ۾ ڪافڪا کان بهتر آهي جڏهن هڪ ئي وقت ڪلستر ۾ ڪيترائي سرور ناڪام ٿين ٿا. جيئن ته اسان اڳ ۾ ئي چيو آهي، RabbitMQ پبلشر ڏانهن هڪ تصديق موڪليندو آهي صرف ماسٽر ۽ سڀني آئيني طرفان ڊسڪ ڏانهن پيغام لکيل آهي. پر هي ٻن سببن لاءِ اضافي ويڪرائي وڌائي ٿو:

  • fsync هر چند سو مليسيڪنڊ
  • آئيني جي ناڪامي صرف ان پئڪيٽ جي زندگيءَ کان پوءِ محسوس ڪري سگهجي ٿي جيڪي چيڪ ڪن ٿا ته هر نوڊ (نيٽ ٽڪ) جي دستيابي ختم ٿي وئي آهي. جيڪڏهن آئينو سست ٿئي ٿو يا ڪري ٿو، اهو دير وڌائي ٿو.

ڪافڪا جي شرط اها آهي ته جيڪڏهن هڪ پيغام ڪيترن ئي نوڊس ۾ ذخيرو ٿيل آهي، اهو پيغامن کي تسليم ڪري سگهي ٿو جيئن ئي اهي ميموري کي ڌڪيندا آهن. انهي جي ڪري، ڪنهن به قسم جا پيغام وڃائڻ جو خطرو آهي (جيتوڻيڪ acks = سڀ, min.insync.replicas=2هڪ ئي وقت ۾ ناڪامي جي صورت ۾.

مجموعي طور تي، ڪافڪا بهتر سافٽ ويئر ڪارڪردگي ڏيکاري ٿو ۽ ڪلسٽرز لاءِ گرائونڊ اپ کان ٺهيل آهي. پوئلڳن جو تعداد 11 تائين وڌائي سگھجي ٿو جيڪڏھن ضروري ھجي ته اعتبار لاءِ. نقل جو عنصر 5 ۽ هم وقت سازي ۾ نقلن جو گھٽ ۾ گھٽ تعداد min.insync.replicas=3 پيغام جي نقصان کي هڪ تمام نادر واقعو بڻائيندو. جيڪڏهن توهان جو انفراسٽرڪچر هن نقل جي تناسب ۽ بيڪارگي جي سطح کي سپورٽ ڪري سگهي ٿو، ته پوء توهان هي اختيار چونڊي سگهو ٿا.

RabbitMQ ڪلسترنگ ننڍين قطارن لاءِ سٺو آهي. پر اڃا به ننڍيون قطارون تيزيءَ سان وڌي سگهن ٿيون جڏهن ڳري ٽرئفڪ هجي. هڪ دفعو قطارون وڏيون ٿينديون، توهان کي دستيابي ۽ اعتبار جي وچ ۾ سخت چونڊون ڪرڻيون پونديون. RabbitMQ ڪلسترنگ غير معمولي حالتن لاءِ بھترين موزون آھي جتي RabbitMQ جي لچڪداريءَ جا فائدا ان جي ڪلسٽرنگ جي ڪنھن به نقصان کان وڌيڪ آھن.

RabbitMQ جي وڏين قطارن جي ڪمزوريءَ جو هڪ ضد اهو آهي ته انهن کي ڪيترن ئي ننڍين قطارن ۾ ورهايو وڃي. جيڪڏهن توهان کي پوري قطار جي مڪمل ترتيب جي ضرورت نه آهي، پر صرف لاڳاپيل پيغام (مثال طور، هڪ مخصوص ڪلائنٽ جا پيغام)، يا ڪجهه به حڪم نه ڏيو، پوء هي اختيار قابل قبول آهي: منهنجي منصوبي کي ڏسو ريبلانس ڪندڙ قطار کي ورهائڻ لاء (پروجيڪٽ اڃا شروعاتي اسٽيج تي آهي).

آخرڪار، RabbitMQ ۽ Kafka ٻنهي جي ڪلسترنگ ۽ نقل ڪرڻ واري ميڪانيزم ۾ ڪيترن ئي بگن جي باري ۾ نه وساريو. وقت سان گڏ، سسٽم وڌيڪ پختو ۽ مستحڪم ٿي چڪا آهن، پر ڪوبه پيغام ڪڏهن به نقصان کان 100٪ محفوظ نه ٿيندو! ان کان علاوه، ڊيٽا سينٽرن ۾ وڏي پيماني تي حادثا ٿين ٿا!

جيڪڏهن مون ڪجهه وڃايو، غلطي ڪئي، يا توهان ڪنهن به نقطي سان متفق آهيو، هڪ تبصرو لکڻ يا مون سان رابطو ڪرڻ لاء آزاد محسوس ڪريو.

مون کان اڪثر پڇيو ويندو آهي: ”ڇا چونڊيو، ڪافڪا يا RabbitMQ؟“، ”ڪهڙو پليٽ فارم بهتر آهي؟“. سچ اهو آهي ته اهو واقعي توهان جي صورتحال تي منحصر آهي، موجوده تجربو، وغيره. مان پنهنجي راء ڏيڻ ۾ هچڪدار آهيان ڇو ته اهو تمام گهڻو آسان ٿيندو ته هڪ پليٽ فارم جي سفارش ڪرڻ لاء سڀني استعمال جي ڪيسن ۽ ممڪن حدون. مون مضمونن جو هي سلسلو لکيو آهي ته جيئن توهان پنهنجي راءِ قائم ڪري سگهو.

مان چوڻ چاهيان ٿو ته ٻئي نظام هن علائقي ۾ اڳواڻ آهن. مان ٿورڙو متعصب ٿي سگهان ٿو ڇاڪاڻ ته پروجيڪٽ سان منهنجي تجربي مان مان شين کي اهميت ڏيان ٿو جهڙوڪ ضمانت واري پيغام جي ترتيب ۽ اعتبار.

مون کي ٻيون ٽيڪنالاجيون نظر اچن ٿيون جيڪي هن اعتبار ۽ ضمانت واري ترتيب جي کوٽ نه آهن، پوء آئون RabbitMQ ۽ Kafka کي ڏسان ٿو ۽ انهن ٻنهي سسٽم جي ناقابل اعتبار قدر کي محسوس ڪريان ٿو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو