GH GambleHub

Հաղորդագրությունների գծերը ՝ RabbitMQ, Kafka

Հաղորդագրությունների գծերը ՝ RabbitMQ, Kafka

1) Ե՞ րբ ընտրել

RabbitMQ (AMQP 0-9-1 / 1. 0, դասական գծեր, Disrum Queues, Streams)

Հարմար է 'RPC/թիմեր, workflow, կարճ խնդիրներ, fanout/topic, ճկուն ապացույցներ, առաջնահերթություններ։

Պլյուսներ 'հարուստ ուղղորդման սեմանտիկան (exchanges), «basic»։ qos '(wwww.fetch), per-www.TTL/www.ay, հարմար RPC (reply-to), թեթև մեկնարկը։

Մինուսներ 'պատմությունը պահպանվում է հերթում, հորիզոնական մեծացումը հերթերով/շարդամներով։ Բարձր throughput արժեքը շատ մեծ հոսքերով։

Apache Kafka (իրադարձությունների լոգ, կուսակցություն, consumer nowups)

Հարմար է իրադարձությունների հոսքերի, պարամետրերի, event sourcing, ETL/ինտեգրման (Connect), բարձր RPS/MBps, replay/re պրոցեսինգի, streams/ksqlDB) համար։

Պլյուսներ ՝ երկարաժամկետ ամսագիր, կուսակցության մասշտաբներ, կայուն ճեղքվածքներ, բաղադրատոմսեր։

Minus: «pox + կուսակցության» մոդելը փոքր RPC-ի համար չէ։ կարգուկանոնը միայն կուսակցության սահմաններում է։ սխեմաների և համատեղելիության կառավարումը թիմի պաշտպանությունն է։

💡 Պրակտիկա 'թիմեր/tasks ww.RabbitMQ, իրադարձություններ/աուդիտ/ETL no Kafka։ Մեծ համակարգերում երկուսն էլ գոյություն ունեն։

2) Առաքման և ինվարանտների սեմանտները

At-most-once: առանց retrav; արագ, կորստի վտանգը։

At-least-once: գետերի հետ; պահանջում է սպառողի կողմնակալություն։

Exactly-once: հասանելիորեն սահմանափակ պայմաններում (Kafka TX + idempotent dowser + համաձայնեցված sink; RabbitMQ-ը dedupa/idempotent բանալիների աղյուսակի միջոցով է)։

Կարգը ՝ RabbitMQ-ը հերթում կարգուկանոն է (կարող է խախտվել ռելեների/մուլտֆիլմերի); Kafka-ը կուսակցությունում կարգուկանոն է, բանալին տալիս է կուսակցությունը։

Տիրույթի ինվարանտները 'փողը/հավասարակշռությունները' ամսագրերի/սագայի և գաղափարական թիմերի միջոցով։ մի ապավինեք LWW-ին։

3) Patterns

Medibox/InBox: BD-ում իրադարձության ատոմային ձայնագրությունը բացատրում է հրապարակումը (wwww.box) և գաղափարական սպառումը վերամշակման հատակով (inbox)։

DLQ (մահացած նամակներ) 'N փորձերից/սխալներից հետո, DLQ + alert-ում։

Retry/Delay: RabbitMQ — TTL + dead-letter exchange; Kafka-ը retry-topics է backoff-ից։

Request/Reply: RabbitMQ — `reply_to` + `correlation_id`; Kafka-ը հազվադեպ է, միայն patterns-ը։

Փոխհատուցում 'սագներ իրադարձությունների վրա։ յուրաքանչյուր վիրահատություն հակառակն է։

4) Ուղղափառության և տեղաբանության նախագծումը

RabbitMQ

Exchanges: `direct`, `topic`, `fanout`, `headers`.

Routing key: որոշում է հերթը (և)։ Առաջնահերթության համար անհատական գծեր են։

QoS: «www.fetch» (օրինակ, 50-300) հավասարակշռում է արագությունը/լատենտությունը։

Delrum Queues: Raft-ի կրկնօրինակված տողերը; փոխարինող mirrored classic.

Streams: հոսքը օֆսեթներով (Kafka-նման) high-throughput/repley-ի համար։

