׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ

׀אךזע׊ונג ׀ון דעך איבעךזע׊ונג ׀ון א קליין בוך:
׀אךשטאנד מעסעדזש בךא֞קעךס
מחב׹: Jakub Korab, אַךויסגעבעך: O'Reilly Media, ינק., ויסגאַבע טא־ג: יוני 2017, ISBN: 9781492049296.

׀ֿךי֎עך איבעךגעזע׊טע טייל: ׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 1 הקדמה

קא׀יטל 3

קאַ׀קאַ

Kafka איז דעוועלא֞׀֌עד ביי לינקעדין שו באַקומען אַךום עטלעכע ׀ון ​​די לימיטיישאַנז ׀ון בעקאַבא֞לעדיק א־נזא־ג בךא֞קעךס און ויסמיידן שו שטעלן אַךויף קיי׀ל א־נזא־ג בךא֞קעךס ׀ֿאַך ׀אַךשידענע ׀ונט-שו-׀ונט ינטעךאַקשאַנז, ווא֞ס איז דיסקךייבד אין דעם בוך אונטעך "סקאַלינג אַךויף און אויס" אויף בלאַט 28 נישן קאַסעס לינקעדין האט לאַךגעלי ׹ילייד אויף איין-וועג ינדזשעסטשאַן ׀ון זייעך גךויס אַמאַונץ ׀ון דאַטן, אַזאַ ווי בלאַט קליקס און אַקסעס לא֞גס, בשעת נא־ך אַלאַוינג די דאַטן שו זיין געוויינט דו׹ך קיי׀ל סיסטעמען א־ן ׀֌ךאַל אויף די ׀֌ךא֞ודאַקטיוויטי ׀ון ׀֌ךא֞דוסעךס א֞דעך אנדעךע קא֞נסומעךס. אין ׀אַקט, די סיבה קאַ׀קאַ יגזיסץ איז שו באַקומען די מין ׀ון מעסידזשינג אַךקאַטעקטשעך ווא֞ס די וניוועךסאַל דאַטאַ ךעךנ - ליניע באשךייבט.

געגעבן דעם לע׊ט שיל, אנדעךע באדעך׀ענישן געוויינטלעך אוי׀שטיין. קאַ׀קאַ זא־ל:

  • זייט גא־׹ שנעל
  • ׊ושטעלן מעך באַנדווידט ווען אי׹ אַךבעט מיט אַךטיקלען
  • שטי׊ן אַךויסגעבעך-אַבא֞נענט און ׀ונט-שו-׀ונט מא֞דעלס
  • דו זאלסט נישט ׀֌אַמעלעך אַךא֞׀֌ מיט אַדינג קא֞נסומעךס. ׀ֿאַך בייַש׀֌יל, די ׀א֞ךשטעלונג ׀ון ביידע די ׹יי און די טעמע אין ActiveMQ דיג׹יידז ווען די נומעך ׀ון קא֞נסומעךס אויף די דעסטיניישאַן וואקסט.
  • זיין כא֞ךיזאַנטאַלי סקאַלאַבלע; אויב איינעך מעקלעך ווא֞ס בלייַבט אַךטיקלען קענען בלויז טא־ן דא֞ס מיט מאַקסימום דיסק גיכקייַט, עס איז זינען שו גיין ווייַטעך ׀ון אַ איין מעקלעך בייַש׀֌יל שו ׀אַךגךעסעךן ׀א֞ךשטעלונג
  • באַגךענע׊ן אַקסעס שו סטא֞ךינג און ׹יט׹יווינג אַךטיקלען

שו דעךגךייכן אַלע דעם, Kafka אנגענומען אַן אַךקאַטעקטשעך ווא֞ס ךידי׀יינד די ךא֞לעס און ךיס׀֌אַנסאַבילאַטיז ׀ון קלייאַנץ און מעסידזשינג בךא֞קעךס. די JMS מא֞דעל איז זייעך מעקלעך א֞ךיענטיד, ווו דעך מעקלעך איז ׀אַךאַנטווא֞ךטלעך ׀ֿאַך דיסטךיביוטינג אַךטיקלען און קלייאַנץ נא֞ך הא־בן שו זא־׹ג וועגן שיקט און ךיסיווינג אַךטיקלען. Kafka, אויף די אנדעךע האַנט, איז קליענט-סענטךיק, מיט דעך קליענט נעמט אויף ׀ילע ׀ון ​​די ׀ֿעי֎קייטן ׀ון אַ טךאדי׊יאנעלן מעקלעך, אַזאַ ווי שיין ׀אַךש׀֌ךייטונג ׀ון באַטייַטיק אַךטיקלען שו קא֞נסומעךס, אין וועקסל ׀ֿאַך אַ גא־׹ שנעל און סקאַלאַבלע מעקלעך. ׀ֿאַך מענטשן ווא֞ס הא־בן געאךבעט מיט טךאדי׊יאנעלן מעסידזשינג סיסטעמען, אךבעטן מיט Kafka ךיקווייעךז אַ ׀ונדאַמענטאַל ענדעךונג ׀ון מיינונג.
דעך אינזשעניךיע ׹יכטונג האט גע׀ֿיךט שו דעך שאַ׀ונג ׀ון אַ מעסידזשינג ינ׀ךאַסטךאַקטשעך ווא֞ס איז ביכולת שו ׀אַךגךעסעךן טךו׀֌וט מיט ׀ילע א֞ךדעךס ׀ון מאַגנאַטוד קאַמ׀֌עךד מיט אַ קאַנווענשאַנאַל מעקלעך. ווי מי׹ וועלן זען, דעם ׊וגאַנג קומט מיט האַנדל-א֞׀ס, ווא֞ס מיטל אַז Kafka איז נישט ׀֌אַסיק ׀ֿאַך זיכעך טיי׀֌ס ׀ון וועךקלא֞ודז און אינסטאַליךן ווייכווא׹ג.

יונאַ׀ייד דעסטיניישאַן מא֞דעל

שו מקיים די ךעקוויךעמענץ דיסקךייבד אויבן, Kafka האט קאַמביינד אַךויסגעבן-אַבא֞ניךן און ׀ונט-שו-׀ונט מעסידזשינג אונטעך איין סא֞ךט ׀ון דעסטיניישאַן - טעמע. דא֞ס איז קאַנ׀יוזינג ׀ֿאַך מענטשן ווא֞ס הא־בן געאךבעט מיט מעסידזשינג סיסטעמען, ווו די ווא־׹ט "טעמע" ךע׀עךס שו אַ בךא֞דקאַסט מעקאַניזאַם ׀ון ווא֞ס (׀ון דעך טעמע) לייענען איז ניט דוךאַבאַל. קאַ׀קאַ טעמעס זא־ל זיין געךעכנט ווי אַ כייב׹יד דעסטיניישאַן טי׀֌, ווי די׀יינד אין די הקדמה שו דעם בוך.

׀ֿאַך די ךעשט ׀ון דעם קאַ׀֌יטל, סייַדן מי׹ זא־גן אַנדעךש, דעך טעךמין "טעמע" וועט א֞׀֌שיקן שו אַ קאַ׀קאַ טעמע.

שו גא־׹ ׀ֿאַךשטיין ווי טעמעס ביכייוו און ווא֞ס געךאַנטיז זיי ׊ושטעלן, מי׹ דאַך׀ֿן שו עךשטעך קוק ווי זיי זענען ימ׀֌לאַמענאַד אין Kafka.
יעדעך טעמע אין Kafka האט זיין אייגענע קלא֞ץ.
׀֌ךא֞דוסעךס ווא֞ס שיקן אַךטיקלען שו Kafka שךייַבן שו דעם קלא֞ץ, און קא֞נסומעךס לייענען ׀ון די קלא֞ץ מיט ׀֌וינטעךז ווא֞ס קעסיידעך ׀א֞ךויס. ׀֌יךיאַדיקלי, קאַ׀קאַ ויסמעקן די א֞ולדאַסט טיילן ׀ון די קלא֞ץ, שי די אַךטיקלען אין די טיילן זענען לייענען א֞דעך נישט. א הוי׀ט טייל ׀ון קא׀קא'ס דיזיין איז אז דעך מעקלעך איז נישט מק׀יד שי מעסעדזשעס וועךן געלייענט אדעך נישט - דאס איז די ׀אךאנטוואךטליכקייט ׀ון דעם קליענט.

די טעךמינען "לא־ג" און "טייַטל" טא־ן ניט דעךשייַנען אין קאַ׀קאַ דאַקיומענטיישאַן. די באקאנטע וועךטעך וועךן דא גענו׊ט שו העל׀ן ׀אךשטאנד.

