מתווכי הודעות
1) מדוע מתווכי הודעות
הברוקר מוריד את היצרנים והצרכנים בזמן/מהירות/אמינות:- שיא החציצה והחלקה, תרמילאי.
- קריאה/כתיבה באופן עצמאי.
- יכולת תצפית והילוך חוזר של אירועים.
- תבניות ארכיטקטוניות: מונע אירועים, CQRS, מיקור אירועים, תיבת דוא "ל.
2) מודלים ומונחים בסיסיים
2. 1 קפקא (מודל לוג)
Topice Ach parties (יומנים מסודרים) # קיזוז מהצרכנים.
קבוצת צרכנים: קרא מקבילות, איזון מסיבות.
שמירה לפי זמן/נפח; דחיסת מפתח.
סמנטיקה: מינימום - לפחות פעם אחת, עם הגדרות - ביעילות בדיוק-פעם אחת (יצרני אידמפוטנטים + עסקאות).
סדר: מובטח בתוך המפלגה.
2. 2 NATS (נושאים, latency נמוך)
נושא (נושא) עם היררכיה וכרטיסי בר ('foo. ", 'foo. >`).
מודים: פאב/תת, תור-קבוצות (מאוורר-אאוט עם הפצת עבודה), בקשה-תגובה (RPC מהיר).
CORE NATS-emeral, laterly-low; הזרם - התמדה/שימור/חזרות.
סדר: המאמץ הטוב ביותר, אין ערובה גלובלית חזקה; עם ג 'ט סטרים - הזמנה על הנחל, אבל הזמנה מחודשת נדירה במקרה של כשלים היא אפשרית.
3) משלוח סמנטיקה ועקביות
אידמפוטנטיות ודיאדופ הם האחריות של היישום/חבורה, גם כאשר ”פעם אחת בדיוק” קפקא.
4) סדר, מחיצה ומפתחות
קפקא
בחירת מפתח ההודעה קובעת את הסדר המקומי החזק.
Catilant _ id, "order _ id'. הימנע מפתחות חמים.
איזון: N מצדדים בקריאת רמת המקביליות.
NATS
בליבה, התור-קבוצה עושה את האיזון.
JetStream מדשדש על ידי נבדקים; דגש על מאוורר רחב החוצה/מאוורר עם איחור נמוך.
5) שימור, שידור חוזר ודחיסה
קפקא
שימור: "שימור. ms/bates '.
Compaction: מאחסן את ”הערך האחרון לפי מפתח” (מתאים לתמונות/מטמונים/סאגות).
שידור חוזר: כל צרכן יכול ”להחזיר אחורה” קיזוזים.
JetStream
זרמים: גיבוי קבצים/תזכיר, מדיניות אחסון לפי זמן/בייטים/מספר הודעות.
צרכנים: משוך/דחף, עמיד/זוגי, מסנן לפי קדימות הנושא.
שידור חוזר: redirevely או לקרוא מההתחלה/offset-like (רצף).
6) עסקאות, תיבות ועקביות
קפקא
יצרן אידמפוטנטי ("אפשר. אידמפוטנטיות = אמת): הגנה מפני שכפולים.
עסקאות: הקלטה אטומית של מספר צרורות + תתחייב צרכנות-offsets * read-process-write ללא ”חורים”.
תיעוד של אירוע עסקי וקו מתאר בעסקת מסד נתונים אחת, העובד מפרסם בקפקא.
NATS
אין עסקאות ”חוצה זרם” כמו קפקא; שימוש בתיבת דואר אלקטרוני וצרכני אידמפוטנטים (מפתחות, דסטור).
7) RPC ובקשה-תגובה
קפקא לא נוח ל-RPC (תקורה גבוהה, סדר/תשובות קשות יותר). השתמש בפקודות/אירועים אסינכרוניים.
NATS: אידיאלי עבור בקשה-תגובה (אלפיות שנייה, קורלציה, פסק זמן).
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) מבצע וטופולוגיות
8. 1 קפקא
אשכול: ברוקרים + שומרי (לפני גרסאות ישנות) או Kraft (metadata חדש).
שכפול - אזור RF/3, ISR/Controlers
Multi-Area: Maker 2/Cluster Linking; נכס-אחריות/נכס-נכס עם מדיניות-קונפליקט.
קיבולת דיסק/רשת: קרא מתוך ”throughput × reservation × lockas”.
8. 2 NATS
אשכול: צמתים רבים, אשכול-על (Geo-distribution), עלים עבור פריפרלים/קצה.
Jetstream: מיקום זרמים על ידי צומת סטים (מיקום), שכפול (R = 1.. 5).
איחור נמוך צפוי, פדרציה קלה.
9) בטיחות
קפקא
TLS (mTLS), SASL: ScRAM, OAutheBarer.
ACL בנושאים/קבוצות/עסקאות.
הצפנה ”במנוחה” (OS/disks) + מדיניות רשת.
NATS
זהויות NKy/JWT, חשבונות-מרכזייה, ACL לכל נושא.
אם-טי-אל-אס בין צמתים ללקוחות.
בידוד דייר (חשבונות) + גבולות.
10) יכולת תצפית ומדדי ביצועים
קפקא
'Bytesin/Out', 'Country Queue', 'Underreplication Partations', סטטיסטיקות GC/FS.
נושא/חלק: LogEndOffset, עיכוב צרכני (קריטי).
מפיק/צרכן: retrai, "אצווה. גודל ”,” להישאר. גב ',' להביא. מוקשים, בתים, טעויות.
כלים: JMX, Cruise Control (איזון מחדש), Schema Registry.
NATS/JetStream
שרת: conn/msgs/sec, RTT, CPU/Mem, זיהוי צרכנים איטי.
JetStream: לכל זרם/צרכן - lag, redireview, acks, bytes אחסון.
ניטור: סוף נקודה מובנית, nsc/adm-CLI, לוחות מחוונים.
11) ביצועים וכיוונון
קפקא
גשושיות גדולות ונשארות. גברת מוכיחה תפוקה ודחיסה של פי-99.
דחיסה (lz4/zstd) חוסכת רשת/דיסק.
מחיצות לפי מספר הצרכנים/ליבות, אבל לא מעל.
NVME העדיף, XFS/EXT4 עם ”Notatime”.
NATS
מסרים קטנים, קשרים רבים הם הנורמה; שמור על קבוצות תור ”רחבות”.
JetStream: מנגינה ”max _ ack _ indition”, משוך נגד דחיפה, גודל חבורות.
תרגיל רקע: ”בקרת לב”, ”פעימות לב”, גבולות צד שרת.
12) תבניות אינטגרציה
Outbox/Inbox (הן קפקא והן NATS).
סאגה: תזמור אירועים; סבא של ”סאגה _ id + step”.
שינוי לכידת נתונים (CDC): Debezium # Kafka; ב ־ NATS - תבנית ”המוציא לאור מבסיס הנתונים מפעיל/יומן”.
עיבוד זרם: Kafka Streams/Flink/Spark; במעבדים/תכונות צד שלישי של NATS, צרכני JetStream.
תור אותיות מתות (Did Letter Towe או DLQ) ומדיניות נסיון מחדש (exponential backoff + jitter).
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 זרמי קפקא: מכונות אידמפוטנטיות (סקיצה)
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)
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) קפקא נגד נאטס לבחור: מדריך מהיר
אנחנו צריכים שידור חוזר, שמירה לטווח ארוך, דחיסה, תהליכי זרם כבדים.
צריך RPC מהיר, מאוורר/מאוורר-אין עם מיקרו-לאטנטיות, פעולה פשוטה, Edge/IOT # NATS (ליבה).
אנחנו צריכים התמדה + מאוורר-אאוט, אבל בלי הפלטפורמה הכבדה ”בול עץ” של NATS JETSTREM.
מפתח קפדני וצו העברה = קפקא.
15) תכנון קיבולת (מפושט)
קפקא
1. דרך: ”inbound _ MBps × RF × retention_days × 86400”.
2. חבורות: ”היעד _ concurncy” × stock 1. 5-2 ×.
3. רשת: p99 + שכפול + דחיסת יצרן.
NATS/JetStream
1. הודעות/שניות ופריטה ממוצעת.
2. שימור x העתקים כפול אחסון.
3. צרכנים מגבילים (ack-תלוי ועומד, redireview), מעבד לסריאליזציה.
16) פעולה בטוחה: רשימת בדיקות
[ ] TLS/mTLS מאופשר, סודות מסתובבים.
[ ] ACL/חשבונות/מכסות (לכל דייר).
[ ] אידמפוטנטיות על צרכנים, DLQ,
[ ניטור שגיאות ] Lag/preserput/Trage; התראות על URP (קפקא), סופה מחודשת (NATS).
[ לוחות ] קיבולת: מחיצות, אחסון, p99.
[ ] מבחני אי ספיקת צומת/אזור, ימי משחק, הילוך חוזר/הילוך אחורי.
[ מתועדים מפתחות סכימה ]/JSON Schema.
[ ] מדיניות השימור/הדחיסה/TTL מיושרת עם ציות.
[ ] גרסאות ברוקר/לקוח מתעדכנות באופן קבוע; תאימות פרוטוקול חוט מאומתת.
17) אנטי דפוסים
מפתח חם (כל האירועים של אותה תעודת זהות) = זרם ”רותח” אחד. שארדי/חוצץ.
נסיגה ללא אידמפוטנטיות = אפקטים כפולים.
הודעות ענקיות (MB-Tins) * מקטע GC/הפוגה. אחסן מטען באובייקט, שלח קישורים.
ערבוב RPC והזרמה ב- Kafka = מחזור חיים מורכב/סדר.
JetStream בתור ”DWH לטווח ארוך” = off-label; לאחסן במשך זמן רב במיטות אובייקט/טור.
אין DLQ = ”רעיל” הודעות ספין בלי סוף.
דיסקים נשכחים הם מלאים, אשכול לעצור.
18) FAQ
קיו: אני יכול לעשות ”בדיוק פעם אחת” בסוף הצינור?
א. בפועל - כן ביעילות: קפקא (יצרן אידמפוטנטי + עסקאות) וכיורים אידמפוטנטיים (מפתח, אפסרט). ב NATS - באמצעות אידמפוטנטיות/dedup ביישום.
קיו: מה לבחור עבור מיליון רפ "קים קטנים?
A: NATS Core: Microlatency, בקשה-תגובה, חיבור אור וקבוצות תור.
קיו: צריך דחיפה וצילומי הון?
א ': קפקא זה ניקוי. מדיניות = קומפקטית, מפתח = צבירה/משאב.
קיו: איך להתמודד עם לג?
א. הגדל את מספר החבורות/עובדים, הפחת את זמן העיבוד, אצווה וקדימון, ייעל את המדבור, יחזק אנכית את הברוקרים/כוננים.
קיו: אזור מרובה וד "ר?
א. קפקא - מייצר מראה 2/Cluster קישור, אחריות נכס עם סקונדי RPO. NATS - צביר ־ על/leafnodes; Jetstream שיקוף/העתקים לפי אזור.
19) סיכומים
קפקא ו ־ NATS סוגרים מצבים שונים: רישומי אירועים עמידים של קפקא, תפאורה גבוהה, טרנסאקציונליות והילוך חוזר; NATS הוא אוטובוס אולטרה-לייט ללינה נמוכה, RPC ומאוורר פשוט, עם JetStream להתמדה. תבחר מתוך סמנטיקה משלוח, סדר ושמירה, איחור ועלויות תפעול. עיצוב מפתחות/צדדים, שימור, DLQ ויכולת תצפית - וארכיטקטורת האירועים שלכם תהיה צפויה, ניתנת לחיזוי ואמינה.