Kafka

Topic partitions: Պլանավորեք «# partitions» նպատակային throughput և զուգահեռ (հետ միասին ավելացրեք ավելի հեշտ, քան նվազեցնել)։

Քեյ 'մեկ ստեղնաշարի բոլոր գրառումները մեկ կուսակցության մեջ են (կարգուկանոնի երաշխիք բանալին)։

Replant factor: 3 արդյունավետ թեմաների համար, "min. insync. replicas = 2 '+' acks = all 'հուսալիության համար։

Retention: Ժամանակի/չափի; compaction - պահպանում է վերջին արժեքները + tombstones-ի համար։

5) Retrai, DLQ, impotenty

RabbitMQ

Կրկնությունները ՝ per-35TTL + DLX (dead-letter) backoff-ից (օրինակ ՝ 1m 355m)։

Idempotention: «wwww.relation _ id »/« www.ru-id» + -ը վերամշակված հաղորդագրությունների (TTL) կամ դետերմինացված թիմեր։

Ապացույցները ՝ manium 'basic։ ack 'հաջող գործարքից հետո, "basic. nack(requeue=false)` в DLQ.

Kafka

Կրկնություններ ՝ առանձին retry-topics; consumer-ը հաշվում է օֆսեթը հաջողակ side-effect-ից հետո։

Exactly-once processing (EOS): Producer `enable. idempotence = dive ', գործարքային directer/consumer, «read _ comitted» սպառողի վրա։ sink (օրինակ, Kafka no Kafka կամ Kafka no DB գործարքի միջոցով) - ուշադիր համաժամեցնել։

Dedup 'բանալին/idempotent բանալին բազայի կողմում, կամ compacted topic-ի միջոցով։

6) Արտադրողականություն և չափում

Լիթլի օրենքը '«L = now.W»

Վորկերների համար 'պահանջվող զուգահեռ "N + arrival _ rate divg _ processing _ time processing _ Time-ը (1։ 2–1. 5)`.

RabbitMQ 24fetch: Սկսեք «www.fetch = 100» և չափեք r99/ժամանակը «in-flit»։

Kafka partitions: Հաշվարկը ցանկալի consumer-զուգահեռ և նպատակներից throughput (օրինակ, 1 կուսակցությունը կայուն 5-20 MB/s SSD/10GbE)։

7) Դիտողությունն ու ալերտները

Ընդհանուր

Lag/Backlog (հաղորդագրություններ/բայթ), հաղորդագրությունների age (p95/p99), error-rate, DLQ-rate։

«Հրատարակման արտադրման» ժամանակը (end-to-end)։

Կախվածության քարտեզը 'վաճառող www.brocer wwww.condumer։

RabbitMQ:
  • Կապերը, ջրանցքները, ոչ-acked հաղորդագրությունները, «memory _ alarm», «entk _ free _ limit», «queue length» p95։
  • Corrum-ի զեկույցները (leader, Raft log, propachi 'www.rum www.t 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) Անվտանգություն և մուլտֆիլմ-տենանտիզմ

TMS-transit-ի կոդավորումը, վավերացումը (SASL/PLAIN/SCPS/OAuth, mTSA)։

Հեղինակային իրավունքը 'vhost/permissions (RabbitMQ), ACL-ը տոպիկի/խմբի վրա (Kafka)։

Քվոտաներ ՝ կապի, ալիքների, հերթի չափի/տոպիկի, հրապարակման/կարդալու արագության վրա։

Մեկուսացումը միջին (dev/stage/2019) և namespace/vhost-ով։

9) Շահագործումը և թյունինգը

RabbitMQ

Բացեք exchanges/queues հանգույցներով (CPU/IO)։

Lazy queues (հաղորդագրություններ սկավառակի վրա) մեծ ֆորումների համար։ խուսափեք «տաք» հերթերից առանց շարդինգի։

Corrum Queues-ը HA-ի համար։ պլանավորեք 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-tuning (swappiness ցածր, ալյումինե լիմիտներ)։

`acks=all`, `linger. 07 '(մարտկոցը), "compression. = zstd '/lz4 համար։

Սպառողի պարամետրերը '' max։ poll. interval. ms`, `max. poll. records`, `fetch. min. bytes`.