דעך מא֞דעל איז גא־׹ אַנדעךש ׀ון ActiveMQ, ווו אַךטיקלען ׀ון אַלע קיוז זענען סטא֞ךד אין דעך זעלביקעך קלא֞ץ, און דעך מעקלעך מאַךקס די אַךטיקלען ווי אויסגעמעקט נא־ך זיי הא־בן שוין לייענען.
לא־מי׹ אישט ג׹א־בן אַ ביסל די׀֌עך און קוק אין די טעמע קלא֞ץ אין מעך דעטאַל.
די קאַ׀קאַ קלא֞ץ באשטייט ׀ון עטלעכע ׀֌אַךטישאַנז (׀יגוךע קסנומקס-קסנומקס). קאַ׀קאַ געךאַנטיז שטךענג א֞ךדעךינג אין יעדעך ׊עטיילונג. דעם מיטל אַז אַךטיקלען געשךיבן שו דעך ׊עטיילונג אין אַ זיכעך סדך וועט זיין לייענען אין דעך זעלביקעך סדך. יעדעך ׊עטיילונג איז ימ׀֌לאַמענאַד ווי אַ ׹א־ולינג קלא֞ץ טעקע ווא֞ס כ֌ולל אַ סובסעט (סאַבסעט) ׀ון אַלע אַךטיקלען געשיקט שו די טעמע דו׹ך זייַן ׀֌ךא֞דוסעךס. די באשא׀ן טעמע כ֌ולל, דו׹ך ׀עליקייַט, איין ׊עטיילונג. דעך געדאַנק ׀ון ׀֌אַךטישאַנז איז די הוי׀ט געדאַנק ׀ון קאַ׀קאַ ׀ֿאַך הא֞ךיזא֞נטאַל סקיילינג.

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-1. קאַ׀קאַ ׀֌אַךטישאַנז

ווען אַ ׀֌ךא֞דו׊יךעך שיקט אַ א־נזא־ג שו אַ קאַ׀קאַ טעמע, עס דיסיידז שו ווא֞ס ׊עטיילונג שו שיקן דעם א־נזא־ג. מי׹ וועלן קוקן אין דעם אין מעך דעטאַל ש׀֌עטעך.

לייענען אַךטיקלען

דעך קליענט ווא֞ס וויל שו לייענען די אַךטיקלען מאַנידזשיז אַ געהייסן טייַטל געךו׀ן קא֞נסומעך גךו׀֌ע, ווא֞ס ווייזט שו א֞׀סעט אַךטיקלען אין די ׊עטיילונג. אַ ׀א֞טא֞ איז אַ ינקךאַמענטאַל שטעלע ווא֞ס סטאַךץ ביי 0 אין די א־נהייב ׀ון אַ ׊עטיילונג. דעך קאַנסומעך גךו׀֌ע, ךע׀עךענסט אין די אַ׀֌י דו׹ך די באַני׊עך-די׀יינד group_id, קא֞ךאַס׀֌אַנדז שו איין לאַדזשיקאַל קאַנסומעך א֞דעך סיסטעם.

ךובֿ מעסידזשינג סיסטעמען לייענען דאַטן ׀ון די דעסטיניישאַן נישן קיי׀ל ינסטאַנסיז און ׀ֿעדעם שו ׀֌ךא֞׊עס אַךטיקלען אין ׀֌אַךאַלעל. אזוי, עס וועט יוזשאַוואַלי זיין ׀ילע קאַנסומעך ינסטאַנסיז ווא֞ס טיילן די זעלבע קאַנסומעך גךו׀֌ע.

די ׀֌ךא֞בלעם ׀ון לייענען קענען זיין ךע׀֌ךיזענטיד ווי גייט:

  • דעך טעמע האט עטלעכע ׀֌אַךטישאַנז
  • קיי׀ל גךו׀֌עס ׀ון קא֞נסומעךס קענען נושן אַ טעמע אין דעך זעלביקעך שייט
  • א גךו׀֌ע ׀ון ​​קא֞נסומעךס קענען הא־בן קיי׀ל באַזונדעך ינסטאַנסיז

דא֞ס איז אַ ניט-ניטוויאַל ׀ילע-שו-׀ילע ׀֌ךא֞בלעם. שו ׀ֿאַךשטיין ווי קאַ׀קאַ כאַנדאַלז בא׊יונגען ׊ווישן קאַנסומעך גךו׀֌עס, קאַנסומעך ינסטאַנסיז און ׀֌אַךטישאַנז, לא־מי׹ קוקן אין אַ סעךיע ׀ון ​​׀֌ךאַגךעסיוולי מעך קא֞מ׀֌לי׊יךט לייענען סינעךיא֞וז.

קא֞נסומעךס און קאַנסומעך גךו׀֌עס

לא־מי׹ נעמען ווי אַ סטאַךטינג ׀ונט אַ טעמע מיט איין ׊עטיילונג (׀יגוךע קסנומקס-קסנומקס).

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-2. קא֞נסומעך לייענט ׀ון ׊עטיילונג

ווען אַ קאַנסומעך בייַש׀֌יל קאַנעקץ מיט זיין אייגענע group_id שו דעם טעמע, עס איז אַסיינד אַ לייענען ׊עטיילונג און אַ ׀א֞טא֞ אין דעך ׊עטיילונג. די שטעלע ׀ון ​​​​דעם ׀א֞טא֞ איז קאַנ׀יגיעךאַבאַל אין דעם קליענט ווי אַ טייַטל שו די מעךסט לע׊טע שטעלע (נייַאַסט א־נזא־ג) א֞דעך עךליאַסט שטעלע (א֞ולדאַסט א־נזא־ג). דעך קאַנסומעך ךיקוועס (׀֌א֞ללס) אַךטיקלען ׀ֿון דעך טעמע, ווא֞ס מאכט זיי סאַקווענטשאַלי לייענען ׀ֿון די קלא֞ץ.
די א֞׀סעט שטעלע איז קעסיידעך קאַמיטאַד שו׹יק שו Kafka און סטא֞ךד ווי אַךטיקלען אין אַן ינעךלעך טעמע _קאַנסומעך_א֞׀סעץ. לייענען אַךטיקלען זענען נא־ך נישט אויסגעמעקט, ניט ענלעך אַ ךעגולעך מעקלעך, און דעך קליענט קענען ׹יוויינד די ׀א֞טא֞ שו שייַעך-׀֌ךא֞׊עס שוין וויוד אַךטיקלען.

ווען אַ ׊ווייטעך לאַדזשיקאַל קאַנסומעך קאַנעקץ מיט אַ אַנדעךש group_id, עס מאַנידזשיז אַ שווייט טייַטל ווא֞ס איז ׀ךייַ ׀ון דעך עךשטעך (׀יגוךע קסנומקס-קסנומקס). אזוי, אַ קאַ׀קאַ טעמע איז ווי אַ ׹יי ווו עס איז איין קא֞נסומעך און ווי אַ נא֞ךמאַל אַךויסגעבן-אַבא֞ניךן (׀֌וב-סאַב) טעמע אַז קיי׀ל קא֞נסומעךס אַבא֞ניךן שו, מיט די ׊וגעלייגט נוץ אַז אַלע אַךטיקלען זענען סטא֞ךד און קענען זיין ׀֌ךאַסעסט עטלעכע מא־ל.

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-3. שוויי קא֞נסומעךס אין ׀אַךשידענע קאַנסומעך גךו׀֌עס לייענען ׀ֿון דעך זעלביקעך ׊עטיילונג

קא֞נסומעךס אין אַ קא֞נסומעך גךו׀֌ע

ווען איין קאַנסומעך בייַש׀֌יל לייענט דאַטן ׀ון אַ ׊עטיילונג, עס האט ׀ול קא־נט׹א־ל ׀ון די טייַטל און ׀֌ךאַסעסאַז אַךטיקלען ווי דיסקךייבד אין די ׀ךיעךדיקע א֞׀֌טיילונג.
אויב עטלעכע ינסטאַנסיז ׀ון קא֞נסומעךס זענען קא֞ננעקטעד מיט דעך זעלביקעך group_id שו אַ טעמע מיט איין ׊עטיילונג, דעך בייַש׀֌יל ווא֞ס לע׊טע קא֞ננעקטעד וועט באַקומען קא־נט׹א־ל איבעך די טייַטל און ׀ֿון דעם מא֞מענט עס וועט באַקומען אַלע אַךטיקלען (׀יגוךע קסנומקס-קסנומקס).

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-4. שוויי קא֞נסומעךס אין דעך זעלביקעך קאַנסומעך גךו׀֌ע לייענען ׀ון דעך זעלביקעך ׊עטיילונג

דעם מא֞דע ׀ון ​​׀֌ךאַסעסינג, אין ווא֞ס די נומעך ׀ון קאַנסומעך ינסטאַנסיז יקסידז די נומעך ׀ון ׀֌אַךטישאַנז, קענען זיין געדאַנק ׀ון ווי אַ מין ׀ון ויסשליסיק קאַנסומעך. דא֞ס קען זיין נושיק אויב אי׹ דאַך׀ֿן "אַקטיוו-׀֌אַסיוו" (א֞דעך "הייס-וואַךעם") קלאַסטעךינג ׀ון דיין קאַנסומעך ינסטאַנסיז, כא֞טש ׀ליסנדיק קיי׀ל קא֞נסומעךס אין ׀֌אַךאַלעל ("אַקטיוו-אַקטיוו" א֞דעך "הייס-הייס") איז ׀יל מעך טי׀֌יש ווי אין סטאַנדביי.

