Na faapefea ona avea Kafka ma mea moni

Na faapefea ona avea Kafka ma mea moni

Ei Habr!

Ou te galue i le 'au a Tinkoff, lea o loʻo atiaʻe lana lava nofoaga faʻasalalauga. E tele lava ina ou atiaʻe i Java e faʻaaoga ai le Spring boot ma foia faʻafitauli faʻapitoa eseese e tulaʻi mai i se galuega.

O le tele oa matou auaunaga laiti e feso'ota'i le tasi i le isi e ala i se fefa'ataua'iga fe'au. I le taimi muamua, na matou faʻaaogaina le IBM MQ o se tagata faʻatau oloa, lea e le mafai ona toe faʻafetaui le uta, ae i le taimi lava e tasi e maualuga le tuʻuina atu o faʻamaoniga.

I le avea ai ma sui, na ofoina mai ia i matou Apache Kafka, lea e maualuga lona gafatia, ae, o le mea e leaga ai, e manaʻomia ai le toetoe lava o tagata taʻitoʻatasi i le faʻatulagaina mo faʻaaliga eseese. E le gata i lea, o le le itiiti ifo ma le tasi le faʻaogaina o masini e galue i Kafka e le mafai ona faʻatagaina le tausia o le tulaga manaʻomia o le tutusa i fafo o le pusa. Le isi, o le a ou faʻasoa atu lo matou poto masani i le faʻatulagaina o Kafka, aemaise lava, o le a ou taʻu atu ia te oe pe faʻafefea ona faʻatulagaina ma ola faʻatasi ma le tuʻuina atu.

Faʻamaonia le tuʻuina atu ma sili atu

O tulaga o loʻo talanoaina i lalo o le a fesoasoani e puipuia le tele o faʻafitauli i le faʻaogaina o fesoʻotaʻiga. Ae muamua ou te manaʻo e faʻalogo i le tasi parakalafa o le a faʻafaigofieina se faʻalavelave faʻafefe.

O le a fesoasoani lea client.id mo Faumea ma Tagata Fa'atau. I le tepa muamua, e mafai ona e faʻaogaina le igoa o le talosaga e avea ma tau, ma i le tele o tulaga o le a aoga. E ui o le tulaga pe a faʻaaogaina e se talosaga le tele o Tagata Faʻatau ma e te tuʻuina atu ia i latou le client.id e tasi, e iʻu i le lapataiga lea:

org.apache.kafka.common.utils.AppInfoParser — Error registering AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=kafka.test-0

Afai e te manaʻo e faʻaaoga le JMX i se talosaga ma Kafka, ona mafai lea ona avea ma faʻafitauli. Mo lenei tulaga, e sili ona lelei le faʻaaogaina o le tuʻufaʻatasiga o le igoa talosaga ma, mo se faʻataʻitaʻiga, le igoa autu o le client.id tau. O le taunuuga o la matou faʻatulagaga e mafai ona vaʻaia i le faʻatonuga o galuega kafka-fa'atau-vaega mai mea aoga mai Confluent:

Na faapefea ona avea Kafka ma mea moni

Se'i o tatou va'ai i le fa'aaliga mo le fa'aolaina o fe'au mautinoa. Kafka Producer ei ai se parakalafa acks, lea e mafai ai ona e fetuutuunai pe a uma le aofaʻi e faʻaalia e manaʻomia e le taʻitaʻi faʻapipiʻi ona mafaufau lelei le tusiaina o le savali. E mafai e lenei ta'otoga ona fa'aaoga tulaga nei:

  • 0 - faʻailoa o le a le mafaufauina.
  • 1 o le fa'ailoga fa'aletonu, na'o le 1 fa'atusa e mana'omia e fa'ailoa.
  • −1 - fa'ailoa mai fa'asologa fa'atasi uma e mana'omia (fa'apipi'i fa'apipi'i min.insync.replicas).

Mai le lisi o tau o loʻo manino mai o acks e tutusa ma le −1 e maua ai le faʻamaoniga sili e le leiloa le feʻau.