Retention-ը և compaction-ը repley-ի հավասարակշռությունն է։

Վստահելի հրատարակման օրինակ (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 (Avro/JSON/Delobuf) և համատեղելիությունը («BACKWARD/FORWARD/FASE»)։

Kafka Streams/ksqlDB: stateful վիրահատություն, պատուհաններ, ագրեգատներ։

RabbitMQ Shovel/Federation-ը կլաստերների/կենտրոնների միջև փոխանցումն է։

Օպերատորներ K8s: Strimzi (Kafka), RabbitMQ Cluster Operics; GitOps-մանիֆեստներ։

11) Ներդրման թուղթ (0-45 օր)

0-10 օր

Որոշեք use-cult 'a: Թիմեր/tasks (RabbitMQ), իրադարձություններ/աուդիտ (Kafka)։

Ընտրել բանալիներ («routing key »/« partenskey»), SLO-ին տալ «վերամշակման հրատարակություն»։

Հիմնական անվտանգության քաղաքականությունները (TFC, ACL), քվոտաները, DLQ/TTL։

11-25 օր

Ներդրել box/inbox, idempotention և dedup։

Տեղադրեք ռետրերը backoff (Rabbit: TTL + DLX; Kafka: retry topics).

Dashbords: lag, age, DLQ-rate, end-to-end latency; ալերտներ։

26-45 օր

Թյունինգը 2019: www.fetch/acks (Rabbit); partitions/acks/batch (Kafka).

DR ընթացակարգերը (հացահատիկի/կրկնօրինակումը), հանգույցների ձախողման թեստերը։

Փաստաթղթավորել իրադարձությունների պայմանագրերը (սխեմաները) և ինտեգրման քաղաքականությունը։

12) Anti-patterna

Մեկ «համընդհանուր» գործիք բոլոր խնդիրների համար։

DLQ/TTL-ի բացակայությունը 'հավերժական թունավորիչներ (poison drages)։

Անսահմանափակ 'www.fetch' - սպառողների սովը, p99 աճը։

Kafka-ն առանց արգելքի հաստատեց կարգի/տաք կուսակցության կորցումը լռելյայն։

«Exactly-once» -ը առանց իրական կարիքների/կարգապահության անվտանգության կեղծ զգացողություն է։

Գաղտնիքները/տրամաբանությունները կոդում, առանց TMS/ACL-ի։

Hardcod սխեմաներ/հաղորդագրությունների տարբերակներ առանց Registry և խմբակցությունների։

13) Հասունության մետրերը

Lag/age SLO-ն կատարվում է ժամանակի 3699 տոկոսը։ DLQ-rate-ը վերահսկողության տակ է։

Idempotenty-ը ծածկում է քննադատական ճանապարհների 100 տոկոսը։ Box/inbox-ը ներդրված է։

Retention/compaction-ը տեղադրված է, չի կոտրում սպառողներին։

Alerts ISR/URP (Kafka) և Raft/սկավառակի լիմիտներ (Rabbit)։

Իրադարձությունների պայմանագրերը տարբերակվում են (Schema Registry), համատեղելիությունը փորձարկվում է CI-ում։

Dragame-days 'հանգույցի/brocer/AZ-ի հրաժարվելը, վերականգնման ստուգումը։

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 Consumer (գաղափարներ)

java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) Եզրակացություն

RabbitMQ-ը և Kafka-ը լուծում են առաջադրանքների տարբեր դասարաններ ՝ թիմեր/տաշկի և հարուստ միկրոօրգանիզմներ իրադարձությունների երկարաժամկետ ամսագրի և մեծացված սթրիմինգի դեմ։ Հաջողությունը ճիշտ առաքման սեմանտիկներում է, գաղափարախոսության կարգապահությունը, մտածված հիմնականը, գետերը/DLQ, դիտարկումը և խիստ անվտանգությունը։ Կառուցեք կառուցվածքի շուրջ ինժեներական պրակտիկան 'www.box/inbox, սխեմաներ և GitOps քաղաքականություն, և ձեր ինտեգրումը կդառնա կանխատեսելի, մեծացված և կայուն։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։