GH GambleHub

Xabar brokerlari

1) Nima uchun xabarlar brokerlari

Broker prodyuserlar va konsumerlarni vaqt/tezlik/ishonchlilik bo’yicha:
  • Cho’qqilarni buferlash va tekislash, backpresher.
  • Oʻqish/yozishni mustaqil ravishda kattalashtirish.
  • Hodisalarni kuzatish va takrorlash.
  • Arxitektura patternlari: event-driven, CQRS, event sourcing, outbox/inbox.

2) Bazaviy modellar va atamalar

2. 1 Kafka (log modeli)

Topik → partiyalar (tartibga solingan loglar) → konsumerlarda ofsetlar.
Consumer Group: o’qish parallelligi, partiyalarni muvozanatlash.
Vaqt/hajm bo’yicha Retenshn; kalit bo’yicha kompaksiya.
Semantika: minimal - at-least-once, sozlamalarda - effectively exactly-once (idempotent prodyuserlar + tranzaksiyalar).
Tartib: partiya ichida kafolatlanadi.

2. 2 NATS (mavzular/subjects, past kechikish)

Subject (mavzu) - iyerarxiya va wildcarts (’foo.’,’foo. >`).
Rejimlar: pub/sub, queue-groups (ish taqsimoti bilan fan-aut), request-reply (tezkor RPC).
Core NATS - efemer, o’ta past latentlik; JetStream - persistentlik/retenshn/takrorlash.
Tartib: eng yaxshi kuch bilan, kuchli global kafolatsiz; JetStream bilan - oqimda tartibga solish, lekin rad etilganda kamdan-kam tartibga solish mumkin.

3) Yetkazib berish semantikasi va muvofiqlik

SemantikaKafkaNATS CoreNATS JetStream
At-most-oncekamdan-kam hollarda (odatda kerak emas)Andoza (tasdiqlamasdan)mumkin
At-least-oncestandart (ishlov berilgandan keyin commit offset)ack siyosatistandart (ack policy, redelivery)
Exactly-once (samarali)idempotent prodyuser + tranzaksiyalar; idempotent sinksn/diste’molchi darajasida erishiladi (idempotentlik), broker Kafkadagi kabi tranzaksiyalar bermaydi

Idempotentlik va dedup - Kafkadagi «exactly-once» da ham ilova/sink javobgarligi.

4) Tartib, partiyalashtirish va kalitlar

Kafka

Xabar kalitini tanlash partiyani belgilaydi → kuchli lokal tartib.
Ключи: `aggregate_id`, `tenant_id`, `order_id`. Issiq kalitlardan qoching.
Balans: N partiyalari ≈ o’qish parallelligi darajasi.

NATS

Core balansini queue-group tashkil qiladi.
JetStream Stream subjects; kichik kechikish bilan keng fan-aut/fan-inga e’tibor qaratish.

5) Retenshn, replay va kompaksiya

Kafka

Retention: `retention. ms/bytes`.
Compaction: «oxirgi kalit qiymatini» saqlaydi (snapshotlar/keshlar uchun mos keladi).
Replay: Har qanday konsumer ofsetni qaytarishi mumkin.

JetStream

Streams: fayl/xotiralar, vaqt/bayt/xabar soni boʻyicha saqlash siyosati.
Consumers: pull/push, durable/ephemeral, subject-prefikslar boʻyicha filter.
Replay: redelivery yoki boshidan oʻqish/offset-like (sequence).

6) Tranzaksiyalar, outbox va muvofiqlik

Kafka

Idempotent Producer (`enable. idempotence = true’): dubllardan himoya qilish.
Transactions: bir nechta partiyalarning atom yozuvi + kommit consumer-offsets → pattern read-process-write «teshiklarsiz».
Transactional Outbox: biznes voqealari va outbox satrlarini bitta DB-tranzaksiyada yozib olish, vorker Kafka-da e’lon qiladi.

NATS

Kafkadagi kabi «oqimli» tranzaksiyalar yo’q; outbox/inbox va idempotent konsumerlardan (kalitlar, dedup stor) foydalaning.

