Билдирүү брокерлери
1) Эмне үчүн брокерлер билдирүүлөр
Брокер убакыттын/ылдамдык/ишенимдүүлүк боюнча өндүрүүчүлөрдү жана консультанттарды чечет:- Буферизация жана тегиздөө чокулары, backpresher.
- Окуу/жазууну өз алдынча масштабдоо.
- Байкоо жана ойнотуу (replay) окуялар.
- Архитектуралык үлгүлөр: event-driven, CQRS, event sourcing, outbox/inbox.
2) Негизги моделдер жана терминдер
2. 1 Kafka (Логин модели)
Топик → партия (иреттелген Логи) → Консумерлердин офсеттери.
Consumer Group: окуу параллелизми, партияларды тең салмактоо.
убакыт/көлөмү боюнча Retenshn; ачкыч боюнча компакция.
Семантика: минималдуу - at-least-once, жөндөөлөрдө - effectively exactly-once (демократиялык өндүрүүчүлөр + транзакциялар).
Тартип: партиянын ичинде кепилденет.
2. 2 NATS (темалар/subjects, төмөн кечигүү)
Тема (тема) менен иерархия жана wildcartes ('foo.', 'foo. >`).
Режимдер: pub/sub, queue-groups (иш бөлүштүрүү менен күйөрман), request-reply (тез RPC).
Core NATS - эфемердик, өтө төмөн латенттүүлүк; JetStream - туруктуу/retenshn/кайталоо.
Тартиби: мыкты күч-аракет, күчтүү глобалдык кепилдик жок; JetStream менен - агымда тартипке келтирүү, бирок баш тартууда сейрек өзгөрүүлөр болушу мүмкүн.
3) Жеткирүү семантикасы жана ырааттуулук
Демпотенттик жана дедуп - колдонмо/синка жоопкерчилиги, ал тургай, "exactly-once" менен Kafka.
4) Тартип, партиялаштыруу жана ачкычтар
Kafka
Билдирүү ачкычын тандоо партияны аныктайт → күчтүү жергиликтүү тартип.
Ключи: `aggregate_id`, `tenant_id`, `order_id`. ысык ачкычтар алыс.
Баланс: Партиялардын N ≈ окуу параллелизминин деңгээли.
NATS
Core балансы queue-топту түзөт.
JetStream Stream subjects; бир аз кечигүү менен кеңири күйөрман-аут/күйөрман-ин басым.
5) Retenshn, реплика жана компакция
Kafka
Retention: `retention. ms/bytes`.
Compaction: "акыркы ачкыч маанисин" сактайт (snapshot/кэш/саг үчүн ылайыктуу).
Replay: Ар бир консюмер офсеттерди "артка кайтара" алат.
JetStream
Streams: File/Memory Backends, убакыт сактоо саясаты/байт/Колл-ву билдирүүлөр.
Consumers: pull/push, durable/ephemeral, subject-префикстер чыпкасы.
Replay: redelivery же башынан окуу/offset-like (sequence).
6) бүтүмдөр, outbox жана ырааттуулук
Kafka
Idempotent Producer (`enable. idempotence = true '): дубль коргоо.
Transactions: бир нече партиялардын атомдук жазуу + commit consumer-offsets → "тешиктер" жок үлгү read-process-write.
Transactional Outbox: бир DB бүтүмдөрдүн бизнес-окуя жана outbox-саптарды жазуу, Воркер Kafka жарыялайт.
NATS
Кафкадагыдай "агымдык" транзакциялар жок; outbox/inbox жана демпотенттик консумерлерди колдонуу (ачкычтар, дедуп-стор).
7) RPC жана суроо-жооп
Kafka үчүн RPC ыңгайсыз (жогорку overhead, тартиби/жооптор татаал). Асинхрондук командаларды/окуяларды колдонуңуз.
NATS: request-reply (милисекунддар, корелляция, таймауттар) үчүн идеалдуу.
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) Эксплуатация жана топология
8. 1 Kafka
Кластер: брокерлер + ZooKeeper (эски нускасына чейин) же KRaft (жаңы метадата).
Репликация: RF ≥ 3 зоналары, ISR/контроллерлор.
Көп аймак: MirrorMaker 2/Cluster Linking; актив-пассив/конфликт-саясатчылар менен актив-актив.
Диск/тармак сыйымдуулугу: 'throughput × retention × replicas'.
8. 2 NATS
Cluster: көптөгөн түйүндөр, супер-cluster (гео-бөлүштүрүү), периферия/edge үчүн leafnodes.
JetStream: түйүндөрдүн топтому боюнча агымдарды жайгаштыруу (placement), репликация (R = 1.. 5).
WAN: алдын ала төмөн кечигүү, жеңил Киргизия.
9) Коопсуздук
Kafka
TLS (mTLS), SASL: SCRAM, OAuthBearer.
Топиктер/топтор/бүтүмдөр боюнча ACL.
"Тынч" шифрлөө (OS/дисктер) + тармак саясаты.
NATS
nkey/JWT ID, оператор-эсептер, per-subject ACL.
mTLS түйүндөр жана кардарлардын ортосунда.
Ижарачылардын изоляциясы (accounts) + лимиттер.
10) Байкоо жана эксплуатациялык метрика
Kafka
Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Топик/партия: 'logEndOffset', керектөөчү lag (сын).
Продюсер/консюмер: Retry, 'batch. size`, `linger. ms`, `fetch. min. bytes ', каталар.
Инструменттер: JMX, Cruise Control (ре-баланс), Schema Registry.
NATS/JetStream
Server: conn/msgs/sec, RTT, CPU/mem, slow consumer detection.
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Мониторинг: камтылган endpoint, nsc/adm-CLI, dashboard.
11) Аткаруу жана тюнинг
Kafka
Чоң батчи жана 'linger. ms 'throughput жакшыртуу жана p99 кысып.
кысуу (lz4/zstd) тармак/диск үнөмдөйт.
num. керектөөчүлөрдүн/ядролордун саны боюнча partitions, бирок ашпай (overhead).
дисктер: NVMe артыкчылык, XFS/EXT4 менен 'noatime'.
NATS
Майда билдирүүлөр, көптөгөн байланыштар - норма; queue топтор "кенен".
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.
12) Интеграция үлгүлөрү
Outbox/Inbox (жана Kafka, жана NATS).
SAGA: окуялар менен оркестрлөө; дедуп 'saga _ id + step'.
Change Data Capture (CDC): Debezium → Kafka; НАТСте - "DD-триггерлерден/логдордон publisher" үлгүсү.
Stream processing: Kafka Streams/Flink/Spark; NATS - үчүнчү тараптын процессорлору/функциялары, JetStream колдонуучулары.
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 агымдары: 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 тандоо: тез багыт
Бизге реплика, узакка созулган ретеншн, компакция, оор агым процесстери керек → Kafka.
Бизге тез RPC, күйөрман-аут/микролатенттүүлүк менен күйөрман-ин, жөнөкөй операция, edge/IoT → NATS (Core) керек.
Бизге туруктуулук керек + күйөрман, бирок оор "логикалык" платформа жок → NATS JetStream.
ачкыч жана бүтүм боюнча катуу тартиби → Kafka.
15) жөндөмдүүлүгүн пландаштыруу (жөнөкөйлөштүрүлгөн)
Kafka
1. Өткөрүү: 'inbound _ MBps × RF × retention_days × 86400' → дисктер.
2. Партия: 'target _ concurrency' × запасы 1. 5–2×.
3. Тармак: p99 + репликация + компрессия өндүрүүчүсү.
NATS/JetStream
1. Билдирүүлөр/сек жана орточо көлөмү → throughput.
2. Retention×replicas → storage.
3. Колдонуучулардын лимиттери (ack-pending, redeliveries), сериалдаштыруу үчүн CPU.
16) Коопсуз иштетүү: чек тизмеси
- TLS/mTLS кирет, сырлар айланат.
- ACL/эсептер/квоталар (per-tenant).
- Consumer, DLQ жана Jitter менен Retray боюнча ыктымалдыгы.
- Мониторинг lag/throughput/каталар; URP боюнча алерталар (Kafka), redelivery-бороон (NATS).
- Capacity dashboards: parties, storage, p99.
- түйүндөрдү/зоналарды, оюн-күндөрдү, реплика/арткы тесттер.
- Партиялаштыруу жана схеманын ачкычтары документтештирилген (Schema Registry/JSON Schema).
- Retenshn/Compaction/TTL саясаты комплаенс менен макулдашылган.
- Брокерлердин/кардарлардын версиялары дайыма жаңыланып турат; wire протоколунун шайкештиги текшерилди.
17) Анти-үлгүлөрү
Hot Key (бардык иш-чаралар бир ID) → бир "кайнап" агымы. Chardite/Bufer.
Идемпотенттүүлүк жок Ретраи → дубль эффекттери.
Чоң билдирүүлөр (MB-ондогон) → GC үзүндү/тыныгуу. объектте payload сактоо, шилтемелерди жөнөтүү.
Kafka → татаал жашоо цикл/тартиби RPC жана агымын аралаштыруу.
JetStream катары "узак мөөнөттүү DWH" → максаттуу эмес; объекттерде/колонналарда көпкө сактаңыз.
Жок DLQ → "уулуу" билдирүүлөр чексиз айланат.
Унутулган retenshn → дисктер толуп, кластерди токтотуу.
18) FAQ
Q: Мен "exactly-once" пайплайн аягында эмне болот?
A: иш жүзүндө - натыйжалуу ооба: Kafka (демпотенттик продюсер + бүтүмдөр) жана демпотенттик көк (ачкыч, upsert). NATS - колдонмодогу демпотенттик/дедуп аркылуу.
Q: бир миллион кичинекей RPC/сек үчүн эмне тандоо керек?
A: NATS Core: микролатенттүүлүк, request-reply, жарык байланыштар жана queue-топтор.
Q: Компакция жана snapshot мамлекеттик керек?
A: Kafka с `cleanup. policy = compact ', ачкыч = агрегат/ресурс.
Q: Лаг менен кантип күрөшүү керек?
A: партиялардын санын көбөйтүү/аткаруучулар, иштетүү убактысын азайтуу, батч жана prefetch, десериалдаштыруу оптималдаштыруу, тик брокерлер/дисктер күчөтүү.
Q: көп аймак жана DR?
A: Kafka - MirrorMaker 2/Cluster Linking, RPO ≈ секунд менен активдүү-пассивдүү. NATS — supercluster/leafnodes; JetStream күзгү/реплика зоналары боюнча.
19) Натыйжалары
Kafka жана NATS ар кандай режимдерин жабуу: Kafka - узак мөөнөттүү окуялар, жогорку throughput, транзакциялуулук жана реплика журналдары; NATS - төмөн кечигүү, RPC жана жөнөкөй күйөрман үчүн өтө жеңил дөңгөлөк, туруктуу үчүн JetStream менен. Тандоо семантика жеткирүү, тартиби жана retenshn, жашыруун жана операциялык чыгымдарды. Ачкычтарды/партияларды, retenshn, DLQ жана байкоо - жана окуя архитектура алдын ала, масштабдуу жана ишенимдүү болот.