E pei ona tatou iloa uma, o faiga tufatufaina e le faʻatuatuaina. Ina ia puipuia mai faaletonu le tumau, ua saunia e Kafka Producer le filifiliga toe taumafai, lea e mafai ai ona e setiina le numera o le toe auina atu i totonu delivery.timeout.ms. Talu ai ona o le fa'ailoga toe fa'ata'ita'iga e iai le tau fa'aletonu ole Integer.MAX_VALUE (2147483647), e mafai ona fetu'una'i le aofa'i o fe'au toe fai e ala i le suia na'o le delivery.timeout.ms.

O lo'o matou aga'i atu i le tu'uina atu sa'o e tasi

O fa'atonuga o lo'o lisiina e mafai ai e le matou Faufautua ona tu'uina atu fe'au ma se fa'amautinoaga maualuga. Se'i o tatou talanoa nei pe fa'apefea ona fa'amautinoa e na'o le tasi le kopi o se fe'au e tusia i se autu Kafka? I le tulaga sili ona faigofie, ina ia faia lenei mea, e tatau ona e setiina le parakalafa i luga ole Producer enable.idempotence i le moni. Idempotency fa'amautinoa e na'o le tasi le fe'au e tusia i se vaega fa'apitoa o le autu e tasi. O le tulaga muamua mo le faʻatagaina o le faʻaleagaina o tau acks = uma, toe taumafai > 0, max.in.flight.requests.per.connection ≤ 5. Afai e le o faʻamaonia mai e le tagata atiaʻe ia taʻiala, o tau o loʻo i luga o le a otometi lava ona seti.

A faʻapipiʻi le idempotency, e tatau ona faʻamautinoa o feʻau tutusa e iʻu i vaega tutusa i taimi uma. E mafai ona faia lenei mea e ala i le setiina o le partitioner.class ki ma parakalafa i le Fausiaina. Tatou amata i le ki. E tatau ona tutusa mo talosaga taitasi. E faigofie ona ausia lenei mea e ala i le faʻaaogaina o soʻo se ID pisinisi mai le uluai pou. O le parakalafa partitioner.class e iai lona tau fa'aletonu − Fa'auiga Vaevaega. Faatasi ai ma lenei fuafuaga vaeluaga, e ala i le le mafai ona tatou faia e pei o lenei:

  • Afai o le vaeluaga o loʻo faʻamaonia manino pe a lafoina le feʻau, ona matou faʻaaogaina lea.
  • Afai e le o faʻamaonia le vaeluaga, ae o le ki e faʻamaonia, filifili le vaeluaga e ala i le hash o le ki.
  • Afai e le o faʻamaonia le vaeluaga ma le ki, filifili vaega taʻitasi (round-robin).

E le gata i lea, o le faʻaaogaina o se ki ma faʻailoga faʻapipiʻi ma se parakalafa max.in.flight.requests.per.connection = 1 e tu'uina atu ia te oe le fa'agaioiina o fe'au i luga ole Consumer. E taua foi le manatuaina afai e faʻapipiʻi le puleaina o avanoa i luga o lau fuifui, ona e manaʻomia lea o aia tatau e tusi faʻamaonia i se autu.

Afai faʻafuaseʻi e te le maua le gafatia o le idempotent auina atu e ala i le ki poʻo le manatu i luga o le itu Faumea e manaʻomia ai le faʻamautuina o faʻamaumauga i le va o vaeluaga eseese, ona oʻo mai lea o fefaʻatauaiga i le laveai. E le gata i lea, i le faʻaaogaina o se fefaʻatauaiga o filifili, e mafai ona e tuʻufaʻatasia se faʻamaumauga i Kafka, mo se faʻataʻitaʻiga, faʻatasi ai ma se faʻamaumauga i totonu o faʻamaumauga. Ina ia mafai ona auina atu fefaʻatauaʻiga i le gaosiga, e tatau ona faʻamaonia ma faʻaopoopoina transactional.id. Afai o lau fa'aputuga o Kafka e mafai ona fa'atonu le fa'atonuga, ona mana'omia lea e se fa'amaumauga tau fefa'ataua'iga, e pei o se fa'amaumauga fa'amaonia, e mafai ona tu'uina atu i le mask e fa'aaoga ai le tau o lo'o teuina i transactional.id.

