GH GambleHub

Habar nobatlary: RabbitMQ, Kafka

Habar nobatlary: RabbitMQ, Kafka

1) Haçan näme saýlamaly

RabbitMQ (AMQP 0-9-1 / 1. 0, nusgawy nobatlar, Quorum Queues, Streams)

Aşakdakylar üçin amatly: RPC/buýruklar, workflow, gysga meseleler, fanout/topic marşrutlaşdyryş, çeýe tassyklamalar, ileri tutulýan ugurlary dolandyrmak.
Artykmaçlyklary: marşrutlaşdyrmagyň baý semantikasy (exchanges), 'basic. qos '(prefetch), per-message TTL/delay, amatly RPC (reply-to) patternleri, aňsat başlangyç.
Minuslar: taryh nobatda saklanýar, nobatlar/toplar boýunça gorizontal masştablar; Gaty uly akymlarda ýokary çykdajy.

Apache Kafka (wakalar, partiýalar, ulanyjy toparlary)

Aşakdakylar üçin amatly: wakalaryň akymlary, audit, çäräniň çeşmesi, ETL/integrasiýa (Connect), ýokary RPS/MBps, göçürme/gaýtadan işlemek, akym prosessing (Streams/ksqlDB).
Plýuslar: uzak möhletli magazineurnal, partiýa boýunça masştablamak, durnukly gürlemek, açarlary ykjam etmek.
Minuslar: "pull + partiýa" modeli - kiçi RPC üçin däl; diňe partiýanyň çäginde tertip; shemalary/laýyklygy dolandyrmak - toparyň borjy.

💡 Tejribe: toparlar/toparlar → RabbitMQ, wakalar/audit/ETL → Kafka. Uly ulgamlarda ikisi hem bilelikde ýaşaýarlar.

2) Eltip bermegiň semantikleri we inwariantlary

At-most-once: retraýsyz; çalt, ýitgi töwekgelçiligi.
At-least-once: retralar bilen; sarp edijiniň idempotentligini talap edýär.
Exactly-once: çäkli şertlerde ýetip bolýar (Kafka TX + idempotent öndüriji + ylalaşylan sink; RabbitMQ - atamyň tablisasy/idempotent açarlary arkaly).
Tertip: RabbitMQ - nobatdaky tertip (retralarda/multi-konsumerlerde bozulyp biler); Kafka - partiýada tertip, açar partiýa ýerleşdirilmegini kesgitleýär.

Domeniň üýtgemegi: pul/balanslar - magazinesurnallar/saglar we idempotent buýruklary arkaly; LWW-e bil baglamaň.

3) Integrasiýa patternleri

Outbox/InBox: DB-de wakanyň atom ýazgysy → nobata ýerleşdirmek (outbox) we bejeriş ýazgysy (inbox) bilen idempotent sarp etmek.
DLQ (öli hatlar): N synanyşykdan/ýalňyşlykdan soň - DLQ + alert.
Retry/Delay: RabbitMQ — TTL + dead-letter exchange; Kafka - backoff bilen retry-topiki.
Request/Reply: RabbitMQ — `reply_to` + `correlation_id`; Kafka - seýrek, diňe ýörite nagyşlar bilen.
Kompensasiýa: wakalaryň üstündäki saga; Her amalyň tersi bar.

4) Açarlary we topologiýalary dizaýn etmek

RabbitMQ

Exchanges: `direct`, `topic`, `fanout`, `headers`.
Routing key: nobata girmegi kesgitleýär. Ileri tutmak üçin - aýratyn nobatlar.
QoS: 'prefetch' (mysal üçin 50-300) tizligi/gizlinligi deňleşdirýär.
Quorum Queues: Raft-da köpelýän nobatlar; mirrored classic.
Akymlar: high-throughput/replay üçin ofsetli akym (Kafka ýaly).

Kafka

Topic → partitions: Maksat throughput we parallelizm boýunça '#partitions' meýilleşdiriň (tersine, azaltmak has aňsat).
Key: bir açaryň ähli ýazgylary - bir partiýada (açar boýunça tertip kepilligi).
Öndürijilikli mowzuklar üçin replication factor: 3, 'min. insync. replicas = 2 '+' acks = all 'ygtybarlylygy üçin.
Retention: wagt/ululyk boýunça; compaction - aýyrmak üçin iň soňky bahalary + tombstones açary boýunça saklaýar.