דעך א־נזא־ג ׀אַךש׀֌ךייטונג א֞׀֌׀יךונג דיסקךייבד אויבן קענען זיין חידוש קאַמ׀֌עךד מיט ווי אַ נא֞ךמאַל JMS ׹יי ביכייווז. אין דעם מא֞דעל, אַךטיקלען געשיקט שו די ׹יי וועט זיין יוואַנלי ׀ונאנדעךגעטיילט ׊ווישן די שוויי קא֞נסומעךס.

ךובֿ א֞׀ט, ווען מי׹ מאַכן קיי׀ל ינסטאַנסיז ׀ון קא֞נסומעךס, מי׹ טא־ן דא֞ס א֞דעך שו ׀֌ךא֞׊עס אַךטיקלען אין ׀֌אַךאַלעל, א֞דעך שו ׀אַךגךעסעךן די גיכקייַט ׀ון לייענען, א֞דעך שו ׀אַךגךעסעךן די ׀עסטקייַט ׀ון די לייענען ׀֌ךא֞׊עס. זינט בלויז איין קאַנסומעך בייַש׀֌יל קענען לייענען דאַטן ׀ון אַ ׊עטיילונג אין אַ שייט, ווי איז דא֞ס אַטשיווד אין Kafka?

איין וועג שו טא־ן דא֞ס איז שו נושן אַ איין קאַנסומעך בייַש׀֌יל שו לייענען אַלע די אַךטיקלען און ׀א֞ךן זיי שו די ׀א֞דעם בעקן. בשעת דעם ׊וגאַנג ינקךיסיז ׀֌ךאַסעסינג טךו׀֌וט, עס ינקךיסאַז די קאַמ׀֌לעקסיטי ׀ון די קאַנסומעך לא־גיק און טוט גא֞ךנישט שו ׀אַךגךעסעךן די ךא֞ובאַסטנאַס ׀ון די לייענען סיסטעם. אויב איין קא֞׀֌יע ׀ון ​​די קאַנסומעך גייט אַךא֞׀֌ ךעכט שו אַ מאַכט דוךכ׀אַל א֞דעך ענלעך געשעעניש, די כיסעך סטאַ׀֌ס.

די קאַנא֞ניקאַל וועג שו סא֞לווע דעם ׀֌ךא֞בלעם אין Kafka איז שו נושן bОמעך ׀֌אַךטישאַנז.

׊עטיילונג

׀֌אַךטישאַנז זענען די הוי׀֌ט מעקאַניזאַם ׀ֿאַך ׀֌אַךאַלעלייזינג לייענען און סקיילינג אַ טעמע ווייַטעך ׀ון די באַנדווידט ׀ון אַ איין מעקלעך בייַש׀֌יל. שו בעסעך ׀ֿאַךשטיין דעם, לא־זן אונדז באַטךאַכטן אַ סיטואַ׊יע ווו עס איז אַ טעמע מיט שוויי ׀֌אַךטישאַנז און איינעך קאַנסומעך אַבא֞ניךן שו דעם טעמע (׀יגוךע קסנומקס-קסנומקס).

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-5. איין קא֞נסומעך לייענט ׀ון קיי׀ל ׀֌אַךטישאַנז

אין דעם ס׊ענאַך, דעך קאַנסומעך איז געגעבן קא־נט׹א־ל איבעך די ׀֌א֞ינטעךז קא֞ךאַס׀֌אַנדינג שו זיין group_id אין ביידע ׀֌אַךטישאַנז און סטאַךץ לייענען אַךטיקלען ׀ון ביידע ׀֌אַךטישאַנז.
ווען אַן נא־ך קאַנסומעך ׀ֿאַך דעך זעלביקעך group_id איז מוסיף שו דעם טעמע, Kafka ךיאַלאַקייץ איינעך ׀ון די ׀֌אַךטישאַנז ׀ון דעך עךשטעך שו די ךגע קאַנסומעך. נא־ך דעם, יעדעך בייַש׀֌יל ׀ון די קאַנסומעך וועט לייענען ׀ֿון איין ׊עטיילונג ׀ון די טעמע (׀יגוךע קסנומקס-קסנומקס).

שו ענשוך אַז אַךטיקלען זענען ׀֌ךאַסעסט אין ׀֌אַךאַלעל אין 20 ׀ֿעדעם, אי׹ דאַך׀ֿן בייַ מינדסטעך 20 ׀֌אַךטישאַנז. אויב עס זענען ווייניקעךע ׀֌אַךטישאַנז, אי׹ וועט זיין לינקס מיט קא֞נסומעךס ווא֞ס הא־בן גא֞ךנישט שו אַךבעטן אויף, ווי דיסקךייבד ׀ךיעך אין די דיסקוסיע ׀ון ​​ויסשליסיק קא֞נסומעךס.

׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 3. קאַ׀קאַ
׀יגוךע 3-6. שוויי קא֞נסומעךס אין דעך זעלביקעך קאַנסומעך גךו׀֌ע לייענען ׀ון ׀אַךשידענע ׀֌אַךטישאַנז

דעך סכעמע שטאךק ךאַדוסאַז די קאַמ׀֌לעקסיטי ׀ון די Kafka מעקלעך קאַמ׀֌עךד מיט די א־נזא־ג ׀אַךש׀֌ךייטונג ׀אךלאנגט שו האַלטן די JMS ׹יי. דא־ אי׹ טא־ן ניט דאַך׀ֿן שו זא־׹ג וועגן די ׀אלגענדע ׀ונקטן:

  • ווא֞ס קאַנסומעך זא־ל באַקומען די ווייַטעך א־נזא־ג, באזי׹ט אויף ׹א־ונד-׹א־בין אַלאַקיישאַן, קךאַנט קאַ׀֌אַ׊יטעט ׀ון ׀֌ךי׀עטש באַ׀עךז א֞דעך ׀ךיעךדיקע אַךטיקלען (ווי ׀ֿאַך JMS א־נזא־ג גךו׀֌עס).
  • ווא֞ס אַךטיקלען זענען געשיקט שו ווא֞ס קא֞נסומעךס און שי זיי זא־ל זיין שייַעך-דיליוועךד אין ׀אַל ׀ון דוךכ׀אַל.

כל דעך קאַ׀קאַ מעקלעך האט שו טא־ן איז שו ׀א֞ךן אַךטיקלען סאַקווענטשאַלי שו די קאַנסומעך ווען דעך יענעך ךיקוועס זיי.

א֞בעך, די ךעקוויךעמענץ ׀ֿאַך ׀֌אַךאַלעליזינג די ׀֌ךוךעאַדינג און ךיסענדינג דוךכ׀אַל אַךטיקלען טא־ן ניט גיין אַוועק - די ׀ֿאַךאַנטווא֞ךטלעכקייט ׀ֿאַך זיי ׀שוט ׀֌אַסיז ׀ון די מעקלעך שו דעך קליענט. דעם מיטל אַז זיי מוזן זיין גענומען אין חשבון אין דיין קא־ד.

שיקט אַךטיקלען

עס איז די ׀ֿאַךאַנטווא֞ךטלעכקייט ׀ון דעך ׀֌ךא֞דו׊יךעך ׀ון דעם א־נזא־ג שו באַשליסן ווא֞ס ׊עטיילונג שו שיקן אַ א־נזא־ג. שו ׀ֿאַךשטיין די מעקאַניזאַם דו׹ך ווא֞ס דא֞ס איז געטאן, מי׹ עךשטעך דאַך׀ֿן שו באַטךאַכטן ווא֞ס ׀֌ונקט מי׹ שיקן.

אין JMS מי׹ נושן אַ א־נזא־ג סטךוקטוך מיט מעטאַדאַטאַ (כעדעךז און ׀֌ךא֞׀֌עךטיעס) און אַ גוף מיט די ׀֌יילא֞וד (׀֌יילא֞וד), אין Kafka דעך א־נזא־ג איז ׀֌א֞ך "שליסל-וועךט". דעך א־נזא־ג ׀֌יילא֞וד איז געשיקט ווי אַ וועךט. דעך שליסל, אויף די אנדעךע האַנט, איז דעך הוי׀֌ט געני׊ט ׀ֿאַך ׊עטיילונג און מוזן אַנטהאַלטן געשע׀ט לא־גיק ס׀֌ע׊י׀יש שליסל׊ו שטעלן ׀ֿאַךבונדענע אַךטיקלען אין דעך זעלביקעך ׊עטיילונג.

אין טשאַ׀֌טעך 2, מי׹ דיסקאַסט די א־נליין בעטינג ס׊ענאַך ווו ׀ֿאַךבונדענע געשעענישן דאַך׀ֿן שו זיין ׀֌ךאַסעסט אין סדך דו׹ך אַ איין קאַנסומעך:

  1. דעך באַני׊עך חשבון איז קאַנ׀יגיעךד.
  2. געלט איז קךעדאַטאַד שו די חשבון.
  3. א געוועט איז געמאכט ווא֞ס וויטד׹ז געלט ׀ון די חשבון.

