توی کافکا، خیلی مهمه که بر اساس تعداد نمونه های یک consumers دقت کنیم
مثلا اگر ۵ تا نمونه از سرویس ولت وجود داره، در نتیجه توی ساخت producer ، ده تا پارتیشن درست کنیم،
اینجوری خود کافکا برامون به صورت اتوماتیک لود بالانسینگ انجام میده(البته مهمه که حتما پارتیشنینگ به صورت دستی ست بشه موقع ساخت topic و اینکه هر پنج نمونه سرویس ولت همه به یه topic گوش بدن، مثلا همه به groupId : 'wallet-consume گوش بدن')
مثال واقعی تر
product : consumer
ایشون سرویس پروداکته که داره گوش میده و ۵ تا نمونه ازش روی سرور بالاست
wallet:producer
ایشون سرویس ولته که پرودیوسره و اصلا به عنوان پرودیوسر اهمیت نداره چنتا نمونه ازش ران شده روی سرور(تو این مورد البته)
خب به ازای پنج تا نمونه سرویس پروداکت که consumer هست باید توی ساخت topic ولت به عنوان producer ده تا پارتیشن درست کنیم(البته باید که نه ولی اگر میخاید معماری تمیز کار کنه باید)
حالا این ده تا پارتیشن چطور کار میکنن؟؟؟
Producer Instance 1 ──→ Partition 0 ✅
Producer Instance 2 ──→ Partition 1 ✅
Producer Instance 3 ──→ Partition 2 ✅
Producer Instance 4 ──→ Partition 3 ✅
Producer Instance 5 ──→ Partition 4 ✅
Partition 5 → 😴 بیکار (هنوز پیامی نیومده)
Partition 6 → 😴 بیکار
Partition 7 → 😴 بیکار
Partition 8 → 😴 بیکار
Partition 9 → 😴 بیکار
به این صورت producer که همون سرویس ولت هست پیاماشو ارسال میکنه و
Partition 0 → Consumer Instance 1
Partition 1 → Consumer Instance 1
Partition 2 → Consumer Instance 2
Partition 3 → Consumer Instance 2
Partition 4 → Consumer Instance 3 ✅
Partition 5 → Consumer Instance 3 ✅
Partition 6 → Consumer Instance 4
Partition 7 → Consumer Instance 4
Partition 8 → Consumer Instance 5
Partition 9 → Consumer Instance 5
به این صورت سرویس پروداکت که consumer هست پارتیشن هارو میخونه
حالا اگر مثلا نمونه ۳ از سرویس ولت داون بشه، چه اتفاقی میوفته؟؟؟ خب نکته همینجاست اگر مثلا instance 3 به درک واصل بشه بقیه نمونه ها جاشو پر میکنن
Partition 0 → Consumer Instance 1
Partition 1 → Consumer Instance 1
Partition 2 → Consumer Instance 1 ← جدید
Partition 3 → Consumer Instance 2
Partition 4 → Consumer Instance 2 ← جدید
Partition 5 → Consumer Instance 2 ← جدید
Partition 6 → Consumer Instance 4
Partition 7 → Consumer Instance 4
Partition 8 → Consumer Instance 5
Partition 9 → Consumer Instance 5
اینجوری میشه 👆
من حسینم، میتونید منو توی بله هم پیدا کنید.
@sungeek