5) Retraýlar, DLQ, idempotentlik

RabbitMQ

Gaýtalamak: per-message TTL + DLX (dead-letter exchange) bilen backoff (mysal üçin, 1m → 5m → 15m).
Idempotentlik: 'correlation _ id '/' message-id' + işlenen habarlar tablisasy (TTL) ýa-da kesgitlenen buýruklar.
Tassyklamalar: manual 'basic. ack 'üstünlikli amaldan soň;' basic. nack(requeue=false)` в DLQ.

Kafka

Gaýtalanmalar: aýry-aýry retry-topikler; consumer committ side-effect-den soň ofset.
Exactly-once processing (EOS): Producer `enable. idempotence = true ', geleşik producer/consumer,' read _ committed 'sarp edijide; sink (mysal üçin Kafka → Kafka ýa-da Kafka → DB geleşik arkaly) - seresaplylyk bilen sinhronlamak.
Dedup: bazanyň gapdalyndaky açar/idempotent açary ýa-da compacted topic arkaly.

6) Öndürijilik we ölçeg

Kiçijik kanun: 'L = λ × W'

Workerler üçin: talap edilýän paralellik 'N ätiýaçlyk (1. 2–1. 5)`.
RabbitMQ prefetch: 'prefetch = 100' -den başlaň we 'in-flight' p99/wagtyny ölçäň.
Kafka partitions: islenýän consumer-parallelizmden we throughput maksatlaryndan hasaplama (mysal üçin, SSD/10GbE-de 1 partiýa durnukly 5-20 MB/s).

7) Syn etmek we alertler

Umumy:
  • Lag/Backlog (habar/bayt), age habar (p95/p99), error-rate iş, DLQ-rate.
  • Wagt "çap → gaýtadan işlemek" (end-to-end).
  • Garaşlylyk kartoçkasy: prodýuser → broker → konsumer.
RabbitMQ:
  • Baglanyşyklar, kanallar, acked däl habarlar, 'memory _ alarm', 'disk _ free _ limit', 'queue length' p95.
  • Quorum hasabatlary (leader, Raft log, 'quorum not enough' ýalňyşlyklary).
Kafka:
  • Under-replicated partitions, ISR shrink/expand, controller changes.
  • Producer errors (timeouts, `request latency`), consumer lag per group/partition.
  • Broker I/O, page cache hit, GC, ZooKeeper/KRaft health.

8) Howpsuzlyk we köp tenantlyk

TLS in-tranzit şifrlemek, tassyklamak (SASL/PLAIN/SCRAM/OAuth, mTLS).
Giriş: vhost/permissions (RabbitMQ), topiklere/toplara ACL (Kafka).
Kwotalar: baglanyşyklar, kanallar, nobatyň/topikanyň ululygy, çap etmegiň/okamagyň tizligi.
Çarşenbe (dev/stage/prod) we namespace/vhost boýunça izolýasiýa.

9) Peýdalanmak we sazlamak

RabbitMQ

Düwünlerde exchanges/queues paýlaň (CPU/IO kapasiteti).
Uly tamponlar üçin Lazy queues; şardingsiz "gyzgyn" nobatlardan gaça duruň.
HA üçin Quorum Queues; Raft magazineurnalynyň we diskiniň ululygyny meýilleşdiriň.
TTL/length-limit, priority nobatlar syýasaty diňe hakyky zerurlyk ýüze çykanda (gymmat).

DLQ/TTL syýasatynyň mysaly (ideýa):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

Kafka

SSD/NVMe, çalt torlar; OS-sazlamak (swappiness pes, faýl çäkleri).
`acks=all`, `linger. ms '(batching),' compression. type = zstd '/lz4.
Ulanyjy parametrleri: 'max. poll. interval. ms`, `max. poll. records`, `fetch. min. bytes`.
Retention & compaction - ammar/repleýiň balansy.

