کارگزاران پیام
1) چرا کارگزاران پیام
کارگزار تولید کنندگان و مصرف کنندگان را با زمان/سرعت/قابلیت اطمینان آزاد می کند:- حداکثر بافر و صاف کردن، backprescher.
- خواندن/نوشتن مقیاس به طور مستقل.
- قابلیت مشاهده و بازپخش اتفاقات
- الگوهای معماری: رویداد محور، CQRS، منابع رویداد، صندوق خروجی/صندوق ورودی.
2) مدل های اساسی و شرایط
2. 1 کافکا (مدل ورود به سیستم)
موضوع → احزاب (سیاهههای مربوط به سفارش) → جبران از مصرف کنندگان.
گروه مصرف کننده: خواندن موازی، تعادل حزب.
حفظ زمان/حجم ؛ تراکم کلیدی
معناشناسی: حداقل یک بار، با تنظیمات - دقیقاً یک بار (تولید کنندگان بی نظیر + معاملات).
سفارش: تضمین شده در حزب.
2. 2 NATS (افراد، تاخیر کم)
موضوع (تم) با سلسله مراتب و wildcards ('foo. '، فو. >`).
حالت ها: میخانه/زیر، صف گروه (فن با توزیع کار)، درخواست پاسخ (RPC سریع).
هسته NATS - کوتاه مدت، تاخیر فوق العاده کم ؛ JetStream - تداوم/حفظ/تکرار.
سفارش: بهترین تلاش، هیچ تضمین قوی جهانی ؛ با JetStream - سفارش در جریان، اما در صورت شکست، تغییر مجدد نادر است.
3) معنای تحویل و سازگاری
Idempotence و dedup مسئولیت برنامه/کبودی است، حتی زمانی که «دقیقا یک بار» در کافکا.
4) سفارش، پارتیشن بندی و کلید
کافکا
انتخاب کلید پیام تعیین حزب → نظم محلی قوی.
Ключи: aggregate _ id، tenant _ id، order _ id. اجتناب از کلیدهای داغ
تعادل: N حزب ≈ خواندن سطح موازی.
NATS
در Core، گروه صف تعادل را انجام می دهد.
JetStream Stream توسط افراد جابجا می شود ؛ تاکید بر فن خروجی/فن با تاخیر کم.
5) حفظ، پخش و تراکم
کافکا
حفظ: "حفظ. ms/bytes '.
تراکم: «آخرین مقدار توسط کلید» را ذخیره می کند (مناسب برای عکس های فوری/کش/ساگا).
پخش: هر مصرف کننده می تواند آفست ها را «عقب» کند.
جت استریم
جریان: فایل/یادداشت backends، سیاست ذخیره سازی بر اساس زمان/بایت/تعداد پیام ها.
مصرف کنندگان: کشیدن/فشار، با دوام/زودگذر، فیلتر توسط پیشوندهای موضوع.
پخش: ارسال مجدد یا خواندن از ابتدا/افست مانند (دنباله).
6) معاملات، خروجی و سازگاری
کافکا
تولید کننده بی نظیر ("فعال کنید. idempotence = درست '): حفاظت در برابر تکراری.
معاملات: ضبط اتمی چند دسته + متعهد مصرف کننده آفست → الگوی خواندن-فرآیند-نوشتن بدون «سوراخ».
Transactional Outbox: یک رکورد از یک رویداد تجاری و یک خط خروجی در یک معامله پایگاه داده، کارگر در کافکا منتشر می کند.
NATS
هیچ «جریان متقابل» معاملات به عنوان در کافکا وجود دارد; استفاده از صندوق خروجی/صندوق ورودی و مصرف کنندگان idemotent (کلید، deadstore).
7) RPC و درخواست پاسخ
کافکا برای RPC نامناسب است (سربار بالا، سفارش/پاسخ مشکل تر است). از دستورات/رویدادهای ناهمزمان استفاده کنید.
NATS: ایده آل برای درخواست پاسخ (میلی ثانیه، همبستگی، وقفه).
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) عملیات و توپولوژی
8. 1 کافکا
خوشه: کارگزاران + ZooKeeper (قبل از نسخه های قدیمی) یا KRaft (ابرداده جدید).
تکرار - RF≥3 منطقه، ISR/کنترل کننده
چند منطقه: MirrorMaker 2/Cluster اتصال ؛ دارایی-بدهی/دارایی-دارایی با سیاست های درگیری.
ظرفیت دیسک/شبکه: خواندن از «throughput × retention × replica».
8. 2 نات
خوشه: بسیاری از گره ها، فوق العاده خوشه (جغرافیایی توزیع)، leafnodes برای لوازم جانبی/لبه.
JetStream: قرار دادن جریان توسط مجموعه گره (قرار دادن)، تکرار (R = 1.. 5).
WAN: تاخیر قابل پیش بینی کم، فدراسیون آسان است.
9) ایمنی
کافکا
TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL در موضوعات/گروه ها/معاملات.
رمزگذاری «در حالت استراحت» (OS/disks) + سیاست های شبکه.
NATS
هویت nkey/JWT، اپراتور حساب، در هر موضوع ACL.
mTLS بین گره ها و مشتریان.
جداسازی مستاجر (حساب ها) + محدودیت ها.
10) قابلیت مشاهده و معیارهای عملکرد
کافکا
Брокер: 'BytesIn/Out', 'RequestQueue', 'UnderReplicatedPartitions', GC/FS stats.
موضوع/بخش: 'logEndOffset'، تاخیر مصرف کننده (بحرانی).
تولید کننده/مصرف کننده: retrai، 'دسته ای. اندازه «،» طول می کشد. خانم، بفرمایید. حداقل بایت، خطاها.
ابزار: JMX، کروز کنترل (دوباره تعادل)، طرح رجیستری.
NATS/جت استریم
سرور: conn/msgs/sec، RTT، CPU/mem، تشخیص مصرف کننده آهسته.
JetStream: در هر جریان/مصرف کننده - تاخیر، redeliveries، acks، بایت ذخیره سازی.
مانیتورینگ: ساخته شده در نقطه پایانی، nsc/adm-CLI، داشبورد.
11) عملکرد و تنظیم
کافکا
بوچ های بزرگ و معطل کردن ms 'improve توان و فشرده سازی p99.
فشرده سازی (lz4/zstd) موجب صرفه جویی در شبکه/دیسک می شود.
تعداد پارتیشن های تعداد مصرف کنندگان/هسته، اما سربار نیست.
درایو: NVMe ترجیح داده می شود، XFS/EXT4 با «noatime».
NATS
پیام های کوچک، بسیاری از اتصالات عادی هستند ؛ گروه های صف را «گسترده» نگه دارید.
JetStream: لحن 'max _ ack _ pending', کشش در مقابل فشار, اندازه دسته.
فشار پس زمینه: «FlowControl»، «IdleHeartbeat»، محدودیت های سمت سرور.
12) الگوهای ادغام
صندوق خروجی/صندوق ورودی (در هر دو کافکا و NATS).
SAGA: ارکستراسیون رویداد ؛ پدربزرگ توسط 'saga _ id + step'.
تغییر ضبط داده ها (CDC): Debezium → کافکا ؛ in NATS - الگوی «publisher from database triggers/logs».
پردازش جریان: جریان کافکا/فلینک/جرقه ؛ در NATS - پردازنده های شخص ثالث/ویژگی ها، مصرف کنندگان JetStream.
صف نامه مرده (DLQ) و سیاست های مجدد (عقب نشینی نمایی + لرزش).
13) نمونه های پیکربندی
13. 1 کافکا: ساخت یک موضوع و تولید کننده
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 جریان کافکا: ماشینکاری idemotent (طرح)
java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");
13. 3 NATS JetStream: جریان + مصرف کننده (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-پاسخ (برو)
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) کافکا در مقابل NATS انتخاب کنید: راهنمای سریع
ما نیاز به پخش، حفظ طولانی مدت، فشرده سازی، فرآیندهای جریان سنگین → کافکا.
نیاز به RPC سریع، فن/فن با میکرو تاخیر، عملیات ساده، لبه/IoT → NATS (هسته).
ما نیاز به پشتکار + فن، اما بدون پلت فرم «ورود» سنگین → NATS JetStream.
کلید دقیق و سفارش معامله → کافکا.
15) برنامه ریزی ظرفیت (ساده شده)
کافکا
1. بهره وری: 'ورودی _ MBps RF 86400' → دیسک.
2. دسته ها: 'target _ concurrency' × سهام 1. 5-2 ×
3. شبکه: p99 + تکرار + فشرده سازی تولید کننده.
NATS/جت استریم
1. پیامها/ثانیه و میانگین → توان عملیاتی.
2. نگهداری × کپی → ذخیره سازی.
3. مصرف کنندگان محدودیت (ACK در انتظار، redeliveries)، CPU برای سریال.
16) عملیات ایمن: چک لیست
- TLS/mTLS فعال، اسرار چرخش.
- ACL/حساب/سهمیه (در هر مستاجر).
- Idempotency در مصرف کنندگان، DLQ، و عقب نشینی jitter.
- تاخیر/توان/نظارت بر خطا ؛ هشدار در URP (کافکا)، طوفان redelivery (NATS).
- داشبورد ظرفیت: پارتیشن، ذخیره سازی، p99.
- تست شکست گره/منطقه، بازی روز، پخش/backfill.
- کلیدهای Schema Registry/JSON Schema مستند شده اند.
- سیاست های حفظ/فشرده سازی/TTL با انطباق هماهنگ شده است.
- نسخه های کارگزار/مشتری به طور مرتب به روز می شوند ؛ سازگاری پروتکل سیم تایید شده است.
17) ضد الگوهای
کلید داغ (تمام رویدادهای یک شناسه) → یک جریان «جوش». شاردی/بافر.
عقب نشینی بدون idempotency → اثرات دوگانه.
پیام های بزرگ (MB-tens) → تقسیم بندی GC/مکث. محموله را در شیء ذخیره کنید، پیوندها را ارسال کنید.
مخلوط کردن RPC و جریان در کافکا → چرخه زندگی پیچیده/سفارش.
JetStream به عنوان «DWH طولانی مدت» → خارج از برچسب ؛ فروشگاه برای مدت زمان طولانی در تخت شی/ستون.
بدون DLQ → پیام های «سمی» چرخش بی پایان.
نگهداری فراموش شده → دیسک ها کامل، توقف خوشه ای هستند.
18) سوالات متداول
س: آیا می توانم «دقیقا یک بار» در پایان خط لوله انجام دهم ؟
A: در عمل - به طور موثر بله: کافکا (تولید کننده idempotent + معاملات) و غرق idempotent (کلید، upsert). در NATS - از طریق idempotence/dedup در برنامه.
س: چه چیزی را برای یک میلیون RPCs کوچک/ثانیه انتخاب کنید ؟
A: هسته NATS: Microlatency، request-reply، اتصالات نور و گروه صف.
س: نیاز به تراکم و عکس های فوری از ثروت ؟
A: پاکسازی کافکا с. policy = compact ', key = aggregate/resource.
س: چگونه برای مقابله با تاخیر ؟
A: افزایش تعداد دسته/کارگران، کاهش زمان پردازش، دسته و پیش فرض، بهینه سازی deserialization، عمودی تقویت کارگزاران/درایو.
س: چند منطقه و DR ؟
A: کافکا - MirrorMaker 2/Cluster پیوند، دارایی با RPO≈sekundy. NATS - supercluster/leafnodes ؛ JetStream آینه/کپی بر اساس منطقه.
19) مجموع
Kafka و NATS حالت های مختلف را بسته می کنند: Kafka - سیاهههای مربوط به رویداد با دوام، توان بالا، transactionality و پخش ؛ NATS یک اتوبوس فوق سبک برای تاخیر کم، RPC و فن ساده است، با JetStream برای پایداری. انتخاب خود را از معانی تحویل، سفارش و نگهداری، تاخیر و هزینه های عملیاتی انتخاب کنید. طراحی کلیدها/احزاب، نگهداری، DLQ و قابلیت مشاهده - و معماری رویداد شما قابل پیش بینی، مقیاس پذیر و قابل اعتماد خواهد بود.