Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Hey Habr!

Nou raple w ke swiv liv la sou Kafka nou pibliye yon travay egalman enteresan sou bibliyotèk la Kafka Streams API.

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Pou kounye a, kominote a ap jis aprann limit zouti pwisan sa a. Se konsa, yon atik te pibliye dènyèman, tradiksyon an nan ki nou ta renmen prezante w. Soti nan pwòp eksperyans li, otè a di ki jan yo vire Kafka Streams nan yon depo done distribye. Jwi lekti!

Apache bibliyotèk Kafka Streams itilize atravè lemond nan antrepwiz pou distribiye pwosesis kouran sou tèt Apache Kafka. Youn nan aspè yo pa apresye nan kad sa a se ke li pèmèt ou estoke eta lokal pwodwi ki baze sou pwosesis fil.

Nan atik sa a, mwen pral di w ki jan konpayi nou an jere pwofitab itilize opòtinite sa a lè w ap devlope yon pwodwi pou sekirite aplikasyon nwaj. Sèvi ak Kafka Streams, nou te kreye mikwosèvis leta pataje, yo chak sèvi kòm yon sous enfòmasyon serye ki toleran ak fay ki disponib sou eta objè yo nan sistèm nan. Pou nou, sa a se yon etap pi devan tou de an tèm de fyab ak fasilite sipò.

Si w enterese nan yon apwòch altènatif ki pèmèt ou sèvi ak yon sèl baz done santral pou sipòte eta fòmèl objè ou yo, li li, li pral enteresan...

Poukisa nou te panse li te tan pou chanje fason nou travay ak eta pataje

Nou te bezwen kenbe eta a nan divès objè ki baze sou rapò ajan (pa egzanp: sit la te anba atak)? Anvan migrasyon nan Kafka Streams, nou souvan konte sou yon sèl baz done santral (+ sèvis API) pou jesyon eta a. Apwòch sa a gen dezavantaj li yo: dat sitiyasyon entansif kenbe konsistans ak senkronizasyon vin tounen yon defi reyèl. Baz done a ka vin yon bouche oswa fini nan kondisyon ras epi soufri enprevizib.

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 1: Yon senaryo tipik fann-eta wè anvan tranzisyon an
Kafka ak Kafka Streams: ajan yo kominike opinyon yo atravè API, eta ajou yo kalkile atravè yon baz done santral.

Rankontre Kafka Streams, ki rann li fasil pou kreye mikwosèvis leta pataje

Sa gen anviwon yon ane, nou te deside fè yon gade byen sou senaryo eta pataje nou yo pou rezoud pwoblèm sa yo. Nou te deside imedyatman eseye Kafka Streams - nou konnen ki jan li kapab évolutive, trè disponib ak toleran fay li ye, ki fonksyonalite difizyon rich li genyen (transfòmasyon, ki gen ladan yo eta). Jis sa nou te bezwen, nou pa mansyone ki jan matirite ak serye sistèm nan mesaj te vin nan Kafka.

Chak nan mikwosèvis leta nou te kreye yo te bati sou tèt yon egzanp Kafka Streams ak yon topoloji jistis senp. Li konsiste de 1) yon sous 2) yon processeur ak yon magazen kle-valè ki pèsistan 3) yon koule:

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 2: Topoloji default enstans difizyon nou yo pou mikwosèvis leta yo. Remake byen ke gen tou yon depo isit la ki gen metadata planifikasyon.

Nan nouvo apwòch sa a, ajan yo konpoze mesaj yo mete nan sijè sous la, epi konsomatè yo—di, yon sèvis notifikasyon pa lapòs—resevwa eta kalkile pataje atravè koule a (sijè pwodiksyon).

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 3: Nouvo egzanp flux travay pou yon senaryo ak mikwosèvis pataje: 1) ajan an jenere yon mesaj ki rive nan sijè sous Kafka la; 2) yon mikwosèvis ak eta pataje (itilize Kafka Streams) trete li epi ekri eta kalkile a nan sijè final Kafka la; apre sa 3) konsomatè yo aksepte nouvo eta a

Hey, magazen kle-valè entegre sa a aktyèlman trè itil!

Kòm mansyone pi wo a, topoloji eta pataje nou an gen yon magazen kle-valè. Nou jwenn plizyè opsyon pou itilize li, e de nan yo dekri anba a.

Opsyon #1: Sèvi ak yon magazen kle-valè pou kalkil

Premye magazen kle-valè nou an te genyen done oksilyè nou te bezwen pou kalkil yo. Pou egzanp, nan kèk ka eta a pataje te detèmine pa prensip la nan "vòt majorite". Repozitwa a te kapab kenbe tout dènye rapò ajan yo sou estati kèk objè. Lè sa a, lè nou te resevwa yon nouvo rapò nan men yon ajan oswa yon lòt, nou te kapab sove li, rekipere rapò nan tout lòt ajan yo sou eta a nan menm objè a nan depo, epi repete kalkil la.
Figi 4 ki anba a montre kijan nou ekspoze magazen kle/valè a nan metòd pwosesis processeur a pou nouvo mesaj la kapab trete.

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Illustration 4: Nou louvri aksè nan magazen kle-valè pou metòd pwosesis processeur a (apre sa, chak script ki travay ak eta pataje dwe aplike metòd la. doProcess)

