Հաղորդագրությունների բրոկերները
1) Ինչո՞ ւ են հաղորդագրությունների բրոկերները
Բրոքերը փակցնում է արտադրողներին և կոնսյուրմերին ժամանակի/արագության/հուսալիության համար
Բուֆերիզացիա և պիկի հարթեցում, բեքսպրեսեր։
Կարդալու/գրելու մեծացումը անկախ է։
Իրադարձությունների դիտարկումը և վերարտադրումը (replay)։
Ճարտարապետական արտոնագրեր ՝ event-driven, CQRS, event sourcing, www.box/inbox։
2) Հիմնական մոդելները և տերմինները
2. 1 Kafka (լոգոն մոդել)
Ռուսական կուսակցության (կարգավորված լոգներ) տոպիկը տեղադրված է կոնսուլների մոտ։
Consumer Group: ընթերցանության զուգահեռ, կուսակցության հավասարակշռությունը։
Retenshn ժամանակի/ծավալի; ընկերակցություն բանալիով։
Սեմանտիկա 'առնվազն at-lement-once, պարամետրերի դեպքում' effectively exactly-once (idempotent արտադրողներ + գործարքներ)։
Կարգը 'երաշխավորված է կուսակցության ներսում։
2. 2 NATS (թեմաներ/www.jects, ցածր ուշացում)
Express (թեման) հիերարխիայի և willdcarts («foo. ',» ֆո. >`).
Ռեժիմները ՝ pub/sub, queue-entups (fan-aut աշխատանքի բաշխմամբ), request-reply (արագ RPC)։
AleksNATS-ը էֆեմեր է, գերձայնային լատենտ; JetStream-ը անձնավորություն/retenshn/կրկնություն է։
Կարգը 'լավագույն ուժ, առանց ուժեղ գլոբալ երաշխիքի։ JetStream-ի հետ 'stream- ի վրա կարգավորում, բայց հնարավոր է հազվագյուտ անկարգություններ։
3) Առաքման և ներդաշնակության սեմանտներ
Idempotenty-ը և dedup-ը հավելվածի/սինքի պատասխանատվությունն է, նույնիսկ Kafka-ում «exactly-once» -ի դեպքում։
4) Կարգը, կուսակցությունը և բանալիները
Kafka
Հաղորդագրության բանալին ընտրելը որոշում է կուսակցությանը տեղական ուժեղ կարգը։
Ключи: `aggregate_id`, `tenant_id`, `order_id`. Խուսափիր տաք հետևանքներից։
Հավասարակշռություն ՝ N կուսակցությունները ցույց են տալիս ընթերցանության զուգահեռ մակարդակը։
NATS
Բելգիայում հավասարակշռությունը դարձնում է queue-group։
JetStream Stream-ում շարդինգում է jects-ով։ տեղադրված է լայն ֆան-աութ/ֆան-in 'փոքր ուշացումով։
5) Retenshn, replay և կոմպակտիա
Kafka
Retention: `retention. ms/bytes`.
Compaction: պահպանում է «վերջին արժեքը բանալին» (հարմար է դիպուկահարների/կեշի/սագի համար)։
Replay: Ցանկացած վահանակ կարող է «լվանալ» օֆսետները։
JetStream
Streams: Windows/memori backenda, ժամանակի/baythes/col-vu հաղորդագրությունների պահպանման քաղաքականություն։
Consumers: p.com/push, durable/ephemeral, ֆիլտրը համապատասխան պրեֆիքսների վրա։
Replay: redelivery կամ կարդալ սկզբից/www.set-like (sequence)։
6) Գործարքներ, ֆայլեր և համաձայնություն
Kafka
Idempotent Producer (`enable. idempotence = 105 "), պաշտպանություն դուբլներից։
Transactions: Մի քանի կուսակցությունների ատոմային ձայնագրումը + consumer-intersets-ն է, read-process-write-ը առանց «ծխի»։
Transactional Disbox-ը 'բիզնես իրադարձության ձայնագրումը և BD գործարքների աղյուսակը, գողերը հրապարակում է Kafka-ում։
NATS
Չկա «փոխաբերական» գործարքներ, ինչպես Kafka-ում։ օգտագործեք www.box/inbox և idempototent վահանակներ (բանալիներ, dedup-stor)։
7) RPC-ն և հարցման պատասխանը
Kafka-ի համար անհարմար է (բարձր overhead, կարգը/պատասխանները ավելի բարդ են)։ Օգտագործեք ասինխրոն թիմեր/իրադարձություններ։
NATS: կատարյալ է request-reply-ի համար (milisekunds, կորլացիա, թայմաուտներ)։
Օրինակ (Go, NATS request-reply)
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) Վիրահատություն և տեղաբանություն
8. 1 Kafka
Կլաստեր ՝ բրոկերներ + ZooKeeper (մինչև հին տարբերակները) կամ KRaft (նոր մետադատ)։
Կրկնօրինակումը ՝ RF 353 գոտիներով, ISR/վերահսկիչներով։
MirrorMaker 2/Cluster Linking; 71-լոկոմոտիվ/71-2019 հակամարտական քաղաքական գործիչների հետ։
Սկավառակի/ցանցային հզորությունը 'հաշվել «throughput medretention replicas» -ից։
8. 2 NATS
Cluster: Շատ հանգույցներ, super-cluster (երկրաչափություն), leafnodes ծայրամասի/edge համար։
JetStream-ը հանգույցների (placom), կրկնօրինակումը (R = 1.. 5)։
WAN 'կանխատեսելի ցածր ուշացումներ, թեթև ֆեդեգրաֆիա։
9) Անվտանգություն
Kafka
TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL-ը տոպիկի/խմբի/գործարքի վրա։
«Հանգստի մեջ» (OS/սկավառակ) + ցանցային քաղաքականության կոդավորումը։
NATS
nkey/JWT ինքնությունը, հաշիվների օպերատորը, ACL-ի 71-ը։
MTRC-ը հանգույցների և հաճախորդների միջև։
Վարձակալների մեկուսացումը (accounts) + limits։
10) Դիտողությունն ու գործառնական չափումները
Kafka
Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Տոպիկ/կուսակցություն ՝ «logEndSystet», consumer lag (քննադատական)։
Արտադրողը/կոնսումերը 'retray,' batch։ size`, `linger. ms`, `fetch. min. bytes ', սխալներ։
Գործիքներ ՝ JMX, Cruise Corl (re-հավասարակշռություն), Schema Registry։
NATS/JetStream
Սերվերը 'conn/www.gs/sec, RTT, CPU/mem, slow consumer դետեկտիվ։
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Մոսկվա 'ներկառուցված endpoint, nsc/adm-CLI, dashbords։
11) Արտադրողականությունը և թյունինգը
Kafka
Մեծ մարտեր և "linger. 24' բարելավում են throughput-ը և սեղմում p99-ը։
Ֆինլանդիան (lz4/zstd) խնայում է ցանցը/սկավառակը։
num. partitions սպառողների/միջուկների քանակով, բայց ոչ թե հատել (overhead)։
Սկավառակներ ՝ NVMe նախընտրելի, XIV/EXT4-ի հետ 'www.atime։
NATS
Փոքր հաղորդագրություններ, շատ կոմպոզիցիաներ 'նորմ։ պահեք queue delups «լայն»։
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.
12) Patterns
Medibox/Inbox (Kafka-ում և NATS-ում)։
SAGA 'նվագախումբը իրադարձություններով։ dedup 'saga _ id + step "։
Change Data Capture (CDC): Debezium → Kafka; NATS-ում «publisher» -ը BD-Strigger/logs-ից։
Stream processing: Kafka Streams/Flink/Spark; NATS-ում երրորդ կողմի կոմպոզիցիաներ/գործառույթներ են, JetStream consumers-ը։
Dead Letter Queue (DLQ) և retry քաղաքականությունը (էքսպոնենցիալ backoff + jitter)։
13) Միգրացիայի օրինակներ
13. 1 Kafka 'տոպիկի և արտադրողի ստեղծումը
bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd
13. 2 Kafka Streams: idempotent (ուրվագիծ)
java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");
13. 3 NATS JetStream: stream + consumer (nats CLI)
bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old
nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"
13. 4 NATS Request-Reply (Go)
go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})
14) Kafka vs NATS-ի ընտրությունը արագ ուղեցույց է։
Անհրաժեշտ է replay, երկար retenshn, կոմպակտ, ծանր հոսող գործընթացներ Kafka։
Անհրաժեշտ է արագ RPC, fan-aut/fan-in միկրոլատենցիա, պարզ գործողություն, edge/IoT NATS (Իսպանիա)։
Պետք է անձնավորություն + ֆան-աութ, բայց առանց NATS JetStream-ի կոդավորման ծանր «լոգային» պլատֆորմի։
Kafka-ի բանալիների և գործարքների խիստ կարգը։
15) Տարաների պլանավորումը (պարզեցված)
Kafka
1. Անցնող '"inbound _ MBps 35RF www.retention _ days 2486400' 108 սկավառակ։
2. Կուսակցությունը '«target _ concurrency» ռուսական արգելակ 1։ 5–2×.
3. Ցանցը ՝ p99 + կրկնօրինակումը + ագրեսիայի արտադրողը։
NATS/JetStream
1. Հաղորդագրություններ/վայրկյան և միջին չափսը troughput է։
2. Retention×replicas → storage.
3. Consumers-ը (ack-pending, redeliveries), CPU-ն սերիալիզացիայի վրա։
16) Անվտանգ վիրահատություն 'չեկ թերթ
- TFC/mTSA-ն միացված է, գաղտնիքները պտտվում են։
- ACL/հաշիվներ/քվոտաներ (per-tenae)։
- Idempotenty condumers, DLQ և retrai ջիթերի հետ։
- Dislag/throughput/սխալ; Alerts URP (Kafka), redelivery փոթորիկ (NATS)։
- Capacity dashboards: կուսակցություն, storage, p99։
- Հանգույցների/գոտու մերժման թեստեր, game-days, replay/backfill։
- Փաստաթղթավորված են կուսակցության և սխեմայի բանալիները (Schema Registry/JSON Schema)։
- Retenshna/compaction/TTL-ի քաղաքական գործիչները համաձայնեցված են հաճույքի հետ։
- Բրոկերների/հաճախորդների տարբերակները պարբերաբար նորարարվում են. wire-արձանագրության համատեղելիությունը ստուգված է։
17) Anti-patterna
Տաք բանալին (ID-ի բոլոր իրադարձությունները) մեկ «եռացող» հոսք է։ Chardiruret/wwww.H.
Retrai առանց idempotenty-ը կրկնակի ազդեցություն ունի։
Հսկայական հաղորդագրությունները (MB-տասնյակ) բացատրում են GC-ի հատվածները/դադարները։ Պահեք payload օբյեկտի մեջ, ուղարկեք հղումներ։
RPC-ի խառնուրդը և Kafka-ում սթրիմինգը կանխատեսում են բարդ կյանքի ցիկլ/կարգ։
JetStream-ը որպես «երկարաժամկետ PPH» նախատեսված չէ։ երկար ժամանակ պահեք օբյեկտի/զանգի պատերի մեջ։
Ոչ DLQ-ը «թունավոր» հաղորդագրությունները անվերջ պտտվում են։
Մոռացված ռետենշը ծածկված է, կանգառը։
18) FAQ
Q 'Հնարավո՞ ր է արդյոք «exactly-once» -ի վերջում։
A 'Գործնականում' արդյունավետորեն այո 'Kafka (idempotent արտադրող + գործարք) և idempotent կապեր (բանալին, ups.ru)։ NATS-ում 'idempotenty/dedup-ի միջոցով։
Q 'Ի՞ նչ ընտրել միլիոն փոքր RPC/վրկ համար։
A: NATS Express: միկրոլատենտություն, request-reply, թեթև կոնեկտներ և queue-produps։
Q 'Անհրաժեշտ է կոմպակտացիա և հարմարավետություն։
A: Kafka с `cleanup. policy = compact ", բանալին = ագրեգատ/ռեսուրս։
Q 'Ինչպե՞ ս պայքարել ճամբարի դեմ։
Ա 'Ավելացրեք կուսակցությունների/վորկերների թիվը, նվազեցրեք վերամշակման ժամանակը, մարտերը և www.fetch-ը, օպտիմիզացնել դեսերիալիզացիան, ուղղահայաց ուժեղացնել բրոկերները/սկավառակները։
Q: Molregion և DR։
A: Kafka - MirrorMaker 2/Cluster Linking, RPO-ի 71 վայրկյան։ NATS — supercluster/leafnodes; JetStream-ը զսպում/կրկնօրինակում է գոտիներով։
19) Արդյունքները
Kafka-ը և NATS-ը փակում են տարբեր ռեժիմներ ՝ Kafka-ը իրադարձությունների երկարաժամկետ ամսագրեր են, բարձր throughput, գործարք և reple; NATS-ը գերբնական անվադողեր է ցածր ուշացումների համար, RPC-ը և պարզ ֆան-աուտը, JetStream-ից անձնավորության համար։ Ընտրեք առաքման, կարգուկանոնի, լատենտության և վիրահատական ծախսերի իմաստաբանությունից։ Նախագծեք բանալիներ/կուսակցություններ, retenshn, DLQ և դիտողություններ, և ձեր իրադարձական ճարտարապետությունը կլինի կանխատեսելի, մեծացված և հուսալի։