7) RPC va so’rov-javob

Kafka RPC uchun noqulay (yuqori overhead, tartib/javoblar qiyinroq). Asinxron buyruqlar/hodisalardan foydalaning.
NATS: request-reply (milisaniye, korelatsiya, taymautlar) uchun ideal.

Misol (Go, NATS request-reply):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8) Foydalanish va topologiyalar

8. 1 Kafka

Klaster: brokerlar + ZooKeeper (eski versiyagacha) yoki KRaft (yangi metadata).
Replikatsiya: RF ≥ 3 zonalar bo’yicha, ISR/nazoratchilar.
Multiregion: MirrorMaker 2/Cluster Linking; aktiv-passiv/qarama-qarshi siyosatchilar bilan aktiv-aktiv.
Disk/tarmoq sig’imi:’throughput × retention × replicas’dan hisoblansin.

8. 2 NATS

Cluster: koʻp tugunlar, super-cluster (georaylash), leafnodes/edge.
JetStream: uzellar toʻplami boʻyicha oqimlarni joylashtirish (placement), replikatsiya (R = 1.. 5).
WAN: past kechikishlar, engil federatsiya.

9) Xavfsizlik

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.
Topiklar/guruhlar/tranzaktsiyalar uchun ACL.
Shifrlash «tinch» (OS/disklar) + tarmoq siyosati.

NATS

nkey/JWT identifikatsiya, operator-hisoblar, per-subject ACL.
mTLS uzellar va mijozlar o’rtasida.
Ijarachilarni izolyatsiya qilish (accounts) + limitlar.

10) Kuzatuvchanlik va ekspluatatsiya metrikasi

Kafka

Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Topik/partiya:’logEndOffset’, consumer lag (tanqidiy).
Prodyuser/konsumer: retrai,’batch. size`, `linger. ms`, `fetch. min. bytes’, xatolar.
Asboblar: JMX, Cruise Control (re-balans), Schema Registry.

NATS/JetStream

Server: conn/msgs/sec, RTT, CPU/mem, slow consumer deteksiya.
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Monitoring: ichki endpoint, nsc/adm-CLI, dashbordlar.

11) Unumdorlik va tyuning

Kafka

Katta batchi va’linger. ms’throughput ni yaxshilaydi va p99 ni siqadi.
Siqish (lz4/zstd) tarmoq/diskni tejaydi.
num. partitions iste’molchilar/yadrolar soni bo’yicha, lekin haddan tashqari (overhead).
Disklar: NVMe’noatime’bilan XFS/EXT4.

NATS

Kichik xabarlar, ko’p birikmalar - norma; queue groups «keng» saqlang.
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.

12) Integratsiya patternlari

Outbox/Inbox (Kafka va NATS).
SAGA: voqealar bilan orkestrlash; dedup po’saga _ id + step’.
Change Data Capture (CDC): Debezium → Kafka; NATSga - «DB-trigger/loglardan publisher» patterni.
Stream processing: Kafka Streams/Flink/Spark; NATS - uchinchi tomon protsessorlari/funksiyalari, JetStream consumers.
Dead Letter Queue (DLQ) va retry-siyosati (eksponensial backoff + jitter).

13) Konfiguratsiya namunalari

13. 1 Kafka: topika yaratish va prodyuser

bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd

13. 2 Kafka Streams: idempotent ishlov berish (eskiz)

java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");

13. 3 NATS JetStream: stream + consumer (nats CLI)

bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old

nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"

13. 4 NATS Request-Reply (Go)

go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})

14) Kafka vs NATS tanlash: tezkor yo’nalish

Bizga reple, uzoq muddatli retenshn, kompaksiya, og’ir oqim jarayonlari kerak → Kafka.
Tezkor RPC, mikro patentli fan-out/fan-in, oddiy foydalanish, edge/IoT → NATS (Core) kerak.
Sizga persistentlik + fan-out kerak, ammo og’ir «log» platformasisiz → NATS JetStream.
Kalit va tranzaksiya bo’yicha qat’iy tartib → Kafka.

