Consumer — broker, queue yoki event streamdan xabarlarni olib, ularga mos biznes yoki texnik amalni bajaradigan dasturiy komponentdir. U xabarni parse qiladi, schema va vakolatni tekshiradi, natijani database yoki boshqa xizmatga yozadi hamda delivery modeliga ko‘ra acknowledgement yoki offset commit yuboradi.
Xabarni qabul qilish
Push modelida broker xabarni consumerga yetkazadi, pull modelida consumer brokerdan batch so‘raydi. Queue da competing consumerlar ishni bo‘lishadi. Pub/subda har subscription o‘z nusxasini oladi. Distributed logda consumer group partitionlarni a’zolar orasida taqsimlaydi.
Prefetch yoki batch size bir consumerga bir vaqtda beriladigan xabarlar sonini belgilaydi. Katta qiymat throughputni oshirishi, lekin notekis taqsimot, xotira bosimi va failureda ko‘p redelivery keltirishi mumkin. Processing concurrency tashqi database connection pool va API rate limitiga moslanadi.
Acknowledgement
Ack processing muvaffaqiyatli tugaganidan keyin berilsa crash holatida xabar qayta keladi. Ackdan oldin tashqi side effect bajarilgan, ammo ack yetib bormagan bo‘lsa duplicate yuz beradi. Shu sabab consumer idempotent bo‘lishi yoki processed message identifikatorini transaction bilan saqlashi mumkin.
Kafka modelida offset commit keyingi o‘qish nuqtasini bildiradi. Auto-commit processing tugashidan oldin ishlasa xabar yo‘qolishi mumkin. Har xabar uchun synchronous commit esa throughputni kamaytiradi. Batch chegarasi va failure semantikasi aniq tanlanadi.
Xatolarni boshqarish
Vaqtinchalik tarmoq xatosi retry va exponential backoff bilan qayta ishlanishi mumkin. Invalid schema yoki doimiy constraint xatosi qayta urinish bilan tuzalmaydi; bunday xabar dead-letter queuega ko‘chiriladi. Retry soni va oxirgi xato metadata sifatida saqlanadi.
Poison message bitta partition yoki queueni to‘smasligi kerak. Lekin uni shunchaki tashlab yuborish data yo‘qotishidir. Dead-letter monitoring, operator ko‘rigi, tuzatish va nazoratli replay jarayoni bo‘ladi.
Tartib va parallelism
Bir entityga oid xabarlar tartibi muhim bo‘lsa ular bir partition keyga yo‘naltiriladi. Bir partitionni odatda consumer groupdagi bitta faol a’zo o‘qiydi. Parallelism partition sonidan oshsa ortiqcha consumer bekor turadi.
Rebalance partition ownershipni o‘zgartiradi. Consumer revoke signalida joriy ish va offsetni xavfsiz yakunlashi kerak. Uzoq blocking processing heartbeatni kechiktirib, broker consumerni o‘lgan deb hisoblashiga va bir xabarni boshqa a’zoga berishiga sabab bo‘lishi mumkin.
Kuzatuv va lifecycle
Consumer lag producer yozgan oxirgi offset bilan consumer qayta ishlagan nuqta orasidagi farqdir. Queue depth, processing latency, error rate, retry va dead-letter soni ham kuzatiladi. Lagning o‘zi vaqtni to‘liq ko‘rsatmaydi: bir million kichik xabar va bir million og‘ir xabar turli tiklanish vaqtiga ega.
Shutdownda yangi xabar olish to‘xtatiladi, joriy ishlar grace period ichida tugatiladi va ack yoki offset holati yakunlanadi. Schema versionlari backward compatibility bilan boshqariladi; producer yangilanishi eski consumerlarni buzmasligi kerak.
Schema va vaqt
Consumer event timestampini processing vaqtiga almashtirib yubormaydi. Kechikkan xabar domen holatiga qo‘llanishidan oldin version yoki sequence tekshirilishi mumkin; aks holda eski profile update yangisini bosadi. Optimistic concurrency va entity version tartibsiz yetkazishni boshqaradi.
Schema deserializer noma’lum fieldni e’tiborsiz qoldirishi mumkin, lekin ma’nosi o‘zgargan mavjud field xavfli. Consumer qaysi event versiyalarini qo‘llashi va eskilar qachon olib tashlanishini metric bilan ko‘rsatadi. Unknown type dead-letterga tushadi, jim tashlab yuborilmaydi.
Bog‘liq tushunchalar
Producer, Message broker, Consumer group, Acknowledgement, Offset, Dead-letter queue, Idempotency