Билдирүү кезектери: 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 үчүн эмес; тартип партиянын чегинде гана; схемаларды/шайкештикти башкаруу - команданын милдети.
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).
- Көз карандылык картасы: продюсер → брокер → консюмер.
- Байланыштар, каналдар, acked эмес билдирүүлөр, 'memory _ alarm', 'disk _ free _ limit', 'queue length' p95.
- Quorum отчеттору (лидер, Raft log, 'quorum not enough' каталары).
- 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 кезек гана реалдуу муктаждык (кымбат).
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 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 саясаты - жана сиздин бириктирүү алдын ала, масштабдуу жана туруктуу болот.