15) Sig’imni rejalashtirish (soddalashtirilgan tarzda)

Kafka

1. O’tkazish:’inbound _ MBps × RF × retention_days × 86400’→ disklar.
2. Partitsii:’target _ concurrency’× zaxira 1. 5–2×.
3. Tarmoq: p99 + replikatsiya + kompresssiya ishlab chiqaruvchisi.

NATS/JetStream

1. Xabarlar/sek va oʻrtacha oʻlcham → throughput.
2. Retention×replicas → storage.
3. Consumers (ack-pending, redeliveries), seriallashtirish uchun CPU limitlari.

16) Xavfsiz foydalanish: chek-varaq

  • TLS/mTLS yoqilgan, sirlar aylantiriladi.
  • ACL/akkauntlar/kvotalar (per-tenant).
  • Konsumerlar, DLQ va jitter bilan retrajda idempotentlik.
  • lag/throughput/xato monitoringi; URP (Kafka), redelivery-bo’ronga (NATS) alertlar.
  • Capacity dashboards: partiyalar, storage, p99.
  • Uzel/zona, game-days, replay/backfill muvaffaqiyatsiz tugun testlari.
  • Partiyalash kalitlari va sxemalari (Schema Registry/JSON Schema) hujjatlashtirilgan.
  • Retenshn/kompaksiya/TTL siyosati komplayens bilan kelishilgan.
  • Brokerlar/mijozlar versiyalari muntazam ravishda yangilanib turadi; wire-protokolning mosligi tekshirildi.

17) Anti-patternlar

Issiq kalit (barcha voqealar bitta ID) → bitta «qaynoq» oqim. Shard/bufer.
Idempotentsiz retraylar → dubl effektlari.
Katta xabarlar (MB-oʻnlab) → GC parchalanishi/pauzalari. Payloadni obʼektda saqlang, havolalarni yuboring.
Kafkada RPC va strimingni aralashtirish → murakkab hayot sikli/tartibi.
JetStream «uzoq muddatli DWH» sifatida → boshqa maqsadlarda; obʼekt/kolonochnыy storlarda uzoq vaqt saqlang.
DLQ yo’q → «zaharli» xabarlar cheksiz aylanadi.
Unutilgan retenshn → disklar toʻldirildi, klaster toʻxtadi.

18) FAQ

Q: Payplaynning oxirida «exactly-once» qilish mumkinmi?
A: Amalda - samarali ha: Kafka (idempotent prodyuser + tranzaksiyalar) va idempotent sinki (kalit, upsert). NATSda - ilovadagi idempotentlik/dedup orqali.

Q: bir million kichik RPC/sek uchun nimani tanlash kerak?
A: NATS Core: mikrolatentlik, request-reply, yengil konnektlar va queue-groups.

Q: Kompaksiya va snapshotlar kerakmi?
A: Kafka с `cleanup. policy = compact’, kalit = agregat/resurs.

Q: Lagga qarshi qanday kurashish mumkin?
A: Partiyalar/voryerlar sonini ko’paytirish, ishlov berish vaqtini qisqartirish, batch va prefetch, deserializatsiyani optimallashtirish, brokerlar/disklarni vertikal ravishda kuchaytirish.

Q: Ko’p mintaqa va DR?
A: Kafka - MirrorMaker 2/Cluster Linking, RPO bilan aktiv-passiv ≈ soniya. NATS — supercluster/leafnodes; JetStream oynalari/replikalari.

19) Yakunlar

Kafka va NATS turli rejimlarni yopadi: Kafka - uzoq muddatli voqealar jurnallari, yuqori throughput, tranzaksion va replay; NATS - past kechikishlar, RPC va oddiy fan-aut uchun juda yengil shinalar, persistentlik uchun JetStream bilan. Yetkazib berish semantikasi, tartib va retenshn, yashirin va operatsion xarajatlardan tanlang. Kalitlar/partiyalar, retenshn, DLQ va kuzatish qobiliyatini loyihalashtiring - va voqea arxitekturasi oldindan aytib bo’ladigan, ko’paytiriladigan va ishonchli bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.