מבוא לאפאצ'י פולסאר

1. הקדמה

אפאצ'י פולסר היא מערכת העברת הודעות מבוססת קוד פתוח לפרסום / מנוי שפותחה ביאהו.

הוא נוצר בכדי להפעיל יישומים קריטיים של יאהו כמו Yahoo Mail, Yahoo Finance, Yahoo Sports וכו '. ואז, בשנת 2016, הוא נפתח תחת קרן תוכנת Apache.

2. אדריכלות

פולסר הוא פתרון רב-דיירים וביצועים גבוהים להעברת הודעות בין שרת לשרת. הוא מורכב ממערכת מתווכים וסוכנויות היכרויות יחד עם מובנה גן החיות של אפאצ'י לתצורה וניהול. הספרים הם מ שומר הספרים של אפאצ'י המספקים אחסון להודעות עד שהם נצרכים.

באשכול יהיה לנו:

  • מתווכי אשכולות מרובים לטיפול במסר הנכנס של היצרנים ולהעביר את המסר לצרכנים
  • Apache BookKeeper כדי לתמוך בהתמדה בהודעות
  • Apache ZooKeeper לאחסון תצורת האשכול

כדי להבין זאת טוב יותר, בואו נסתכל על תרשים הארכיטקטורה מהתיעוד:

3. תכונות עיקריות

נתחיל במבט מהיר על כמה מהתכונות העיקריות:

  • תמיכה מובנית במספר אשכולות
  • תמיכה בשכפול גיאוגרפי של הודעות על פני מספר אשכולות
  • מצבי מנוי מרובים
  • ניתנת לשינוי גודל למיליוני נושאים
  • משתמש ב- Apache BookKeeper כדי להבטיח מסירת הודעות.
  • חביון נמוך

עכשיו, בואו נדון בפירוט בכמה מהתכונות העיקריות.

3.1. מודל מסרים

המסגרת מספקת מודל מסרים גמיש. באופן כללי לארכיטקטורות העברת הודעות שני מודלים להעברת הודעות כלומר תור ומפרסם / מנוי. מו"ל / מנוי היא מערכת העברת הודעות משודרת בה ההודעה נשלחת לכל הצרכנים. מצד שני, תור הוא נקודה לנקודה.

Pulsar משלב את שני המושגים ב- API כללי אחד. המו"ל מפרסם את ההודעות לנושאים שונים. ואז ההודעות האלה משודרות לכל המנויים.

הצרכנים מנויים לקבלת הודעות. הספרייה מאפשרת לצרכנים לבחור את הדרכים השונות לצרוך הודעות באותו מנוי שכולל בלעדי, משותף וכישלון. נדון בפירוט בסוגי המנויים הללו בסעיפים המאוחרים יותר.

3.2. מצבי פריסה

ל- Pulsar תמיכה מובנית בפריסה בסביבות שונות. המשמעות היא שאנחנו יכולים להשתמש בו במכונות מקומיות סטנדרטיות, או לפרוס אותו באשכול Kubernetes, ב- Google או ב- AWS.

ניתן לבצע אותו כצומת יחיד למטרות פיתוח ובדיקה. במקרה זה, כל הרכיבים (מתווך, BookKeeper ו- ZooKeeper) פועלים בתהליך יחיד.

3.3. שכפול גיאוגרפי

הספרייה מספקת מחוץ לקופסה תמיכה בשכפול גיאוגרפי של נתונים. אנו יכולים לאפשר שכפול של הודעות בין מספר אשכולות על ידי הגדרת אזורים גיאוגרפיים שונים.

נתוני ההודעות משוכפלים כמעט בזמן אמת. במקרה של כשל ברשת בין אשכולות, הנתונים תמיד בטוחים ומאוחסנים ב- BookKeeper. מערכת השכפול ממשיכה לנסות שוב עד שהשכפול יצליח.

תכונת השכפול הגיאוגרפי מאפשרת גם לארגון לפרוס את פולסאר על פני ספקי ענן שונים ולשכפל את הנתונים. זה עוזר להם להימנע משימוש בממשקי API מקוונים של ספקי ענן.

3.4. קְבִיעוּת

לאחר ש- Pulsar קורא ומאשר את הנתונים, הוא אינו מבטיח אובדן נתונים. עמידות הנתונים קשורה למספר הדיסקים שהוגדרו לאחסון הנתונים.

Pulsar מבטיח עמידות באמצעות ספריות (מופע Apache BookKeeper) הפועלות בצמתי אחסון. בכל פעם שמכשיר ספר מקבל הודעה, הוא שומר עותק בזיכרון וגם כותב את הנתונים ל- WAL (כתיבת יומן קדימה). יומן זה פועל באותה צורה כמו WAL של מסד נתונים. סוכנויות הימורים פועלות על פי עקרון עסקאות מסד נתונים ומבטיחות כי הנתונים לא יאבדו גם במקרה של כשל במכונה.