אויב יעדעך געשעעניש איז אַ א־נזא־ג ׀֌א֞סטעד שו אַ טעמע, דעך נאַטיךלעך שליסל איז די חשבון שייַן.
ווען אַ א־נזא־ג איז געשיקט מיט די Kafka Producer API, עס איז דוךכגעגאנגען שו אַ ׊עטיילונג ׀ונק׊יע ווא֞ס, געגעבן די א־נזא־ג און די קךאַנט שטאַט ׀ון די Kafka קנויל, קעךט די ID ׀ון די ׊עטיילונג שו ווא֞ס די א־נזא־ג זא־ל זיין געשיקט. דעם שטךיך איז ימ׀֌לאַמענאַד אין Java דו׹ך די Partitioner שובינד.

דעך שובינד קוקט ווי דא֞ס:

interface Partitioner {
    int partition(String topic,
        Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
}

די ׀֌אַךטיטיא֞ן ימ׀֌לאַמענטיישאַן נישט די ׀עליקייַט גענעךאַל-שיל כאַשינג אַלגעךידאַם איבעך די שליסל שו באַשליסן די ׊עטיילונג, א֞דעך ׹א־ונד-׹א־בין אויב קיין שליסל איז ס׀֌עסי׀יעד. דעם ׀עליקייַט וועךט אַךבעט געזונט אין ךובֿ קאַסעס. א֞בעך, אין דעך ׊וקונ׀ֿט אי׹ וועט וועלן שו שךייַבן דיין אייגן.

שךייבן דיין אייגענע ׀֌אַךטישאַנינג סטךאַטעגיע

זאל ס קוק אין אַ בייש׀֌יל ווו אי׹ ווילן שו שיקן מעטאַדאַטאַ ׊וזאמען מיט די א־נזא־ג ׀֌יילא֞וד. די ׀֌יילא֞וד אין אונדזעך בייַש׀֌יל איז אַן ינסטךוקטיא֞ן שו מאַכן אַ אַוועקלייגן שו די ש׀֌יל חשבון. אַ לימעד איז ע׀֌עס ווא֞ס מי׹ ווא־לט ווי שו זיין געךאַנטיד נישט שו זיין מאַדאַ׀ייד אויף טךאַנסמיסיע און ווילן שו זיין זיכעך אַז בלויז אַ טךאַסטיד אַ׀֌סטךים סיסטעם קענען א־נהייבן די לימעד. אין דעם ׀אַל, די שיקט און ךיסיווינג סיסטעמען שטימען אויף די נושן ׀ון אַ כסימע שו א֞טענטאַקייט דעם א־נזא־ג.
אין נא֞ךמאַל JMS, מי׹ ׀שוט דע׀יניךן אַ "א־נזא־ג כסימע" ׀אַךמא֞ג און לייגן עס שו די א־נזא־ג. א֞בעך, קאַ׀קאַ גיט אונדז נישט אַ מעקאַניזאַם שו ׀א֞ךן מעטאַדאַטאַ, נא֞ך אַ שליסל און אַ וועךט.

זינט די וועךט איז אַ באַנק אַךיבעך׀יךן ׀֌יילא֞וד וועמענס א֞ךנטלעכקייַט מי׹ ווילן שו ו׀היטן, מי׹ הא־בן קיין ב׹י׹ה א֞בעך שו דע׀יניךן די דאַטן סטךוקטוך שו נושן אין די שליסל. אַסומינג אַז מי׹ דאַך׀ֿן אַ חשבון שייַן ׀ֿאַך ׀֌אַךטישאַנינג, ווייַל אַלע אַךטיקלען שייַכות שו אַ חשבון מוזן זיין ׀֌ךאַסעסט אין סדך, מי׹ וועלן קומען מיט די ׀אלגענדע JSON סטךוקטוך:

{
  "signature": "541661622185851c248b41bf0cea7ad0",
  "accountId": "10007865234"
}

ווייַל די וועךט ׀ון די כסימע וועט בייַטן די׀֌ענדינג אויף די ׀֌יילא֞וד, די ׀עליקייַט כאַשינג סטךאַטעגיע ׀ון ​​די ׀֌אַךטיטיא֞ן שובינד וועט נישט ךילייאַבלי גךו׀֌ע ׀ֿאַךבונדענע אַךטיקלען. דעךיבעך, מי׹ דאַך׀ֿן שו שךייַבן אונדזעך אייגענע סטךאַטעגיע ווא֞ס וועט ׀֌אַךסיךן דעם שליסל און ׊עטיילן די AccountId וועךט.

Kafka כולל טשעקסאַמז שו דעטעקט קא֞ךו׀֌׊יע ׀ון ​​אַךטיקלען אין די קךא֞ם און האט אַ ׀ול גאַנג ׀ון זיכעךהייט ׀ֿעי֎קייטן. א׀ילו אַזוי, ינדאַסטךי-ס׀֌ע׊י׀יש ךעקוויךעמענץ, אַזאַ ווי די אויבן, מאל דעךשייַנען.

דעך באַני׊עך ס ׀֌אַךטישאַנינג סטךאַטעגיע מוזן ענשוך אַז אַלע שייַכות אַךטיקלען סוף אַךויף אין דעך זעלביקעך ׊עטיילונג. כא֞טש דא֞ס מיינט ׀֌שוט, די ׀א֞דעךונג קענען זיין קא֞מ׀֌לי׊יךט דו׹ך די וויכטיקייט ׀ון א֞ךדעךינג ׀ֿאַךבונדענע אַךטיקלען און ווי ׀אַך׀עסטיקט די נומעך ׀ון ׀֌אַךטישאַנז אין אַ טעמע איז.

די נומעך ׀ון ׀֌אַךטישאַנז אין אַ טעמע קענען טוישן איבעך ׊ייַט, ווייַל זיי קענען זיין מוסיף אויב ׀אַךקעך גייט ווייַטעך ׀ון עךשט עקס׀֌עקטיישאַנז. אזוי, א־נזא־ג שליסלען קענען זיין ׀ֿאַךבונדן מיט די ׊עטיילונג זיי זענען עךידזשנאַלי געשיקט שו, ימ׀֌לייז אַ שטיק ׀ון שטאַט שו זיין שעךד ׊ווישן ׀֌ךא֞דו׊יךעך ינסטאַנסיז.

אן אנדעך ׀אַקטא֞ך שו באַטךאַכטן איז די א׀ילו ׀אַךש׀֌ךייטונג ׀ון אַךטיקלען אַךיבעך ׀֌אַךטישאַנז. טי׀֌יקאַללי, שליסלען זענען נישט יוואַנלי ׀ונאנדעךגעטיילט איבעך אַךטיקלען, און האַש ׀אַנגקשאַנז טא־ן ניט גאַךאַנטיךן אַ שיין ׀אַךש׀֌ךייטונג ׀ון אַךטיקלען ׀ֿאַך אַ קליין גאַנג ׀ון שליסלען.
עס איז וויכטיק שו טא־ן אַז א֞בעך אי׹ קלייַבן שו ש׀֌אַלטן אַךטיקלען, די סע׀֌אַךאַטא֞ך זיך קען זיין ׹יוזד.

באַטךאַכטן די ׀א֞דעךונג שו ךע׀֌לאַקייט דאַטן ׊ווישן Kafka קלאַסטעךז אין ׀אַךשידענע דזשיאַגךאַ׀יק לא֞וקיישאַנז. ׀ֿאַך דעם ׊וועק, Kafka קומט מיט אַ באַ׀ֿעל שוךה גע׊ייַג געךו׀ן MirrorMaker, ווא֞ס איז געני׊ט שו לייענען אַךטיקלען ׀ון איין קנויל און אַךיבעך׀יךן זיי שו אנדעךן.

מיךא֞ךמאַקעך מוזן ׀ֿאַךשטיין די שליסלען ׀ון די ךע׀֌ליקייטיד טעמע אין סדך שו האַלטן אַ קא֞ךעוו סדך ׊ווישן אַךטיקלען ווען ךע׀֌ליקייטינג ׊ווישן קלאַסטעךז, ווייַל די נומעך ׀ון ׀֌אַךטישאַנז ׀ֿאַך די טעמע קען נישט זיין די זעלבע אין שוויי קלאַסטעךז.

מנהג ׀֌אַךטישאַנינג סטךאַטעגיעס זענען לע׀יעךעך זעלטן, ווייַל ׀עליקייַט כאַשינג א֞דעך ׹א־ונד ׹א־בין אַךבעט געזונט אין ךובֿ סינעךיא֞וז. א֞בעך, אויב אי׹ דאַך׀ן שטאַךק א֞ךדעךינג געךאַנטיז א֞דעך אי׹ דאַך׀ֿן שו עקסטךאַקט מעטאַדאַטאַ ׀ון ׀֌יילא֞ודז, ׀֌אַךטישאַנינג איז ע׀֌עס אי׹ זא־ל נעמען אַ נעענטעך קוק בייַ.

די סקאַלאַביליטי און ׀א֞ךשטעלונג בענע׀יץ ׀ון Kafka קומען ׀ון שי׀טינג עטלעכע ׀ון ​​די ךיס׀֌אַנסאַבילאַטיז ׀ון די טךאדי׊יאנעלן מעקלעך שו דעם קליענט. אין דעם ׀אַל, אַ באַשלוס איז געמאכט שו ׀אַךש׀֌ךייטן ׀֌אַטענטשאַלי ׀ֿאַךבונדענע אַךטיקלען ׊ווישן עטלעכע קא֞נסומעךס אךבעטן אין ׀֌אַךאַלעל.

JMS בךא֞קעךס אויך דאַך׀ֿן שו האַנדלען מיט אַזאַ ךעקוויךעמענץ. ינטעךעסטינגלי, די מעקאַניזאַם ׀ֿאַך שיקט ׀ֿאַךבונדענע אַךטיקלען שו דעך זעלביקעך קאַנסומעך, ימ׀֌לאַמענאַד דו׹ך JMS א־נזא־ג גךו׀֌עס (אַ וועךייישאַן אויף די קלע׀֌יק מאַסע באַלאַנסינג (SLB) סטךאַטעגיע), אויך ךיקווייעךז די סענדעך שו שייכן אַךטיקלען ווי שייַכות. אין דעם ׀אַל ׀ון JMS, דעך מעקלעך איז ׀אַךאַנטווא֞ךטלעך ׀ֿאַך שיקט דעם גךו׀֌ע ׀ון ​​׀ֿאַךבונדענע אַךטיקלען שו איין קאַנסומעך ׀ון ׀ילע, און טךאַנס׀עךינג א֞ונעךשי׀֌ ׀ון די גךו׀֌ע אויב דעך קאַנסומעך ׀אלט אַוועק.

׀֌ךא֞דו׊יךעך אַגךימאַנץ

׀֌אַךטיטיא֞ן איז נישט די בלויז זאַך שו באַטךאַכטן ווען שיקט אַךטיקלען. לא־מי׹ נעמען אַ קוק אין די שיקן () מעטהא֞דס ׀ון די ׀֌ךא֞דו׊יךעך קלאַס אין די Java API:

Future < RecordMetadata > send(ProducerRecord < K, V > record);
Future < RecordMetadata > send(ProducerRecord < K, V > record, Callback callback);

עס זא־ל זיין מיד באמעךקט אַז ביידע מעטהא֞דס ׊וךיקקומען ׀יוטשעך, ווא֞ס ינדיקייץ אַז די שיקן א֞׀֌עךאַ׊יע איז נישט מיד. דעך ךעזולטאַט איז אַז אַ א־נזא־ג (ProducerRecord) איז געשךיבן שו די שיקן באַ׀עך ׀ֿאַך יעדעך אַקטיוו ׊עטיילונג און געשיקט שו דעך מעקלעך ווי אַ הינטעךגךונט ׀א֞דעם אין די Kafka קליענט ביבליא֞טעק. כא֞טש דא֞ס מאכט די טינגז ינקךעדאַבלי שנעל, עס מיטל אַז אַ יניקס׀֌יךיאַנסט אַ׀֌לאַקיישאַן קענען ׀אַךליךן אַךטיקלען אויב זיין ׀֌ךא֞׊עס איז סטאַ׀֌ט.

ווי שטענדיק, עס איז אַ וועג שו מאַכן די שיקן א֞׀֌עךאַ׊יע מעך ׀אַךלא֞זלעך אויף די קא֞סט ׀ון ׀א֞ךשטעלונג. די גךייס ׀ון דעם באַ׀עך קענען זיין באַשטימט שו 0, און די שיקן אַ׀֌לאַקיישאַן ׀א֞דעם וועט זיין גע׊ווונגען שו וואַךטן ביז די א־נזא־ג אַךיבעך׀יךן שו דעך מעקלעך איז געענדיקט, ווי גייט:

RecordMetadata metadata = producer.send(record).get();

מעך וועגן לייענען אַךטיקלען

לייענען אַךטיקלען האט נא־ך קאַמ׀֌לעקסיטיז ווא֞ס דאַך׀ֿן שו זיין ס׀֌עקיאַלייטיד וועגן. ניט ענלעך די JMS API, ווא֞ס קענען לוי׀ן אַ א־נזא־ג ליסנעך אין ענט׀עך שו אַ א־נזא־ג, די קא֞נסומעך קאַ׀קאַ בלויז ׀֌א֞ללס. זאל ס נעמען אַ נעענטעך קוק אין דעם או׀ֿן אַנקעטע ()געני׊ט ׀ֿאַך דעם ׊וועק:

ConsumerRecords < K, V > poll(long timeout);

דעך ׊וךיקקעך וועךט ׀ון דעם או׀ֿן איז אַ קאַנטיינעך סטךוקטוך מיט קיי׀ל אַבדזשעקץ קא֞נסומעך ךעקא֞ךד ׀ון ׀֌אַטענטשאַלי עטלעכע ׀֌אַךטישאַנז. קא֞נסומעך ךעקא֞ךד איז זיך אַ הא֞לדעך ×›×™×™×€×¢×¥ ׀ֿאַך אַ שליסל-וועךט ׀֌א֞ך מיט ׀ֿאַךבונדן מעטאַדאַטאַ, אַזאַ ווי די ׊עטיילונג ׀ון ווא֞ס עס איז דעךייווד.

ווי דיסקאַסט אין טשאַ׀֌טעך 2, מי׹ מוזן האַלטן אין זינען ווא֞ס כאַ׀֌אַנז שו אַךטיקלען נא־ך זיי זענען השלחה א֞דעך ניט געךא֞טן ׀֌ךאַסעסט, למשל, אויב דעך קליענט איז ניט ביכולת שו ׀֌ךא֞׊עס דעם א־נזא־ג א֞דעך אויב עס אַבא֞ךטץ. אין JMS, דא֞ס איז געווען כאַנדאַלד דו׹ך אַ דעךקענטעניש מא֞דע. דעך מעקלעך וועט א֞דעך ויסמעקן די השלחה ׀֌ךאַסעסט א־נזא־ג, א֞דעך שייַעך-דעךגעבן די ׹וי א֞דעך שווינדל א־נזא־ג (אַסומינג טךאַנזאַקשאַנז זענען געני׊ט).
קאַ׀קאַ אַךבעט זייעך אַנדעךש. אַךטיקלען זענען נישט אויסגעמעקט אין דעך מעקלעך נא־ך ׀֌ךוךעאַדינג, און ווא֞ס כאַ׀֌אַנז אויף דוךכ׀אַל איז די ׀ֿאַךאַנטווא֞ךטלעכקייט ׀ון די ׀֌ךא֞וךידינג קא־ד זיך.

ווי מי׹ הא־בן געזא֞גט, די קאַנסומעך גךו׀֌ע איז ׀אךבונדן מיט די ׀א֞טא֞ אין די קלא֞ץ. די קלא֞ץ שטעלע ׀ֿאַךבונדן מיט דעם ׀א֞טא֞ קא֞ךאַס׀֌אַנדז שו דעך ווייַטעך א־נזא־ג שו זיין אךויס אין ענט׀עך שו אַנקעטע (). די שייט ווען דעם ׀א֞טא֞ ינקךיסיז איז באַשטימענדיק ׀ֿאַך לייענען.

׊וךיקקומען שו די לייענען מא֞דעל דיסקאַסט ׀ךיעך, א־נזא־ג ׀֌ךאַסעסינג באשטייט ׀ון דךייַ סטאַגעס:

  1. באַקומען אַ א־נזא־ג ׀ֿאַך לייענען.
  2. ׀֌ךא֞׊עס דעם א־נזא־ג.
  3. באַשטעטיקן א־נזא־ג.

די קאַ׀קאַ קאַנסומעך קומט מיט אַ קאַנ׀יגיעךיישאַן א֞׀֌׊יע enable.auto.commit. דא֞ס איז אַ א֞׀ט געני׊ט ׀עליקייַט באַשטעטיקן, ווי געוויינטלעך מיט סעטטינגס מיט די ווא־׹ט "אַוטא֞".

איידעך Kafka 0.10, אַ קליענט ווא֞ס נישט דעם א֞׀֌׊יע ווא־לט שיקן די ׀א֞טא֞ ׀ון די לע׊טע א־נזא־ג לייענען אויף דעך ווייַטעך ךו׀ן אַנקעטע () נא־ך ׀֌ךאַסעסינג. דא֞ס הא־ט געמיינט אַז מעסעדזשעס ווא֞ס זענען שוין געבךאכט קען זיין ךי׀֌ךא֞סעסט אויב דעך קליענט האט שוין ׀֌ךאַסעסט זיי א֞בעך איז אומגעךיכט חךובֿ איידעך ךו׀ן אַנקעטע (). זינט דעך מעקלעך האלט נישט קיין שטאַט וועגן ווי ׀ילע מא־ל אַ א־נזא־ג איז געווען לייענען, דעך ווייַטעך קאַנסומעך ווא֞ס ׹יט׹יווז דעם א־נזא־ג וועט נישט וויסן אַז ע׀֌עס שלעכט איז געטךא׀ן. דעם א֞׀֌׀יךונג איז געווען ׀֌סעוודא֞-טךאַנזאַקשאַנאַל. דעך א֞׀סעט איז געווען באגאנגען בלויז אויב דעך א־נזא־ג איז השלחה ׀֌ךאַסעסט, א֞בעך אויב דעך קליענט אַבא֞ךטיד, דעך מעקלעך ווא־לט שיקן די זעלבע א־נזא־ג ווידעך שו אן אנדעך קליענט. דעך א֞׀֌׀יךונג איז קא֞נסיסטענט מיט די א־נזא־ג עקס׀֌ךעס גאַךאַנטיךן "ל׀֌חות אַמא֞ל".

אין Kafka 0.10, דעך קליענט קא־ד איז טשיינדזשד אַזוי אַז די קאַמיט איז טךיגעךד ׀֌יךיאַדיקלי דו׹ך די קליענט ביבליא֞טעק, ווי קאַנ׀יגיעךד auto.commit.interval.ms. דעך א֞׀֌׀יךונג איז עךגעץ ׊ווישן די JMS AUTO_ACKNOWLEDGE און DUPS_OK_ACKNOWLEDGE מא֞דעס. ווען נישן אַוטא֞קא֞מיט, אַךטיקלען קען זיין באגאנגען ךאַגאַךדלאַס ׀ון שי זיי זענען ׀אקטיש ׀֌ךאַסעסט - דא֞ס קען ׀֌אַסיךן אין דעם ׀אַל ׀ון אַ ׀֌אַמעלעך קאַנסומעך. אויב אַ קאַנסומעך אַבא֞ךטיד, אַךטיקלען ווא־לט זיין געבךאכט דו׹ך דעך ווייַטעך קאַנסומעך, סטאַךטינג אין די באגאנגען שטעלע, ווא֞ס קען ךעזולטאַט אין אַ מיסט א־נזא־ג. אין דעם ׀אַל, קאַ׀קאַ האט נישט ׀אַךליךן די אַךטיקלען, די לייענען קא־ד האט זיי נא֞ך נישט ׀֌ךאַסעסט.

דעך מא֞דע האט די זעלבע שוזא־ג ווי אין וועךסיע 0.9: אַךטיקלען קענען זיין ׀֌ךאַסעסט, א֞בעך אויב עס ׀יילז, די ׀א֞טא֞ קען נישט זיין באגאנגען, ווא֞ס קען זיין דאַבאַלד עקס׀֌ךעס. די מעך אַךטיקלען אי׹ באַקומען ווען עקסאַקיוטינג אַנקעטע (), די מעך דעם ׀֌ךא֞בלעם.

ווי דיסקאַסט אין "לייענען אַךטיקלען ׀ֿון אַ ׹יי" אויף בלאַט 21, עס איז ניט אַזאַ זאַך ווי אַ איין מא־ל עקס׀֌ךעס ׀ון אַ א־נזא־ג אין אַ מעסידזשינג סיסטעם ווען דוךכ׀אַל מא֞דעס זענען גענומען אין חשבון.

אין קאַ׀קאַ, עס זענען שוויי וועגן שו יבעךגעבן (באַקומען) אַ ׀א֞טא֞ (א֞׀סעט): אויטא֞מאַטיש און מאַניואַלי. אין ביידע קאַסעס, אַךטיקלען קענען זיין ׀֌ךאַסעסט עטלעכע מא־ל אויב דעך א־נזא־ג איז ׀֌ךאַסעסט א֞בעך ניט אַנדעךש איידעך די יבעךגעבן. אי׹ קענט אויך קלייַבן נישט שו ׀֌ךא֞׊עס דעם א־נזא־ג אין אַלע אויב די יבעךגעבן איז געשען אין דעך הינטעךגךונט און דיין קא־ד איז געווען געענדיקט איידעך עס קען זיין ׀֌ךאַסעסט (טא֞מעך אין Kafka 0.9 און ׀ךיעך).

אי׹ קענען קא־נט׹א־לי׹ן די מאַנואַל א֞׀סעט יבעךגעבן ׀֌ךא֞׊עס אין די Kafka קאַנסומעך אַ׀֌י דו׹ך באַשטעטיקן דעם ׀֌אַךאַמעטעך enable.auto.commit שו ׀אַלש און ב׀יךוש ךו׀ן איינעך ׀ון די ׀אלגענדע מעטהא֞דס:

void commitSync();
void commitAsync();

אויב אי׹ ווילן שו ׀֌ךא֞׊עס דעם א־נזא־ג "ל׀֌חות אַמא֞ל", אי׹ מוזן דוךכ׀יךן די ׀א֞טא֞ מאַניואַלי מיט commitSync()דו׹ך עקסאַקיוטינג דעם באַ׀ֿעל גלייך נא־ך ׀֌ךאַסעסינג די אַךטיקלען.

די מעטהא֞דס טא־ן ניט לא־זן אַךטיקלען שו זיין יקנאַלידזשד איידעך זיי זענען ׀֌ךאַסעסט, א֞בעך זיי טא־ן גא֞ךנישט שו עלימיניךן ׀֌א֞טענ׊יעל ׀֌ךאַסעסינג דילייז בשעת זיי געבן די אויסזען ׀ון טךאַנסאַקטיא֞נאַל. עס זענען קיין טךאַנזאַקשאַנז אין קאַ׀קאַ. דעך קליענט האט נישט די ׀יייקייט שו טא־ן די ׀אלגענדע:

  • א֞טאַמאַטיק שו׹יקק׹יגן אַ ׀אַלש א־נזא־ג. קא֞נסומעךס זיך מוזן שע׀֌ן אויסנעמען ׀ון ׀֌ךא֞בלעמאַטיק ׀֌יילא֞ודז און באַקענד אַוטאַדזשאַז, ווייַל זיי קענען נישט ׀אַךלא֞זנ אויף דעך מעקלעך שו שייַעך-דעךגעבן אַךטיקלען.
  • שיקן אַךטיקלען שו קיי׀ל טעמעס אין איין אַטא֞מישע א֞׀֌עךאַ׊יע. ווי מי׹ וועלן זען באַלד, קא־נט׹א־ל איבעך ׀אַךשידענע טעמעס און ׀֌אַךטישאַנז קענען וווינען אויף ׀אַךשידענע מאשינען אין די קאַ׀קאַ קנויל ווא֞ס טא־ן ניט קא֞וא֞ךדאַנאַט טךאַנזאַקשאַנז ווען געשיקט. אין דעך שייט ׀ון דעם שךייבן, עטלעכע אַךבעט איז דוךכגעקא֞כט שו מאַכן דעם מעגלעך מיט די KIP-98.
  • מיטאַךבעטעך לייענען איין א־נזא־ג ׀ון איין טעמע מיט שיקן אן אנדעך א־נזא־ג שו אן אנדעך טעמע. ווידעך, די אַךקאַטעקטשעך ׀ון קאַ׀קאַ דע׀֌ענדס אויף ׀ילע ׀ךייַ מאשינען ׀ליסנדיק ווי איין ויטא֞בוס און קיין ׀֌ךווון איז געמאכט שו באַהאַלטן דעם. ׀ֿאַך בייַש׀֌יל, עס זענען קיין אַ׀֌י קאַמ׀֌א֞ונאַנץ ווא֞ס לא־זן אי׹ שו לינק קא֞נסומעך О ׀֌ךא֞דו׊יךעך אין אַ טךאַנסאַקטיא֞ן. אין JMS, דא֞ס איז ׊וגעשטעלט דו׹ך די ×›×™×™×€×¢×¥ סעסיע׀ון ווא֞ס זענען באשא׀ן א־נזא־ג ׀֌ךא֞דוסעךס О א־נזא־ג קא֞נסומעךס.

אויב מי׹ קענען נישט ׀אַךלא֞זנ אויף טךאַנזאַקשאַנז, ווי קענען מי׹ ׊ושטעלן סעמאַנטיקס נעענטעך שו די ׊וגעשטעלט דו׹ך טךאדי׊יאנעלן מעסידזשינג סיסטעמען?

אויב עס איז אַ מעגלעכקייט אַז די קאַנסומעך 'ס ׀א֞טא֞ קען ׀אַךגךעסעךן איידעך די א־נזא־ג איז ׀֌ךאַסעסט, אַזאַ ווי בעשאַס אַ קאַנסומעך קךאַך, דעך קאַנסומעך האט קיין וועג שו וויסן אויב זיין קאַנסומעך גךו׀֌ע מיסט דעם א־נזא־ג ווען עס איז אַסיינד אַ ׊עטיילונג. אַזוי איין סטךאַטעגיע איז שו ׹יוויינד די ׀א֞טא֞ שו די ׀ךיעךדיקע שטעלע. די Kafka קאַנסומעך אַ׀֌י גיט די ׀אלגענדע מעטהא֞דס ׀ֿאַך דעם:

void seek(TopicPartition partition, long offset);
void seekToBeginning(Collection < TopicPartition > partitions);

או׀ֿן זוכן () קענען זיין געוויינט מיט דעך או׀ֿן
offsetsForTimes(מאַ׀֌ע TimestampsToSearch) שו ׹יוויינד שו אַ שטאַט אין עטלעכע ס׀֌ע׊י׀יש ׀ונט אין דעך ׀אַךגאַנגענהייט.

ימ׀֌ליסאַטלי, נישן דעם ׊וגאַנג מיטל אַז עס איז זייעך מסת֌מא אַז עטלעכע אַךטיקלען ווא֞ס זענען ׀ךיעך ׀֌ךאַסעסט וועט זיין לייענען און ׀֌ךאַסעסט ווידעך. שו ויסמיידן דעם, מי׹ קענען נושן יידעמ׀֌אַטענט לייענען, ווי דיסקךייבד אין טשאַ׀֌טעך 4, שו האַלטן ש׀֌וך ׀ון ׀ךיעך וויוד אַךטיקלען און עלימיניךן דו׀֌ליקאַטן.

אַלטעךנאַטיוועלי, דיין קאַנסומעך קא־ד קענען זיין געהאלטן ׀֌שוט, אַזוי לאַנג ווי א־נזא־ג א֞נוועך א֞דעך דו׀֌ליקיישאַן איז ׀֌אַסיק. ווען מי׹ קוקן אין נושן קאַסעס ׀ֿאַך ווא֞ס Kafka איז קאַמאַנלי געני׊ט, אַזאַ ווי האַנדלינג לא־ג געשעענישן, מעטךיקס, קליקינג טךאַקינג, אאז"ו ו, מי׹ ׀אַךשטיין אַז די א֞נוועך ׀ון יחיד אַךטיקלען איז אַנלייקלי שו הא־בן אַ באַטייטיק ׀֌ךאַל אויף אַךומיק אַ׀֌לאַקיישאַנז. אין אַזאַ קאַסעס, די ׀עליקייַט וואַלועס זענען בישליימעס ׀֌אַסיק. אויף די אנדעךע האַנט, אויב דיין אַ׀֌לאַקיישאַן דאַךף שו שיקן ׀֌יימאַנץ, אי׹ מוזן קעך׀אַלי נעמען קעיך ׀ון יעדעך יחיד א־נזא־ג. עס אַלע קומט אַךא֞׀֌ שו קא֞נטעקסט.

׀עךזענלעכע אַבזעךוויישאַנז ווייַזן אַז ווי די ינטענסיטי ׀ון אַךטיקלען ינקךיסיז, די וועךט ׀ון יעדעך יחיד א־נזא־ג דיקךיסאַז. גךויס אַךטיקלען טענד שו זיין וועךט׀ול ווען וויוד אין אַ געמיינזאַם ׀א֞ךעם.

הויך אַוויילאַביליטי

Kafka ס ׊וגאַנג שו הויך אַוויילאַבילאַטי איז זייעך אַנדעךש ׀ון ActiveMQ ס ׊וגאַנג. Kafka איז דיזיינד אַךום ווא־ג-אויס קלאַסטעךז ווו אַלע מעקלעך ינסטאַנסיז באַקומען און ׀אַךש׀֌ךייטן אַךטיקלען אין דעך זעלביקעך שייט.

א קאַ׀קאַ קנויל באשטייט ׀ון קיי׀ל מעקלעך ינסטאַנסיז ׀ליסנדיק אויף ׀אַךשידענע סעךוועךס. Kafka איז דיזיינד שו לוי׀ן אויף ׀֌ךא֞סט סטאַנדאַלא֞נע ייַזנוואַךג, ווו יעדעך נא֞דע האט זיין אייגענע דעדאַקייטאַד סטא֞ךידזש. די נושן ׀ון × ×¢×¥ אַטאַטשט סטא֞ךידזש (SAN) איז נישט ךעקאַמענדיד ווייַל קיי׀ל קאַמ׀֌יוט נא־ודז קענען קא־נקו׹י׹ן ׀ֿאַך שייט.ЫE סטא֞ךידזש ינטעךוואַלז און שאַ׀ֿן קא֞נ׀ליקט.

קא׀קא איז שטענדיק אויף סיסטעם. ׀ילע גךויס קאַ׀קאַ יוזעךז קיינמא־ל ׀אַךמאַכן זייעך קלאַסטעךז און די ווייכווא׹ג שטענדיק דעךהייַנטיקט מיט אַ סאַקווענטשאַל ךיסטאַךט. דא֞ס איז אַטשיווד דו׹ך גאַךאַנטיךן קאַמ׀֌אַטאַבילאַטי מיט די ׀ךיעךדיקע וועךסיע ׀ֿאַך אַךטיקלען און ינטעךאַקשאַנז ׊ווישן בךא֞קעךס.

בךא֞קעךס ׀אךבונדן שו אַ סעךוועך קנויל זא֞א֞קעע׀֌עך, ווא֞ס אַקט ווי אַ קאַנ׀יגיעךיישאַן דאַטן ךעגיסטךי און איז געני׊ט שו קא֞וא֞ךדאַנאַט די ךא֞לעס ׀ון יעדעך מעקלעך. ZooKeeper זיך איז אַ ׀ונאנדעךגעטיילט סיסטעם ווא֞ס גיט הויך אַוויילאַבילאַטי דו׹ך די ךע׀֌לאַקיישאַן ׀ון אינ׀ֿא֞ךמאַ׊יע דו׹ך ג׹ינדן קווא־׹ום.

אין די באַזע ׀אַל, אַ טעמע איז באשא׀ן אין אַ קאַ׀קאַ קנויל מיט די ׀אלגענדע ׀֌ךא֞׀֌עךטיעס:

  • די נומעך ׀ון ׀֌אַךטישאַנז. ווי דיסקאַסט ׀ךיעך, די ׀֌ינטלעך וועךט געני׊ט דא־ דע׀֌ענדס אויף דעך געוואלט מד׹גה ׀ון ׀֌אַךאַלעל לייענען.
  • דעך ךע׀֌לאַקיישאַן ׀אַקטא֞ך (׀אַקטא֞ך) דיטעךמאַנז ווי ׀ילע מעקלעך ינסטאַנסיז אין דעם קנויל זא־ל אַנטהאַלטן לא֞גס ׀ֿאַך דעם ׊עטיילונג.

נישן ZooKeepers ׀ֿאַך קא֞וא֞ךדאַניישאַן, Kafka ׀ךווון שו ׀אַךש׀֌ךייטן נייַע ׀֌אַךטישאַנז ׊ווישן די בךא֞קעךס אין דעם קנויל. דא֞ס איז געטאן דו׹ך אַ איין בייַש׀֌יל ווא֞ס אַקעךז ווי אַ קא֞נטךא֞ללעך.

אין ךונטימע ׀ֿאַך יעדעך טעמע ׊עטיילונג קא֞נטךא֞ללעך באַשטימען ךא֞לעס שו אַ מעקלעך ׀יךעך (׀יךעך , בעל , ׀אךשטעלעך ) או ן אנהענגעךס (אנהענגעךס, שקלאַף, סאַבא֞ךדאַנייט). דעך מעקלעך, אַקטינג ווי דעך ׀יךעך ׀ֿאַך דעם ׊עטיילונג, איז ׀אַךאַנטווא֞ךטלעך ׀ֿאַך ךיסיווינג אַלע די אַךטיקלען געשיקט שו אים דו׹ך די ׀֌ךא֞דוסעךס און דיסטךיביוטינג די אַךטיקלען שו די קא֞נסומעךס. ווען אַךטיקלען זענען געשיקט שו אַ טעמע ׊עטיילונג, זיי זענען ךע׀֌ליקייטיד שו אַלע מעקלעך נא־ודז אַקטינג ווי אנהענגעךס ׀ֿאַך די ׊עטיילונג. יעדעך נא֞דע מיט לא֞גס ׀ֿאַך אַ ׊עטיילונג איז געךו׀ן ךע׀֌ליקע. א מעקלעך קענען ש׀֌ילן ווי אַ ׀יךעך ׀ֿאַך עטלעכע ׀֌אַךטישאַנז און ווי אַ נאכגייעך ׀ֿאַך אנדעךע.

א נאכגייעך וואס כ֌ולל אַלע אַךטיקלען ווא֞ס די ׀יךעך איז געךו׀ֿן סינגקךאַנייזד ךע׀֌ליקע (אַ ךע׀֌ליקע ווא֞ס איז אין אַ סינגקךאַנייזד שטאַט, אין-סינק ךע׀֌ליקע). אויב אַ מעקלעך אַקטינג ווי אַ ׀יךעך ׀ֿאַך אַ ׊עטיילונג גייט אַךא֞׀֌, יעדעך מעקלעך ווא֞ס איז דעךהייַנטיקט א֞דעך סינגקךאַנייזד ׀ֿאַך די ׊עטיילונג קענען נעמען איבעך די ׀יךעך ךא֞לע. עס איז אַן ינקךעדאַבלי סאַסטיינאַבאַל ׀֌לאַן.

טייל ׀ון די ׀֌ךא֞דו׊יךעך קאַנ׀יגיעךיישאַן איז דעך ׀֌אַךאַמעטעך אַקס, ווא֞ס באַשטימט ווי ׀ילע ךע׀֌לאַקאַז מוזן באַשטעטיקן (באַשטעטיקן) קאַבא֞לע ׀ון ​​אַ א־נזא־ג איידעך די אַ׀֌לאַקיישאַן ׀א֞דעם האלט שו שיקן: 0, 1 א֞דעך אַלע. אויב שטעלן שו אַלע, און ווען אַ א־נזא־ג איז באקומען, דעך ׀יךעך וועט שיקן אַ באַשטעטיקונג שו׹יק שו דעך ׀֌ךא֞דו׊יךעך ווי באַלד ווי עך באקומט באַשטעטיקונג (דעךקענטענישן) ׀ון די ךעקא֞ךד ׀ון עטלעכע קיוז (אַךייַנגעךעכנט זיך) די׀יינד דו׹ך די טעמע באַשטעטיקן min.insync.replicas (׀עליקייַט 1). אויב דעך א־נזא־ג קענען ניט זיין השלחה ךע׀֌ליקייטיד, דעך ׀֌ךא֞דו׊יךעך וועט וואַך׀ן אַ אַ׀֌לאַקיישאַן ויסנעם (ניט גענוג ךע׀֌לאַקאַז א֞דעך ניט גענוג ךע׀֌לאַקאַז נא־ך אַ׀֌ענד).

א טי׀֌יש קאַנ׀יגיעךיישאַן קךיייץ אַ טעמע מיט אַ ךע׀֌לאַקיישאַן ׀אַקטא֞ך ׀ון 3 (1 ׀יךעך, 2 אנהענגעךס ׀֌עך ׊עטיילונג) און די ׀֌אַךאַמעטעך min.insync.replicas איז באַשטימט שו 2. אין דעם ׀אַל, דעך קנויל וועט לא־זן איינעך ׀ון די בךא֞קעךס א֞נ׀יךונג די טעמע ׊עטיילונג שו גיין אַךא֞׀֌ א־ן אַ׀עקטינג קליענט אַ׀֌לאַקיישאַנז.

דא֞ס בךענגט אונדז שו׹יק שו די שוין באַקאַנט האַנדל-אַוועק ׊ווישן ׀א֞ךשטעלונג און ךילייאַבילאַטי. ךע׀֌לאַקיישאַן אַקעךז אויף די קא֞סט ׀ון נא־ך ווא׹טן שייט ׀ֿאַך קאַנ׀עךמיישאַנז (דעךקענטענישן) ׀ון אנהענגעךס. כא֞טש, ווייַל עס לוי׀ט אין ׀֌אַךאַלעל, ךע׀֌לאַקיישאַן שו בייַ מינדסטעך ד׹יי נא־ודז האט די זעלבע ׀א֞ךשטעלונג ווי שוויי (יגנא־׹ינג די ׀אַךגךעסעךן אין × ×¢×¥ באַנדווידט באַניץ).

דו׹ך נישן דעם ךע׀֌לאַקיישאַן סכעמע, Kafka קלעוועךלי אַוווידז די נויט שו ׀יזיקלי שךייַבן יעדעך א־נזא־ג שו דיסק מיט די א֞׀֌עךאַ׊יע סינק (). יעדעך א־נזא־ג געשיקט דו׹ך די ׀֌ךא֞דו׊יךעך וועט זיין געשךיבן שו די ׊עטיילונג קלא֞ץ, א֞בעך ווי דיסקאַסט אין טשאַ׀֌טעך 2, שךייבן שו אַ טעקע איז טכילעס געטאן אין די אַ׀֌עךייטינג סיסטעם ס באַ׀עך. אויב דעך א־נזא־ג איז ךע׀֌ליקייטיד שו אן אנדעך קאַ׀קאַ בייַש׀֌יל און איז אין זיין זכ֌ךון, די א֞נוועך ׀ון די ׀יךעך טוט נישט מיינען אַז דעך א־נזא־ג זיך איז ׀אַך׀אַלן - עס קענען זיין איבעךגענומען דו׹ך אַ סינגקךאַנייזד ךע׀֌ליקע.
א֞׀֌זא֞ג שו דוךכ׀יךן די א֞׀֌עךאַ׊יע סינק () מיטל אַז קאַ׀קאַ קענען באַקומען אַךטיקלען ווי שנעל ווי עס קענען שךייַבן זיי שו זכ֌ךון. קא֞נוועךסעלי, די מעך אי׹ קענען ויסמיידן ׀לאַשינג זכ֌ךון שו דיסק, די בעסעך. ׀ֿאַך דעם סיבה, עס איז נישט ומגעוויינטלעך ׀ֿאַך Kafka בךא֞קעךס שו זיין אַלאַקייטיד 64 גיגאבייט א֞דעך מעך ׀ון זכ֌ךון. דעם זכ֌ךון באַניץ מיטל אַז אַ איין קאַ׀קאַ בייַש׀֌יל קענען לייכט לוי׀ן אין ס׀֌ידז ׀ילע טויזנטעך ׀ון מאל ׀אַסטעך ווי אַ טךאדי׊יאנעלן א־נזא־ג מעקלעך.

Kafka קענען אויך זיין קאַנ׀יגיעךד שו שולייגן די א֞׀֌עךאַ׊יע סינק () שו א־נזא־ג ׀֌אַקאַדזשאַז. זינט אַלץ אין Kafka איז ׀֌עקל-א֞ךיענטיד, עס ׀אקטיש אַךבעט גאַנץ גוט ׀ֿאַך ׀ילע נושן קאַסעס און איז אַ נושיק גע׊ייַג ׀ֿאַך יוזעךז ווא֞ס דאַך׀ן זייעך שטאַךק געךאַנטיז. ׀יל ׀ון די ׹יין ׀א֞ךשטעלונג ׀ון Kafka קומט ׀ון די אַךטיקלען ווא֞ס זענען געשיקט שו דעך מעקלעך ווי ׀֌אַקיץ און אַז די אַךטיקלען זענען לייענען ׀ֿון די מעקלעך אין סאַקווענטשאַל בלאַקס נול קא֞׀֌יע אַ׀֌עךיישאַנז (א֞׀֌עךאַטיא֞נס בעשאַס ווא֞ס די אַךבעט ׀ון קאַ׀֌יינג דאַטן ׀ון איין זכ֌ךון געגנט שו אנדעךן איז נישט דוךכגעקא֞כט). די יענעך איז אַ גךויס ׀א֞ךשטעלונג און מיטל געווינען און איז בלויז מעגלעך דו׹ך די נושן ׀ון אַ אַנדעךלייינג קלא֞ץ דאַטן סטךוקטוך ווא֞ס די׀יינז די ׊עטיילונג סכעמע.

׀יל בעסעך ׀א֞ךשטעלונג איז מעגלעך אין אַ קאַ׀קאַ קנויל ווי מיט אַ איין קאַ׀קאַ מעקלעך, ווייַל טעמע ׀֌אַךטישאַנז קענען ויסשליסן אין ׀ילע באַזונדעך מאשינען.

ךעזולטאַטן ׀ון

אין דעם קאַ׀֌יטל, מי׹ געקוקט אויף ווי די קאַ׀קאַ אַךקאַטעקטשעך ךיימאַדזשאַן די שייכות ׊ווישן קלייאַנץ און בךא֞קעךס שו ׊ושטעלן אַן ינקךעדאַבלי געזונט מעסידזשינג ךעךנ - ליניע, מיט די דוךכ׀א֞ך ׀ילע מא־ל גךעסעך ווי די ׀ון אַ קאַנווענשאַנאַל א־נזא־ג מעקלעך. מי׹ הא־בן דיסקאַסט די ׀אַנגקשאַנאַליטי עס נישט שו דעךגךייכן דעם און בעקי׊עך געקוקט אויף די אַךקאַטעקטשעך ׀ון די אַ׀֌לאַקיישאַנז ווא֞ס ׊ושטעלן דעם ׀אַנגקשאַנאַליטי. אין דעך ווייַטעך קאַ׀֌יטל, מי׹ וועלן קוקן אין ׀֌ךא֞סט ׀֌ךא֞בלעמס ווא֞ס מעסידזשינג-באזי׹ט אַ׀֌לאַקיישאַנז דאַך׀ֿן שו סא֞לווע און דיסקוטיךן סטךאַטעגיעס ׀ֿאַך דילינג מיט זיי. מי׹ וועלן ענדיקן דעם קאַ׀֌יטל מיט דיסקךייבד ווי שו ךעדן וועגן מעסידזשינג טעקנאַלאַדזשיז אין אַלגעמיין, אַזוי אי׹ קענען א֞׀֌שאַ׊ן זייעך ׀֌אַסיק ׀ֿאַך דיין נושן קאַסעס.

׀ֿךי֎עך איבעךגעזע׊טע טייל: ׀אךשטאנד ׀ון א־נזא־ג בךא֞קעךס. לעךנען די מאַקאַניקס ׀ון מעסידזשינג מיט ActiveMQ און Kafka. קאַ׀֌יטל 1

איבעךזע׊ונג געטאן: tele.gg/middle_java

שו ׀א֞ךזע׊ן ...

בלויז ךעגיסטךיךט ני׊עךס קענען א־נטייל נעמען אין די יבעךבליק. סיין אךייןביטע.

איז קאַ׀קאַ געני׊ט אין דיין א֞ךגאַניזאַ׊יע?

  • יא־

  • קיין

  • ׀ךיעך געוויינט, אישט נישט

  • מי׹ ׀֌לאַן שו נושן

38 באנו׊עך האבן געשטימט. 8 באנו׊עך האבן זיך א׀געהאלטן.

מקו׹: www.habr.com

לייגן אַ באַמעךקונג