GH GambleHub

Билдирүү кезектери: RabbitMQ, Kafka

Билдирүү кезектери: RabbitMQ, Kafka

1) Качан тандоо керек

RabbitMQ (AMQP 0-9-1 / 1. 0, классикалык кезек, Quorum Queues, Streams)

ылайыктуу: RPC/команда, workflow, кыска тапшырмалар, fanout/topic багыттоо, ийкемдүү ырастоо, артыкчылыктуу башкаруу.
Артыкчылыктары: бай семантика багыттоо (exchanges), 'basic. qos '(prefetch), per-message TTL/delay, ыңгайлуу RPC үлгүлөрү (reply-to), жеңил баштоо.
Терс жактары: тарых кезек менен сакталат, кезек/чардам боюнча горизонталдуу масштабдоо; абдан чоң агымдар менен жогорку Throughput-наркы.

Apache Kafka (окуялар журналы, партиялар, consumer groups)

Ылайыктуу: окуялар агымы, аудит, иш-чара sourcing, ETL/Integration (Connect), жогорку RPS/MBps, реплика/кайра иштетүү, агым иштетүү (Streams/ksqlDB).
Артыкчылыктары: узак мөөнөттүү журнал, партиялык масштабдоо, туруктуу реплика, ачкычтарды компакттоо.
Кемчиликтери: модель "pull + партия" - чакан RPC үчүн эмес; тартип партиянын чегинде гана; схемаларды/шайкештикти башкаруу - команданын милдети.

💡 Practice: командалар/тасмалар → RabbitMQ, окуялар/аудит/ETL → Kafka. Чоң системаларда экөө тең чогуу жашайт.

2) Семантика жеткирүү жана башка

At-most-once: retrains жок; тез, жоготуу коркунучу.
At-least-once: ретра менен; керектөөчүнүн демпотенттигин талап кылат.
Exactly-once: чектелген шарттарда жетишүүгө болот (Kafka TX + idempotent продюсер + макулдашылган sink; RabbitMQ - жадыбал/демпотенттик ачкычтар аркылуу).
Тартиби: RabbitMQ - кезек тартиби (Retras/Multi-Consumer учурунда бузулушу мүмкүн); Kafka - партиядагы тартип, ачкыч партиялаштырууну белгилейт.

Домендик инварианттар: акча/баланстар - журналдар/дастандар жана демпотенттик командалар аркылуу; LWW таянуу жок.

3) Интеграция үлгүлөрү

Outbox/InBox: DB бир атомдук жазуу → кезек жарыялоо (outbox) жана дарылоо Логин менен Emempotent керектөө (inbox).
DLQ (өлүк тамгалар): N аракет/каталар кийин - DLQ + алерт.
Retry/Delay: RabbitMQ — TTL + dead-letter exchange; Kafka - backoff менен retry-топик.
Request/Reply: RabbitMQ — `reply_to` + `correlation_id`; Kafka - сейрек, бир гана атайын үлгүлөрү.
Компенсация: окуялар боюнча сагалар; ар бир операция тескери болот.

4) Ачкычтарды жана топологияларды долбоорлоо

RabbitMQ

Exchanges: `direct`, `topic`, `fanout`, `headers`.
Routing key: кезек (и) аныктайт. Артыкчылыктуу үчүн - өзүнчө кезек.
QoS: 'prefetch' (мисалы, 50-300) ылдамдыгын/латенттүүлүгүн тең салмактайт.
Quorum Queues: Raft боюнча кайталануучу кезек; алмаштыруу mirrored classic.
Streams: жогорку-throughput/реплика үчүн offsets (Kafka сыяктуу) менен агым.

Kafka

Topic → partitions: максаттуу throughput жана параллелизм боюнча '#partitions' пландаштыруу (кайра шайкеш кыскартуу үчүн жеңил көбөйтүү).
Key: бир ачкычтын бардык жазуулары - бир партияда (ачкыч боюнча тартиптин кепилдиги).
Replication factor: 3 жемиштүү темалар үчүн, 'min. insync. replicas = 2 '+' acks = all 'ишенимдүүлүк үчүн.
Retention: убакыт/өлчөмү боюнча; compaction - жок кылуу үчүн негизги + tombstones боюнча акыркы баалуулуктарды сактайт.

5) Retrais, DLQ, боштук

RabbitMQ

кайталоо: per-message TTL + DLX (dead-letter exchange) менен backoff (мисалы, 1м → 5м → 15м).
Демпотенттик: 'correlation _ id '/' message-id' + иштелип чыккан билдирүүлөр таблицасы (TTL) же детерминацияланган буйруктар.
Тастыктоо: manual 'basic. ack 'ийгиликтүү бүтүмдөн кийин;' basic. nack(requeue=false)` в DLQ.

Kafka

кайталоо: өзүнчө retry-топик; ийгиликтүү side-effect кийин consumer коммитит offset.
Exactly-once processing (EOS): Producer `enable. idempotence = true ', транзакциялык producer/consumer,' read _ committed 'керектөөчүгө; sink (мисалы, Kafka → Kafka же Kafka → DB аркылуу) - кылдаттык менен синхрондоштуруу.
Дедуп: база тарабындагы ачкыч/демпотент ачкыч боюнча, же compacted topic аркылуу.

6) аткаруу жана өлчөө

Литтл мыйзамы: 'L = λ × W'

Воркерлер үчүн: талап кылынган параллелизм 'N запасы (1. 2–1. 5)`.
RabbitMQ prefetch: 'prefetch = 100' менен башталып, p99/in-flight убактысын өлчөө.
Kafka partitions: throughput (мисалы, 1 партия туруктуу SSD/10GbE боюнча 5-20 MB/s) каалаган керектөөчү-параллелизм жана максаттарды эсептөө.

