Message ordering — messaging tizimida xabarlarning producer yaratgan yoki biznes belgilagan ketma-ketlikda consumerga ko‘rinish xususiyatidir. “Navbat tartibni saqlaydi” degan jumla yetarli emas: tartib qaysi doirada — butun topic, partition, key yoki bitta producer sessioni ichida — kafolatlanishi aniq bo‘lishi kerak. Parallelizm, retry va failover bu semantikaga bevosita ta’sir qiladi.
Tartib doirasi
Bitta FIFO queue’da bir consumer xabarlarni navbat tartibida olishi mumkin. Bir nechta consumer parallel ishlasa, boshlash tartibi saqlansa ham tugash tartibi o‘zgaradi. Partitionlangan log’da har partition ichida offset ketma-ket, partitionlar orasida esa global order yo‘q. Bir aggregate’ga tegishli xabarlarni bir xil key bilan ayni partitionga yuborish per-entity order beradi.
Bir nechta producer bitta partitionga yozsa broker qabul qilgan tartib canonical bo‘ladi, ammo bu real dunyodagi sababiy tartibga teng emas. Network retry eski requestni yangi requestdan keyin yetkazishi mumkin. Idempotent producer va per-producer sequence duplicate hamda ayrim reorderingni cheklaydi.
Consumer ishlovi
Consumer xabarni olib, asinxron workerlarga tarqatsa broker orderi application ichida yo‘qolishi mumkin. Bir key uchun serial executor, boshqa keylar uchun parallel worker ishlatish throughput va tartibni muvozanatlashtiradi. Offset faqat oldingi barcha xabarlar muvaffaqiyatli tugagach commit qilinadi; aks holda crashdan keyin o‘tkazib yuborish yuz beradi.
Poison message key oqimini to‘sib qo‘yishi mumkin. Uni darhol dead-letter queuega chiqarish keyingi xabarlarni eski state ustida ishlatishi ehtimolini yaratadi. Siyosat retry chegarasi, quarantine, operator tuzatishi va key oqimini vaqtincha to‘xtatishni aniq belgilaydi.
Out-of-order bilan ishlash
Har tizim global tartibni majburlamaydi. Eventga aggregate version yoki monoton sequence qo‘shilib, consumer kutilgan raqamni tekshiradi. Kattaroq sequence erta kelsa qisqa bufferda kutishi, source’dan gapni qayta so‘rashi yoki qayta sinxronlash qilishi mumkin. Eski versiya idempotent ravishda rad etiladi.
Event time bo‘yicha stream processing watermark ishlatib kechikkan event uchun chegaralangan kutish beradi. Juda kech kelgan ma’lumot correction oqimi yoki alohida windowga tushadi. Timestampning o‘zi uniqueness va causalityni kafolatlamaydi; source ID va sequence kerak bo‘lishi mumkin.
Kuzatuv va sinov
Metrikalar partition lag, sequence gap, duplicate, reorder buffer hajmi va eng eski bloklangan keyni ko‘rsatadi. Testlar producer retry, consumer crash, rebalance, broker leader almashishi va parallel handlerni qamrab oladi. Business invariant faqat transport orderiga ishonmasdan version check va atomic state update bilan himoyalansa, tizim qayta yetkazish hamda vaqtinchalik tartib buzilishiga chidamli bo‘ladi.
Schema evolyutsiyasi
Tartib to‘g‘ri bo‘lsa ham eski consumer yangi event schema sini tushunmasa oqim to‘xtaydi. Eventlar backward-compatible rivojlanadi, required field qo‘shishdan saqlaniladi va consumer capability kuzatiladi. Reprocessing eski eventlarni hozirgi handler bilan qayta bajarganda semantika o‘zgarmasligi uchun event type versioni va effective time saqlanadi. Snapshotdan tiklanishda snapshot versioni bilan keyingi event sequence mosligi tekshiriladi. Multi-region producerlar uchun region-local order va global conflict resolution ochiq belgilanadi. Operator partition sonini oshirganda key-to-partition mapping o‘zgarishi mumkin; migration davomida bitta key ikki partitionga tushmasligi uchun routing epoch yoki controlled cutover qo‘llanadi.
Consumer qayta joylashtirilganda oldingi workerning stale natijasi generation ID orqali rad etiladi.
Bog‘liq tushunchalar
FIFO, Partition, Offset, Sequence number, Idempotent consumer, Event time, Total order