Table of Contents
הבנת אפאצ'י קפקא ותפקידה באדריכלות Event-Driven
Apache קפקא היא פלטפורמה מבוזרת של אירוע המסוגל לטפל טריליון אירועים ביום.בהתחלה שפותחה בלינקדאין, קפקא הפך עמוד השדרה של אדריכלות המודרנית המונעת על ידי אירועים, המאפשרת יישומים לפרסם, לאחסן, לעבד ולהגיב לזרמים של נתונים בזמן אמת.היכולת שלו לשלב גבוה באמצעות עומס, פשטות, ודרגות אופקיות הופכת אותו לבחירה אידיאלית לבניית, מערכות אירועים ממוקדות, בין אם אתה מספק שירות אמיתי, או מעבד, או מספק את הנתונים הדרושים, לבין מערכת הפעלה מחדש, או לוח זמנים, או לוחמת, או כוח אמיתי, או מערכת הפעלה, או עמידות, או עמידות, או עמידות, או ניתוח יעיל, או עמידות, או, או למערכות ניתוח יעיל, לבין מערכת הפעלה מחדש של מערכת יעילה, או עמידות, או ניתוח יעיל, לבין מערכת יעילה, או עמידות, או יכולת זו, מערכת יעילה, מערכת יעילה, או למערכות ניתוח יעיל, או למערכות ניתוח יעיל, מערכת ההפעלה.
מה שמגדיר קפקא מלבד תורי מסרים מסורתיים הוא עיצוב הליבה שלה כלוג מופץ מתחייב.במקום להסיר הודעות לאחר הצריכה, קפקא שומרת עליהם לתקופה מוגדרת (או לנצח), ומאפשר לצרכנים מרובים לשחק מחדש או לעבד אירועים.הההה זו של יצרנים וצרכנים פירושה שכל צד יכול לדרג באופן עצמאי, וכשלונות בחלק אחד של המערכת לא יכולות לזרז יישומים חדשים, לתרגם את הבחירה הזו ישירות לצרכנים הקיימים, ללא אפשרות לשחזר אותם באופן עצמאי, ולחדש אותם באופן ישיר, ללא תקלות, פשוט להוסיף אותם ממחשבות חדשות, ובודדות, ללא אפשרות לשחזר אותם, וכשלים חדשים, ובודדות, ללא אפשרות לשחזר אותם באופן עצמאי.
היתרונות של קפקא: A Deeper Dive
כדי לבנות יישומים חזקים המונעים אירועים עם קפקא, עליך קודם כל לתפוס את אבני הבניין היסודיים שלה.כל רכיב ממלא תפקיד קריטי בביצוע הפלטפורמה ואמינותה:
- (FLT:0)TopicssigFLT:1 הם ערוצים לוגיים אשר רשומות פורסמו. נושא יכול להיות מספר מחיצות, ואת אסטרטגיית החלוקה קובע כיצד נתונים מופצות על ידי ברוקרים.
- (FLT:0PartitionssofFLT:1) הם יחידת המקבילות והזמנת. בתוך חלוקה, רשומות הם בהחלט הורה על ידי מקדמה. מפיקים יכולים לבחור מפתח חלוקה (למשל, מזהה משתמש) כדי להבטיח את כל האירועים עבור אותו מפתח ללכת לאותו מחיצה, שמירה על הסדר עבור ישות זו.
- [ה] [ה]] [ה]] [ה]] [ה]]] [ה]] [ה]]], [ה] [ה]]], [ה], [ה]]], [ה]], [ה], [ה]], [ה], לא ניתן לקבוע את ההכרה, את הסיכון המהיר ביותר להפסד נתונים.
- (ב) מנהיג מכיר, איזון טוב.
- (ב) כל ההכפלות ב-Sinc מכירות, עמידות חזקה יותר.
הבנת האופן שבו רכיבים אלה אינטראקציה חיונית לתכנון פריסת קפקא העומדת בדרישות היישום שלך עבור לוח, עצלות, עמידות ועקביות.
הקמת קפקא ל-הפקה-Ready Eventסטרימינג
הקמת פיתוח עם ברוקר בודד היא בסדר ללמידה, אבל יישום חזק מונע אירוע דורש תצורה ייצור.כאן הם השלבים והשיקולים העיקריים:
Cluster Sizing and Broker Configuration
התחל עם לפחות שלושה ברוקרים כדי להבטיח quorum עבור בחירות מנהיג ולאפשר תחזוקה ללא זמן.הגדרת הגורם לשכפול לשלושה עבור נושאים קריטיים. SetFLT 3 כדי להבטיח כי לפחות שני העתקים מכירים כותב בעת השימוש ב-FLT:4 .לתקן את מדיניות השימור המבוססת על צרכי שמירת הנתונים שלך.
אסטרטגיה עיצוב וחלוקת
ספירת חלוקת קובע את המקבילות המקסימלית עבור שני המפיקים והצרכנים.כלל טוב של אצבע הוא להתחיל עם 10-50 מחיצות נושא, בהתאם למצופה דרך לוח.כל חלוקה היא למעשה קובץ, כך הרבה מדי מחיצות יכולות להוביל לקובץ להתמודד עם עומס גן החיות המוגבר ולהגדיל את עומס החיות.חשב באמצעות FLT:0Confluent Partitionsating הנחיות מ-FLT:1 עבור העבודה הספציפית שלך.
עקבו אחרי Confluent Schema Registry
כדי לשמור על תאימות נתונים כפי שהאירוע שלך מתפתח, לשלב את הרישום של sema Confluent. שירות זה מאביו, Protobuf, או JSON Schema הגדרות ואכיפת חוקי תאימות (בחזרה, קדימה, מלא) יצרנים וצרכנים מתייחסים מזהה סכימה במקום להטמיע schemas מלא, צמצום רשת מעל, לדוגמה, מפיק עשוי לשלוח הודעה ממוקדת עבור מספר רב של משתמשים.
יישום יצרנים וצרכנים עם הטוב ביותר
קפקא מציע ספריות לקוח עשירות עבור Java, Python, Go, .NET, ושפות רבות אחרות.הדוגמאות הבאות משתמשות Java, אך הדפוסים חלים באופן אוניברסלי.
יצירת מפיק אמין
מפיק חזק צריך להתמודד עם רטיבות, idempotence, ו-Smantics עסקה:
- שכנוע רב על ידי הגדרת FLT:6 , זה מונע רשומות כפול במקרה של רטיבות, להבטיח בדיוק על ce סמנטיה עבור יחיד-חלקה כותב.
- (ב) , ויקרא י"ד, ו[[1924]]]], [[1924]]]]
- השתמש במשלוח סינכרוני עם צלצול כדי להתמודד עם כישלונות בחסד: צמיד את השגיאה, התראה או מסלול לנושא מת-לעוד.
- בחר מפיץ שמפיץ אפילו עומס.מפיץ מקל ברירת המחדל משפר יעילות אצווה.
דוגמה ל-Seudocode:
Properties props = new Properties();
props.put("bootstrap.servers", "broker1:9092,broker2:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
props.put("enable.idempotence", true);
props.put("acks", "all");
props.put("retries", Integer.MAX_VALUE);
KafkaProducer<String, byte[]> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("orders", orderKey, orderBytes), (metadata, exception) -> {
if (exception != null) {
// handle exception – log, alert, send to DLT
}
});
יצירת הצרכן עצמאי
הצרכנים חייבים להתמודד עם rebalancing חסד, לנהל את מחוץ לחוק, ולעבד באופן אידיאולוגי:
- הגדר את ה-FLT:11 ומבצעת באופן ידני את החומרים לאחר עיבוד של אצווה.זה מונע אובדן נתונים אם הצרכן מתרסק לפני ביצוע.
- השתמש ב-FLT:12 כדי לשלוט בגודל אצווה ולהימנע מעיבוד רשומות רבות מדי לפני ביצוע.
- ליישם אוזן מחדש להקשיב לאחסון מנעולים לפני התפטרות חלוקה, וכדי לחפש מאוחסנים מחוץ לתחום על המשימה.
- לעשות עיבוד idempotent כך ששכפול של עיבוד מחדש לא גורם תופעות לוואי.לדוגמה, deduplicate על ידי מזהה אירוע או להשתמש במסד נתונים upsert.
(ב) ב[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]
עיבוד אירועים מתקדמים עם קפקא סטרים ו-KSQL
מעבר לתפוקה פשוטה / סנטימטר, קפקא מספק יכולות עיבוד של תאים ראשונים.
קפקא סטרים
קפקא סטריפס היא ספריית לקוחות לבניית יישומים של זרימה ארצית.זה פועל כיישומים סטנדרטיים (ללא אשכול נפרד) וממנף את הנושאים של קפקא עבור חנויות המדינה ושינויים.
- בדיוק על סימנטיקה לפעילות המדינה (joins, aggregations).
- תמיכה הודית לחלון (tges, hopping, session windows).
- מעבדים API ו- DSL (למשל, FLT:13).
לדוגמה, אתה יכול למקם סך של הזמנות ללקוח על ידי יצירת KTable מנושא הזמנה ושימוש מפעיל FLT:14. קפקא זרמים מטפל בחנות המדינה ומשתנה באופן אוטומטי, מה שהופך את היישום שלך באופן אוטומטי לכשלים - אם צומת התרסקות, המדינה נבנה מחדש מן הנושא שינוי.
KSQL (Kafka SQL)
KSQL הוא מנוע הזרמת SQL עבור קפקא.זה מאפשר לך להפעיל שאילתות דמויות SQL על נתוני הזרמת נתונים ללא כתיבת קוד Java. השתמש בו לצורך ניתוח אד-הוק, כוונון, או ETL פשוט.
CREATE STREAM orders WITH (KAFKA_TOPIC='orders', VALUE_FORMAT='JSON');
CREATE TABLE high_value_orders AS
SELECT customer_id, COUNT(*) AS order_count, SUM(amount) AS total
FROM orders WINDOW TUMBLING (SIZE 1 HOUR)
WHERE amount > 1000
GROUP BY customer_id;
KSQL הוא שימושי במיוחד עבור צוותי הנדסה נתונים שרוצים לבנות שינויים מונעים על ידי אירועים במהירות.
שיטות עבודה טובות לבניית Robust Production Systems
יישום מבוסס אירוע חוזר מעבר רק לכותבים יצרנים וצרכנים.הוא דורש גישה הוליסטית לתכנון, תפעול ובקרה.
טעויות ו- Dead-Letter Queues
אפילו עם צרכנים חזקים, כמה רשומות יהיו בלתי מעובדות (למשל, ג'ייסון ממותג, מדבקים ביציאה מהזרם) ליישם דפוס שבו הצרכן תופס חריגים, מצמיד את הרשומה המקורית, ומפרסם אותו לנושא מת-מתעל (למשל, FLT:16). תהליך נפרד יכול מאוחר יותר לשחזר את הרשומות האלה לאחר חקירה זו מבטיחה את הזרם הראשי הוא לא חסום על ידי כדורים רעילים.
הבטחה בדיוק - פעם אחת סימנטיקה
עבור יישומים שבהם משוכפלים אינם מקובלים (למשל, עסקאות פיננסיות), להשתמש ב-Sammantics של קפקא (EOS) עבור שני המפיקים והצרכנים. בצד המפיק, כאמור, FLT:17) מבטיח לא לשכפלות בתוך ישיבה. בצד הצרכני, להשתמש ב- API העסקה כדי לכתוב את הרשומות והמורדות האטומיים.
מעקב ושקיפות
קפקא חושף מדדים רבים באמצעות מדדי מפתח של JMX. Monitor:
- (ב) ,0) ,בשיתוף פעולה מורכב: FLT:1 , מציין בעיה עם שכפול.
- (ב) ⁇ :0 (ה) ⁇ :0) ⁇ : ההבדל בין ההתחלה האחרונה לבין ההתחלה של הצרכן מחויב.
- (ב) ,0) , קדש (ב) ל[[המאה ה-1]], [[1924]]
השתמש בכלים כמו Prometheus עם יצוא קפקא JMX לאסוף מדדים, ולהגדיר לוחות נתונים ב Grafana.בנוסף, לאפשר מנתח יומן בנוי של קפקא (למשל, FLT 18) עבור debugging.
אבטחה Best Practices
להגן על הנתונים שלך במעבר ובמנוחה:
- (ב) [15] שימוש ב- SASL/SCRAM או SASL/SSL לאימות לקוחות.
- (ב) ,0) אישור: 1.FLT 1 Define ACLs לשלוט על מי משתמשים יכולים לקרוא / לכתוב נושאים.
- (ב) ⁇ :0) , ⁇ ⁇ : 1:1 , Enable TLS/SSL לתקשורת של לקוח-ברוקר וברוקר-ברוק.
- מדיניות:0 Network: ElementFLT:1 להשתמש בפיירוול ו-VPCs כדי להגביל את הגישה לברוקרים.
(ב) ,0) ל-[[1924]], [[1924]], [[1924]]
גילוח ו Tuning
ככל שהנפח של האירוע שלך גדל, ייתכן שיהיה עליך להתאים ספירת החלוקה, להגדיל את הגורם לשכפול, או להוסיף ברוקרים.תוכנית לקיבולת על ידי ניטור השימוש בדיסק, רשת I/O, ו- CPU. השתמש בכלי של קפקא כדי לאזן נתונים על פני ברוקרים חדשים.עבור תרחישים גבוהים, גודלי ערכתי (FLT:20, ®) עבור יצרנים ולהוביל את הצרכנים עבור רמות זיכרון ביקישומים וכו '
שימוש אמיתי בעולם במקרים ותבניות
כדי להמחיש כיצד המושגים האלה באים יחד, לשקול פלטפורמת מסחר אלקטרוני טיפוסית המשתמשת בקפאה כמערכת העצבים המרכזית:
- שירות ההזמנה מפרסם את אירועי "הזמנה" לנושא של 2.
- שירות הממציאים צורכת את האירועים האלה לגיוס מלאי, ולאחר מכן מפרסם את "InventoryRened" או "Out OfStock".
- שירות תשלומים צורכת את "המידע שנשמר" אירועים ותשלומים, ומפרסם "תשלום".
- שירות ההנעה צורכת "חיובי" ושולח אישורים של דואר אלקטרוני/SMS.
- שירות Analytics צורכת את כל אירועי ההזמנה כדי לבנות לוח זמנים אמיתי.
- יישום קפקא זרמים מצטרף לאירוע הזרמים כדי לזהות תבניות הונאה (למשל, יותר מדי פקודות מאותו IP בזמן קצר).
באדריכלות זו, כל שירות בקנה מידה עצמאי.אם שירות ההשראה ירד לתחזוקה, האירועים נשארים בקפאק ומעובדים מאוחר יותר.אם שירות התשלום נכשל לאחר ביצוע, אירוע התשלום המבוטל מבטיח התאוששות בלתי ניתנת להחלפה. השימוש במרשם סכימה מבטיח כי כאשר שירות ההזמנה מוסיף שדה חדש (למשל, קוד נתונים), שירותי מטה הזרם אינם שבורים באופן מיידי.
דפוס נפוץ נוסף הוא זרם האירוע עצמו:0 (UbercingsFLT) דפוס 1:1, שבו המקור העיקרי של האמת הוא זרם האירוע עצמו.התאם היחיד של קפקא משמש כחנות האירוע.שירותי מדינה לבנות מחדש את המדינה שלהם על ידי החלת אירועים מההתחלה (או מתמונה) דפוס זה מספק מסלול ביקורת שלם ואת היכולת לתקן באגים רטרואקטיביים על ידי תיקון מחדש של אירועים.
השוואה עם טכנולוגיות אחרות
בעוד קפקא הוא חזק, זה לא הפתרון היחיד של הבנה כאשר להשתמש בו מול חלופות יעזור לך לעשות את הבחירה האדריכלית הנכונה:
- (FLT:0) RabbitMQFLT:1 מצטיין בשפל, הודעות נקודתיות עם מחיקה מורכבת (שינויים, מחייבות) זה משקל קל יותר עבור פריסות קטנות יותר אבל חסר ערבויות עמידות עמידות של קפקא ויכולת משחק מחדש. השתמש הרבטמ"ק כאשר אתה צריך להבטיח משלוח אחד עם נמוך מעל ראש.
- (FLT:0) אמזון KinesisFLT:1 הוא שירות הזרמה מנוהל בדומה לקקפא, אבל זה מבטל את תפעולי overhead.עם זאת, ייתכן שיש לו עלות גבוהה יותר בקנה מידה ופחות גמישות בכוונון.
- (FLT:0)Apache PulsarFLT:103) מספק אחסון עניבה ורב-עוצמה יליד, אבל יש קהילה קטנה יותר ופחות כלים אקולוגיים.
בסופו של דבר, קפקא הוא הטוב ביותר עבור יישומים הדורשים זרימות אירוע קבוע, עמיד, עם עומס גבוה וכבדות נמוכה, במיוחד כאשר שילוב של מיקרו-שירותים מרובים או בניית אגם נתונים.
מסקנה
בניית יישומים חזקים מונעים אירועים עם Apache קפקא דורש יותר מאשר רק הבנה של ה- API שלה - היא דורשת הבנה מעמיקה של הארכיטקטורה שלה, תצורה זהירה לייצור, ודבקות בפרקטיקה הטובה ביותר לטיפול בשגיאות, ניטור וביטחון. על ידי מינוף רכיבי הליבה של קפקא (topics, מחיצות, יצרנים, צרכנים, ברוקרים) ויכולות מתקדמות כמו פלטים ורישום Schema, אתה יכול ליצור מערכות כי הם גמישים תחת עומס, כדי לשמור על זמן רב מדי, כדי לשמור על פני זמן, ולהגדיל את המידות, ולהגדיל את המידות גבוהות, , , , , כישלונות, כישלונות, כישלונות, קיבולת מתקדמת יותר, כישלונות, קיבולת מתקדמת יותר, , קיבולת מתקדמת יותר, קיבולת מתקדמת.
החל ממודל האירועים שלך בזהירות, עיצוב הנושאים שלך עם צמיחה עתידית בראש, ותמיד לתכנן את הבלתי צפוי: מחיצות רשת, התנגשויות מתווך, ושינויים סכימה.עם קפקא, אתה מקבל את היכולת לנתק שירותים, לאפשר נתונים בזמן אמת לזרום בזמן אמת, ולבנות יישומים שלא רק לשרוד אלא גם לשגשג מול המורכבות.