Ygtybarly neşiriň mysaly (Java, pikirler):
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");

10) Integrasiýa we ekosistema

Kafka Connect (Sinks/Sources), Schema Registry (Euro/JSON/Protobuf) we laýyklyk ('BACKWARD/FORWARD/FULL').
Kafka Streams/ksqlDB: stateful-amallar, penjireler, agregatlar.
RabbitMQ Shovel/Federasiýa: toparlaryň/merkezleriň arasynda geçirmek.
K8s operatorlary: Strimzi (Kafka), RabbitMQ Cluster Operator; GitOps manifestleri.

11) Giriş çek-sanawy (0-45 gün)

0-10 gün

use-case-leri kesgitlemek: toparlar/taşlar (RabbitMQ), wakalar/audit (Kafka).
Açarlary saýlaň ('routing key '/' partition key'), "neşir → gaýtadan işlemek" SLO goýuň.
Esasy howpsuzlyk syýasaty (TLS, ACL), kwotalar, DLQ/TTL.

11-25 gün

Outbox/inbox, idempotentlik we dedup giriziň.
Backoff (Rabbit: TTL + DLX; Kafka: retry topics).
Daşbordlar: lag, age, DLQ-rate, end-to-end latency; alertler.

26-45 gün

Geçiş sazlamasy: prefetch/acks (Rabbit); partitions/acks/batch (Kafka).
DR-proseduralary (aýna/köpeltmek), düwünleriň näsazlyk synaglary.
Wakalaryň (shemalaryň) şertnamalaryny we laýyklyk syýasatyny resminamalaşdyrmak.

12) Anti-patternler

Ähli meseleler üçin bir "ähliumumy" gural.
DLQ/TTL ýoklugy: baky zäherleýjiler (poison messages).
Çäksiz 'prefetch' → sarp edijileriň açlygy, p99 beýikligi.
Açarsyz Kafka → tertip-düzgüni ýitirmek/adaty gyzgyn partiýa.
Hakyky zerurlyk/düzgün-nyzam bolmazdan "Exactly-once" - ýalan howpsuzlyk duýgusy.
Gizlinler/giriş kodlary, TLS/ACL bolmasa.
Registry we migrasiýalarsyz habarlaryň shemalarynyň/wersiýalarynyň hardkody.

13) Kämillik ölçegleri

SLO Lag/age 99% ≥ ýerine ýetirilýär; DLQ-rate gözegçilik astynda.
Idempotentlik kritiki ýollaryň 100% -ini öz içine alýar; outbox/inbox girizildi.
Retention/compaction resminamalaşdyryldy, gürlemek sarp edijileri bozmaýar.
ISR/URP (Kafka) we Raft/disk çäkleri (Rabbit) boýunça alertler sazlandy.
Wakalaryň şertnamalary wersiýa edilýär (Schema Registry), laýyklyk CI-de synagdan geçirilýär.
Yzygiderli oýun günleri: düwün/broker/AZ şowsuzlygy, dikeldiş barlagy.

14) Konwensiýalaryň mysallary (gysgaça maglumat)

RabbitMQ: prefetch we tassyklamalar (pseudocode):
python channel. basic_qos(prefetch_count=200)
for msg in consume("tasks"):
try:
handle(msg)
channel. basic_ack(msg. delivery_tag)
except Transient:
channel. basic_nack(msg. delivery_tag, request = False) # will go to DLQ
Kafka ulanyjy (ideýalar):
java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) Netijenama

"RabbitMQ" we "Kafka" dürli meseleler toparlaryny çözýärler: uzak möhletli wakalar magazineurnalyna we masştably akymlara garşy toparlar/ýollar we baý marşrutlar. Üstünlik - dogry gowşuryş semantikasynda, idempotentlik düzgüninde, oýlanyşykly açyşda, retralarda/DLQ, gözegçilik we berk howpsuzlykda. Nobatlaryň töwereginde in engineeringenerçilik tejribesini - outbox/inbox, shemalar we GitOps syýasatlaryny guruň we integrasiýaňyz öňünden aýdyp boljak, ulalyp boljak we durnukly bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.