GH GambleHub

کارگزاران پیام

1) چرا کارگزاران پیام

کارگزار تولید کنندگان و مصرف کنندگان را با زمان/سرعت/قابلیت اطمینان آزاد می کند:
  • حداکثر بافر و صاف کردن، backprescher.
  • خواندن/نوشتن مقیاس به طور مستقل.
  • قابلیت مشاهده و بازپخش اتفاقات
  • الگوهای معماری: رویداد محور، CQRS، منابع رویداد، صندوق خروجی/صندوق ورودی.

2) مدل های اساسی و شرایط

2. 1 کافکا (مدل ورود به سیستم)

موضوع → احزاب (سیاهههای مربوط به سفارش) → جبران از مصرف کنندگان.
گروه مصرف کننده: خواندن موازی، تعادل حزب.

حفظ زمان/حجم ؛ تراکم کلیدی

معناشناسی: حداقل یک بار، با تنظیمات - دقیقاً یک بار (تولید کنندگان بی نظیر + معاملات).
سفارش: تضمین شده در حزب.

2. 2 NATS (افراد، تاخیر کم)

موضوع (تم) با سلسله مراتب و wildcards ('foo. '، فو. >`).
حالت ها: میخانه/زیر، صف گروه (فن با توزیع کار)، درخواست پاسخ (RPC سریع).
هسته NATS - کوتاه مدت، تاخیر فوق العاده کم ؛ JetStream - تداوم/حفظ/تکرار.
سفارش: بهترین تلاش، هیچ تضمین قوی جهانی ؛ با JetStream - سفارش در جریان، اما در صورت شکست، تغییر مجدد نادر است.

3) معنای تحویل و سازگاری

معناشناسیکافکاهسته NATSجت استریم ناتس
در یک بارنادر (معمولا غیر ضروری)پیش فرض (بدون تایید)آیا می توانم
حداقل یک باراستاندارد (مرتکب افست پس از پردازش)با سیاست ACKاستاندارد (سیاست ack، تحویل مجدد)
دقیقا یک بار (موثر)تولید کننده idempotent + معاملات ؛ سینک های بی نظیرN/یکدر سطح مصرف کننده (idempointency) به دست می آید، کارگزار معاملات را در کافکا انجام نمی دهد

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: ایده آل برای درخواست پاسخ (میلی ثانیه، همبستگی، وقفه).

مثال (برو، 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 و قابلیت مشاهده - و معماری رویداد شما قابل پیش بینی، مقیاس پذیر و قابل اعتماد خواهد بود.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.