מלבד האמור לעיל, פולסאר יכולה לעמוד גם בכשלים מרובים בצומת. הספריה משכפלת נתונים למספר ספריות, ואז שולחת הודעת אישור ליצרן. מנגנון זה מבטיח שאפס אובדן נתונים גם במקרה של כשלים מרובים בחומרה.

4. התקנת צומת יחיד

עכשיו בואו נראה כיצד להגדיר אשכול צומת יחיד של Apache Pulsar.

Apache מספק גם ממשק API פשוט של לקוח עם כריכות עבור Java, Python ו- C ++. בהמשך ניצור דוגמא פשוטה של ​​Java ומופת.

4.1. הַתקָנָה

Apache Pulsar זמין כהפצה בינארית. נתחיל בהורדתו:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-2.1.1-incubating-bin.tar.gz

לאחר השלמת ההורדה, אנו יכולים לבטל את הארכיון של קובץ ה- zip. ההפצה שלא הועברה לארכיון תכלול bin, conf, לדוגמה, רישיונות ו lib תיקיה.

לאחר מכן, עלינו להוריד את המחברים המובנים. אלה נשלחים כעת כחבילה נפרדת:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-io-connectors-2.1.1-incubating-bin.tar.gz

בואו נתיר את המחברים לארכיון ונעתיק את מחברים תיקייה בתיקיית Pulsar.

4.2. התחלת מופע

כדי להתחיל מופע עצמאי נוכל לבצע:

סל / פולסר עצמאי

5. לקוח Java

כעת ניצור פרויקט ג'אווה לייצור ולצרוך הודעות. ניצור גם דוגמאות לסוגי מנוי שונים.

5.1. הגדרת הפרויקט

נתחיל בהוספת התלות של הלקוח הפולסרי לפרויקט שלנו:

 org.apache.pulsar pulsar-client 2.1.1-incubation 

5.2. יַצרָן

נמשיך ביצירת a יַצרָן דוגמא. כאן ניצור נושא ומפיק.

ראשית, עלינו ליצור PulsarClient שיתחבר לשירות פולסאר במארח ובנמל ספציפיים, באמצעות פרוטוקול משלו. יצרנים וצרכנים רבים יכולים לשתף אובייקט לקוח יחיד.

כעת ניצור יַצרָן עם שם הנושא הספציפי:

סופי סטטי פרטי מחרוזת SERVICE_URL = "פולסר: // localhost: 6650"; סופי סטטי פרטי מחרוזת TOPIC_NAME = "נושא הבדיקה"; 
לקוח PulsarClient = PulsarClient.builder () .serviceUrl (SERVICE_URL) .build (); מפיק מפיק = client.newProducer () .topic (TOPIC_NAME) .compressionType (CompressionType.LZ4) .create ();

המפיק ישלח 5 הודעות:

IntStream.range (1, 5) .forEach (i -> {String content = String.format ("hi-pulsar-% d", i); Message msg = MessageBuilder.create () .setContent (content.getBytes ()) ) .build (); MessageId msgId = producer.send (msg);});

5.3. צרכן

לאחר מכן ניצור את הצרכן כדי לקבל את המסרים שיצר המפיק. גם הצרכן דורש את אותו הדבר PulsarClient להתחבר לשרת שלנו:

הצרכן הצרכן = client.newConsumer () .topic (TOPIC_NAME) .subscriptionType (SubscriptionType.Shared) .subscriptionName (SUBSCRIPTION_NAME). מנוי (); 

כאן יצרנו את הלקוח עם מְשׁוּתָף סוג מנוי. זה מאפשר לצרכנים מרובים להצטרף לאותו מנוי ולקבל הודעות.

5.4. סוגי מנויים לצרכן

בדוגמה הנ"ל של הצרכן, יצרנו מנוי עם מְשׁוּתָף סוּג. אנחנו יכולים גם ליצור בִּלעָדִי ו כישלון נכשל מנויים.

ה בִּלעָדִי מנוי מאפשר למנוי רק צרכן אחד.

מצד שני, fמנוי ailover מאפשר למשתמש להגדיר את הצרכן החוזר, במקרה שצרכן אחד נכשל, כפי שמוצג בתרשים אפאצ'י זה:

6. מסקנה

במאמר זה הדגשנו את התכונות של מערכת העברת המסרים של פולסר, כגון מודל המסרים, שכפול גיאוגרפי והבטחות עמידות חזקות.

למדנו גם כיצד להגדיר צומת יחיד וכיצד להשתמש בלקוח Java.

כמו תמיד, ניתן למצוא את היישום המלא של מדריך זה ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found