I le tulaga aloa'ia, so'o se manoa, e pei o le igoa o le talosaga, e mafai ona fa'aaogaina e fai ma fa'amatalaga tau fefa'ataua'iga. Ae afai e te faʻalauiloaina le tele o faʻataʻitaʻiga o le talosaga lava e tasi ma le transactional.id tutusa, ona taofia lea o le faʻataʻitaʻiga muamua i se mea sese, talu ai o le a manatu Kafka o se faiga zombie.

org.apache.kafka.common.errors.ProducerFencedException: Producer attempted an operation with an old epoch. Either there is a newer producer with the same transactionalId, or the producer's transaction has been expired by the broker.

Ina ia foia lenei faafitauli, matou te faaopoopo se suffix i le igoa talosaga i le tulaga o le hostname, lea matou te maua mai fesuiaiga o le siosiomaga.

O loʻo faʻatulagaina le gaosiga, ae o fefaʻatauaiga i luga o Kafka naʻo le puleaina o le lautele o le feʻau. E tusa lava po o le a le tulaga o fefaʻatauaiga, o le savali e vave alu i le autu, ae o loʻo i ai faʻaopoopoga uiga faʻaoga.

Ina ia puipuia ia feʻau mai le faitauina e le Consumer i luma atu o le taimi, e manaʻomia ona seti le parakalafa faaesea.tulaga e faitau_faitau taua. O lea tagata fa'atau o le a mafai ona faitau i fe'au e le o fefa'ataua'iga e pei ona i ai muamua, ma fe'au fefa'ataua'iga pe a mae'a ona tu'u.
Afai ua uma ona e setiina tulaga uma o loʻo lisiina muamua, ona e faʻatulagaina tonu lava lea e tasi le tuʻuina atu. Fa'afetai!

Ae o loʻo i ai se isi nuance. Transactional.id, lea na matou faʻatulagaina i luga, o le mea moni o le faʻasologa o fefaʻatauaiga. I luga o le pule o fefaʻatauaiga, o se numera faʻasologa e faʻaopoopo i ai. O le fa'ailoga ua maua e tu'uina atu i transactional.id.expiration.ms, lea o loʻo faʻapipiʻiina i luga o se fuifui Kafka ma o loʻo i ai se tau le aoga o "7 aso". Afai o le taimi lea e leʻi mauaina e le talosaga ni feʻau, ona e taumafai lea o le isi fefaʻatauaiga o le a e mauaina InvalidPidMappingException. O le a tu'uina atu e le fa'auluuluga o fefa'atauaiga se numera fa'asologa fou mo le isi fefa'atauaiga. Peita'i, e ono leiloa le fe'au pe a le sa'o le taulimaina o le InvalidPidMappingException.

Nai lo le aofaʻi

E pei ona e vaʻai, e le lava le naʻo le lafoina o feʻau i Kafka. E tatau ona e filifilia se tu'ufa'atasiga o tapula'a ma sauni e fai ni suiga vave. I lenei tusiga, sa ou taumafai e faʻaalia auʻiliʻili le setiina o le tuʻuina atu ma faʻamatalaina le tele o faʻafitauli i le client.id ma transactional.id configurations na matou feagai. O lo'o i lalo se aotelega o le fa'atulagaina o le Fa'atauga ma Tagata Fa'atau.

gaosia:

  1. acks = uma
  2. toe taumafai > 0
  3. enable.idempotence = moni
  4. max.in.flight.requests.per.connection ≤ 5 (1 mo le fa'atonuina o le lafo)
  5. transactional.id = ${igoa-aaoga}-${igoa fa'aoga}

Tagata faʻatau:

  1. isolation.level = read_committed

Ina ia faʻaitiitia mea sese i talosaga i le lumanaʻi, na matou faia a matou lava afifi i luga o le faʻatulagaina o le tautotogo, lea ua uma ona setiina tau mo nisi o lisi lisi.

O mea nei e lua mo su'esu'ega a le tagata lava ia:

puna: www.habr.com

Faaopoopo i ai se faamatalaga