Opsyon #2: Kreye yon API CRUD sou tèt Kafka Streams

Lè nou te etabli travay debaz nou an, nou te kòmanse eseye ekri yon API RESTful CRUD pou mikwosèvis leta nou yo. Nou te vle pou kapab rekipere eta a nan kèk oswa tout objè, osi byen ke mete oswa retire eta a nan yon objè (itil pou sipò backend).

Pou sipòte tout Get State APIs, chak fwa nou te bezwen rekalkile eta a pandan pwosesis la, nou estoke li nan yon magazen kle-valè entegre pou yon tan long. Nan ka sa a, li vin byen senp pou aplike yon API konsa lè l sèvi avèk yon sèl egzanp Kafka Streams, jan yo montre nan lis ki anba a:

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 5: Sèvi ak magazen kle-valè entegre a pou jwenn eta prekalkile yon objè

Mete ajou eta a nan yon objè atravè API a se tou fasil aplike. Fondamantalman, tout sa ou bezwen fè se kreye yon pwodiktè Kafka epi sèvi ak li pou fè yon dosye ki gen nouvo eta a. Sa asire ke tout mesaj ki te pwodwi atravè API a pral trete menm jan ak sa yo resevwa nan men lòt pwodiktè (egzanp ajan).

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 6: Ou ka mete eta a nan yon objè lè l sèvi avèk pwodiktè Kafka la

Ti konplikasyon: Kafka gen anpil patisyon

Apre sa, nou te vle distribye chaj pwosesis la ak amelyore disponiblite lè nou bay yon gwoup mikwosèvis eta pataje pou chak senaryo. Enstalasyon se te yon briz: yon fwa nou konfigirasyon tout ka kouri anba menm ID aplikasyon an (ak menm sèvè bootstrap yo), prèske tout lòt bagay yo te fè otomatikman. Nou te espesifye tou ke chak sijè sous ta konpoze de plizyè patisyon, pou yo ka bay chak egzanp yon sou-ansanm nan patisyon sa yo.

Mwen pral mansyone tou ke li nan pratik komen fè yon kopi backup nan magazen leta a pou ke, pou egzanp, nan ka rekiperasyon apre yon echèk, transfere kopi sa a nan yon lòt egzanp. Pou chak magazen eta nan Kafka Streams, yo kreye yon sijè repwodui ak yon jounal chanjman (ki swiv dènye nouvèl lokal yo). Kidonk, Kafka toujou ap fè bak magazen leta a. Se poutèt sa, nan evènman an nan yon echèk nan youn oswa yon lòt Kafka Streams egzanp, magazen eta a ka byen vit retabli sou yon lòt egzanp, kote patisyon ki koresponn yo pral ale. Tès nou yo te montre ke sa a se fè nan yon kesyon de segonn, menm si gen dè milyon de dosye nan magazen an.

Deplase soti nan yon sèl mikwosèvis ak eta pataje nan yon gwoup mikwosèvis, li vin mwens trivial pou aplike Get State API la. Nan nouvo sitiyasyon an, magazen eta a nan chak mikwosèvis gen sèlman yon pati nan foto an jeneral (sa yo objè ki gen kle yo te trase nan yon patisyon espesifik). Nou te oblije detèmine ki egzanp ki te genyen eta a nan objè nou te bezwen an, epi nou te fè sa ki baze sou metadata fil yo, jan yo montre anba a:

Pa sèlman pwosesis: Ki jan nou te fè yon baz done distribye soti nan Kafka Streams, ak sa ki te soti nan li

Figi 7: Sèvi ak metadata kouran, nou detèmine nan ki egzanp pou mande eta objè a vle; yon apwòch menm jan an te itilize ak GET ALL API a

Konklizyon kle yo

Magazen leta nan Kafka Streams ka sèvi kòm yon baz done distribye defakto,

  • toujou ap repwodui nan Kafka
  • Yon API CRUD ka fasilman bati sou tèt yon sistèm konsa
  • Manyen plizyè patisyon se yon ti kras pi konplike
  • Li posib tou pou ajoute youn oswa plis magazen eta nan topoloji difizyon an pou estoke done oksilyè yo. Opsyon sa a ka itilize pou:
  • Depo alontèm done ki nesesè pou kalkil pandan pwosesis kouran an
  • Depo alontèm nan done ki ka itil pwochen fwa egzanp difizyon an ap pwovizyon
  • plis toujou...

Avantaj sa yo ak lòt fè Kafka Streams byen adapte pou kenbe eta mondyal nan yon sistèm distribiye tankou nou an. Kafka Streams te pwouve yo trè serye nan pwodiksyon (nou te gen nòmalman pa gen okenn pèt mesaj depi deplwaye li), epi nou gen konfyans ke kapasite li yo pa pral sispann la!

Sous: www.habr.com

Add nouvo kòmantè