7) Байкоо жана аллергия

Жалпы:
  • Lag/Backlog (билдирүүлөр/байт), age билдирүүлөр (p95/p99), error-rate иштеп чыгуу, DLQ-rate.
  • Убакыт "жарыялоо → иштетүү" (end-to-end).
  • Көз карандылык картасы: продюсер → брокер → консюмер.
RabbitMQ:
  • Байланыштар, каналдар, acked эмес билдирүүлөр, 'memory _ alarm', 'disk _ free _ limit', 'queue length' p95.
  • Quorum отчеттору (лидер, Raft log, 'quorum not enough' каталары).
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) Коопсуздук жана көп тенанттуулук

TLS in-transit шифрлөө, аутентификация (SASL/PLAIN/SCRAM/OAuth, mTLS).
Авторизация: vhost/permissions (RabbitMQ), ACL на топики/группы (Кафка).
Квоталар: байланыштар, каналдар, кезек өлчөмү/топика, жарыялоо/окуу ылдамдыгы.
Шаршемби (dev/stage/prod) жана namespace/vhost боюнча обочолонуу.

9) Иштетүү жана тюнинг

RabbitMQ

узел боюнча exchanges/queues (CPU/IO capacite).
Чоң буферлер үчүн Lazy queues (дисктеги билдирүүлөр); "ысык" кезектерден алыс болуңуз.
HA үчүн Quorum Queues; Raft журналынын жана дисктин өлчөмүн пландаштырыңыз.
TTL/length-limit саясаты, priority кезек гана реалдуу муктаждык (кымбат).

DLQ/TTL саясатынын мисалы (идея):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

Kafka

SSD/NVMe, тез тармактар; OS-тюнинг (swappiness төмөн, файл чектери).
`acks=all`, `linger. ms '(батч),' compression. type = zstd '/lz4 өткөрүү үчүн.
Керектөөчү параметрлери: 'max. poll. interval. ms`, `max. poll. records`, `fetch. min. bytes`.
Retention жана compaction - сактоо/реплика балансы.

Ишенимдүү жарыялоо мисал (Java, идеялар):
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");

10) Интеграция жана экосистема

Kafka Connect (Sinks/Sources), Schema Registry (Euro/JSON/Protobuf) жана шайкештиги ('BACKWARD/FORWARD/FULL').
Kafka Streams/ksqlDB: stateful-операциялар, терезелер, агрегаттар.
RabbitMQ Shovel/Federation: кластерлердин/борборлордун ортосунда өткөрүп берүү.
K8s операторлору: Strimzi (Kafka), RabbitMQ Cluster оператору; GitOps-манифесттер.

11) Киргизүү чек-тизмеси (0-45 күн)

0-10 күн

use-case's аныктоо: команда/тасмалар (RabbitMQ), окуялар/аудит (Kafka).
ачкычтарды тандоо ('routing key '/' partition key'), SLO "жарыялоо → иштетүү".
Негизги коопсуздук саясаты (TLS, ACL), квота, DLQ/TTL.

11-25 күн

outbox/inbox киргизүү, idempotentity жана дедуп.
backoff (Rabbit: TTL + DLX; Kafka: retry topics).
Dashbord: lag, age, DLQ-rate, end-to-end latency; Алерталар.

26-45 күн

Тюнинг өткөрүү: prefetch/acks (Rabbit); partitions/acks/batch (Kafka).
DR-процедуралар (күзгү/репликация), түйүндөрдүн иштебей калуу тесттери.
Иш-чаралардын келишимдерин (схемаларын) жана шайкештик саясатын документтештирүү.

12) Анти-үлгүлөрү

Бардык тапшырмалар үчүн бир "универсалдуу" курал.
Жок DLQ/TTL: түбөлүк ууландыруучу (poison messages).
Чексиз 'prefetch' → керектөөчүлөрдүн ачкачылык, өсүш p99.
Kafka ачкычтары жок → тартипти жоготуу/ысык партиялар демейки.
"Exactly-once" эч кандай чыныгы муктаждык/тартип - жалган коопсуздук сезими.
Сырлар/коддогу логиндер, TLS/ACL жок.
Катталуу жана миграциясы жок схемалар/билдирүүлөрдүн версияларынын Hardcode.

13) Жетилүү метрикасы

Lag/age SLO 99% убакытка ≥ аткарылат; DLQ-rate көзөмөлдө.
Идемпотенттүүлүк критикалык жолдордун 100% камтыйт; outbox/inbox киргизилген.
Retention/compaction документтештирилген, реплика керектөөчүлөрдү сындырбайт.
ISR/URP (Kafka) жана Raft/Disk лимиттери (Rabbit) боюнча алерталар орнотулган.
Иш-чаралардын келишимдери версияланат (Schema Registry), шайкештиги CI сыналат.
Үзгүлтүксүз оюн-күндөр: түйүн/брокер/АЗ, калыбына келтирүү текшерүү.

14) Конфигурация мисалдары (кыскача)

RabbitMQ: prefetch жана ырастоо (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 керектөөчү (идеялар):
java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) Корутунду

RabbitMQ жана Kafka ар кандай класстарды чечет: командалар/тасмалар жана узак мөөнөттүү окуялар жана масштабдуу агымынын журналына каршы бай багыттоо. Ийгилик - туура жеткирүү семантикасында, акыл-эстүүлүк тартибинде, ойлонулган ачкычта, ретрада/DLQ, байкоо жана катуу коопсуздукта. кезек инженердик практика айланасында куруп - outbox/inbox, схемалар жана GitOps саясаты - жана сиздин бириктирүү алдын ала, масштабдуу жана туруктуу болот.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.