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)

Қолайлы: оқиғалар, аудит, event sourcing, ETL/интеграция (Connect), жоғары RPS/MBps, реплика/ре-процессинг, стрим-процессинг (Streams/ksqlDB).
Артықшылықтары: ұзақ мерзімді журнал, партия бойынша масштабтау, тұрақты реплика, кілттерді ықшамдау.
Кемшіліктері: «pull + партия» моделі - ұсақ RPC үшін емес; тәртіп тек партия шегінде ғана; схемаларды/үйлесімділікті басқару - команданың міндеті.

💡 Практика: командалар/таспалар → RabbitMQ, оқиғалар/аудит/ETL → Kafka. Үлкен жүйелерде екеуі де қатар өмір сүреді.

2) Жеткізу семантикасы және инварианттар

At-most-once: ретрассыз; тез, жоғалту тәуекелі.
At-least-once: ретраларымен; тұтынушының іспеттілігін талап етеді.
Exactly-once: шектеулі жағдайларда қол жеткізуге болады (Kafka TX + демпотенттік продюсер + келісілген sink; RabbitMQ - дедуп кестесі/идемпотенттік кілттер арқылы).
Тәртіп: RabbitMQ - кезектегі тәртіп (ретра/мульти-консьюмерлер кезінде бұзылуы мүмкін); Kafka - партиядағы тәртіп, кілт партияландыруды анықтайды.

Домен инварианттары: ақша/баланстар - журналдар/сагалар және демпотенттік командалар арқылы; LWW-ге сүйенбеңіз.

3) Интеграция паттерндері

Outbox/InBox: ДБ → кезекке жариялау оқиғаны атомарлық жазу (outbox) және өңдеу логымен (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: high-throughput/реплеяға арналған офсетпен ағын (Kafka-ұқсас).

Kafka

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

5) Ретраи, 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-топиктер; consumer сәтті side-effect кейін оффсет коммитититі.
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/« ин-флайт »уақытын өлшеңіз.
Kafka partitions: қалаған consumer-параллелизмнен және throughput мақсаттарынан есептеу (мысалы, SSD/10GbE-де 1 партия тұрақты 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 бойынша есептер (leader, 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 топиктерге/топтарға (Kafka).
Квоталар: қосылыстар, арналар, кезек/топика өлшемі, жариялау/оқу жылдамдығы.
Орталар бойынша (dev/stage/prod) және namespace/vhost бойынша оқшаулау.

9) Пайдалану және тюнинг

RabbitMQ

Тораптар бойынша exchanges/queues таратыңыз (CPU/IO капацитеті).
Үлкен буферлер үшін 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 Operator; GitOps-манифесттері.

11) Енгізу чек-парағы (0-45 күн)

0-10 күн

use-case 'дерді анықтау: командалар/таспалар (RabbitMQ), оқиғалар/аудит (Kafka).
Кілттерді таңдау ('routing key '/' partition key'), SLO «жариялау → өңдеу».
Базалық қауіпсіздік саясаты (TLS, ACL), квоталар, DLQ/TTL.

11-25 күн

outbox/inbox, теңсіздік және дедуп енгізу.
Backoff (Rabbit: TTL + DLX; Kafka: retry topics).
Дашбордтар: 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 жоқ.
Registry және көші-қонсыз хабарламалар схемаларының/нұсқаларының хардкоды.

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

Lag/age SLO уақытының 99% ≥ орындалады; DLQ-rate бақылауда.
Теңсіздік сындарлы жолдардың 100% -ын жабады; outbox/inbox енгізілді.
Retention/compaction құжатталған, реплика тұтынушыларды бұзбайды.
ISR/URP (Kafka) және Raft/дискілік лимиттер (Rabbit) бойынша алерттар теңшелген.
Оқиғалар келісімшарттары нұсқаланады (Schema Registry), сыйымдылығы CI-де тестіленеді.
Тұрақты game-days: түйін/брокер/АЗ істен шығуы, қалпына келтіруді тексеру.

14) Пішіндер мысалдары (жиынтық)

RabbitMQ: префетч және растаулар (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 Consumer (идеялар):
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 міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.