Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Hoy Habr!

Kami nagpahinumdom kanimo nga ang pagsunod sa libro bahin sa Kafka kami nagpatik ug parehas nga makaiikag nga buhat bahin sa librarya Kafka Streams API.

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Sa pagkakaron, ang komunidad nagkat-on pa lang sa mga limitasyon niining gamhanang himan. Mao nga, bag-o lang gipatik ang usa ka artikulo, ang paghubad nga gusto namon ipaila kanimo. Gikan sa iyang kaugalingon nga kasinatian, gisultihan sa tagsulat kung giunsa paghimo ang Kafka Streams nga usa ka giapod-apod nga pagtipig sa datos. Malingaw sa pagbasa!

Apache librarya Mga sapa sa Kafka gigamit sa tibuok kalibutan sa mga negosyo alang sa giapod-apod nga pagproseso sa sapa sa ibabaw sa Apache Kafka. Usa sa dili kaayo gipabilhan nga mga aspeto niini nga balangkas mao nga kini nagtugot kanimo sa pagtipig sa lokal nga estado nga gihimo base sa pagproseso sa thread.

Sa kini nga artikulo, sultihan ko ikaw kung giunsa nga gigamit sa among kompanya ang kini nga oportunidad sa paghimo og usa ka produkto alang sa seguridad sa aplikasyon sa panganod. Gamit ang Kafka Streams, naghimo kami og gipaambit nga mga microservice sa estado, nga ang matag usa nagsilbing usa ka fault-tolerant ug magamit kaayo nga tinubdan sa kasaligang impormasyon bahin sa kahimtang sa mga butang sa sistema. Alang kanamo, kini usa ka lakang sa unahan sa mga termino sa pagkakasaligan ug kadali sa suporta.

Kung interesado ka sa usa ka alternatibo nga pamaagi nga nagtugot kanimo sa paggamit sa usa ka sentral nga database aron suportahan ang pormal nga kahimtang sa imong mga butang, basaha kini, kini makapaikag ...

Ngano nga gihunahuna namon nga panahon na aron usbon ang paagi sa among pagtrabaho sa gipaambit nga estado

Kinahanglan namon nga ipadayon ang kahimtang sa lainlaing mga butang base sa mga taho sa ahente (pananglitan: giatake ba ang site)? Sa wala pa molalin sa Kafka Streams, kanunay kaming nagsalig sa usa ka sentral nga database (+ serbisyo sa API) alang sa pagdumala sa estado. Kini nga pamaagi adunay mga kakulangan: date intensive nga mga sitwasyon ang pagpadayon sa pagkamakanunayon ug pag-synchronize mahimong usa ka tinuud nga hagit. Ang database mahimong usa ka bottleneck o matapos kahimtang sa lumba ug nag-antos sa dili matag-an.

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 1: Usa ka tipikal nga senaryo sa split-state nga nakita sa wala pa ang transisyon sa
Kafka ug Kafka Streams: gipahibalo sa mga ahente ang ilang mga panan-aw pinaagi sa API, ang gi-update nga estado gikalkula pinaagi sa usa ka sentro nga database

Himamata ang Kafka Streams, nga nagpasayon ​​sa paghimo sa gipaambit nga mga microservice sa estado

Mga usa ka tuig ang milabay, nakahukom kami nga susihon pag-ayo ang among gipaambit nga mga senaryo sa estado aron matubag kini nga mga isyu. Nakahukom dayon kami nga sulayan ang Kafka Streams - nahibal-an namon kung unsa kini ka scalable, labi ka magamit ug matugoton sa sayup, kung unsa ang adunahan nga pag-andar sa streaming (mga pagbag-o, lakip ang mga stateful). Kung unsa ang among gikinahanglan, wala pay labot kung unsa ka hamtong ug kasaligan ang sistema sa pagmemensahe sa Kafka.

Ang matag usa sa mga stateful nga microservice nga among gibuhat gitukod sa ibabaw sa usa ka pananglitan sa Kafka Streams nga adunay medyo simple nga topology. Kini naglangkob sa 1) usa ka tinubdan 2) usa ka processor nga adunay usa ka padayon nga key-value store 3) usa ka lababo:

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 2: Ang default nga topology sa among streaming nga mga higayon alang sa stateful microservices. Timan-i nga adunay usa usab ka repository dinhi nga adunay metadata sa pagplano.

Niining bag-ong pamaagi, ang mga ahente nag-compose og mga mensahe nga gipakaon ngadto sa tinubdan nga hilisgutan, ug ang mga konsumedor—ingon, usa ka serbisyo sa pagpahibalo sa koreyo—makadawat sa nakalkula nga shared state pinaagi sa lababo (output topic).

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 3: Bag-ong panig-ingnan nga dagan sa buluhaton alang sa usa ka senaryo nga adunay gipaambit nga mga microservice: 1) ang ahente nagmugna og mensahe nga moabut sa hilisgutan sa gigikanan sa Kafka; 2) usa ka microservice nga adunay gipaambit nga estado (gamit ang Kafka Streams) nagproseso niini ug gisulat ang kalkulado nga estado sa katapusan nga hilisgutan sa Kafka; pagkahuman 3) ang mga konsumedor modawat sa bag-ong estado

Uy, kining built-in nga key-value store kay mapuslanon kaayo!

Sama sa nahisgutan sa ibabaw, ang among gipaambit nga topology sa estado adunay sulud nga tindahan nga hinungdanon nga kantidad. Nakakita kami daghang mga kapilian sa paggamit niini, ug ang duha niini gihulagway sa ubos.

Opsyon #1: Paggamit ug key-value store para sa mga kalkulasyon

Ang among unang key-value store naglangkob sa auxiliary data nga among gikinahanglan para sa mga kalkulasyon. Pananglitan, sa pipila ka mga kaso ang gipaambit nga estado gitino pinaagi sa prinsipyo sa "mga boto sa kadaghanan". Ang repository mahimong maghupot sa tanan nga labing bag-o nga mga taho sa ahente sa kahimtang sa usa ka butang. Dayon, sa dihang nakadawat mi og bag-ong report gikan sa usa ka ahente o sa lain, mahimo namong i-save kini, makuha ang mga report gikan sa tanang ubang ahente mahitungod sa kahimtang sa samang butang gikan sa storage, ug balikon ang kalkulasyon.
Ang Figure 4 sa ubos nagpakita kung giunsa namo gibutyag ang key/value store sa pamaagi sa pagproseso sa processor aron ang bag-ong mensahe maproseso na.

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Ilustrasyon 4: Among giablihan ang access sa key-value store para sa pamaagi sa pagproseso sa processor (pagkahuman niini, ang matag script nga naglihok sa shared state kinahanglang mag-implementar sa pamaagi. doProcess)

Opsyon #2: Paghimo og CRUD API sa ibabaw sa Kafka Streams

Sa pag-establisar sa among sukaranan nga dagan sa buluhaton, nagsugod kami sa pagsulay sa pagsulat sa usa ka RESTful CRUD API para sa among gipaambit nga mga microservice sa estado. Gusto namon nga makuha ang kahimtang sa pipila o tanan nga mga butang, ingon man itakda o tangtangon ang kahimtang sa usa ka butang (mapuslanon alang sa suporta sa backend).

Aron masuportahan ang tanan nga Get State APIs, bisan kanus-a kinahanglan namon nga kalkulahon pag-usab ang estado sa panahon sa pagproseso, among gitipigan kini sa usa ka built-in nga key-value store sa dugay nga panahon. Sa kini nga kaso, kini mahimong yano nga ipatuman ang ingon nga API gamit ang usa ka pananglitan sa Kafka Streams, ingon sa gipakita sa lista sa ubos:

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 5: Paggamit sa built-in nga key-value store aron makuha ang precomputed nga kahimtang sa usa ka butang

Ang pag-update sa kahimtang sa usa ka butang pinaagi sa API dali ra usab ipatuman. Sa panguna, ang kinahanglan nimong buhaton mao ang paghimo usa ka prodyuser sa Kafka ug gamiton kini aron maghimo usa ka rekord nga adunay sulud nga bag-ong estado. Kini nagsiguro nga ang tanan nga mga mensahe nga namugna pinaagi sa API maproseso sa parehas nga paagi sama sa nadawat gikan sa ubang mga prodyuser (eg ahente).

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 6: Mahimo nimong itakda ang estado sa usa ka butang gamit ang Kafka producer

Gamay nga komplikasyon: Ang Kafka adunay daghang mga partisyon

Sunod, gusto namong ipang-apod-apod ang load sa pagproseso ug pauswagon ang pagkaanaa pinaagi sa paghatag og cluster sa shared-state microservices kada senaryo. Ang pag-setup dali ra: sa higayon nga among gi-configure ang tanan nga mga higayon nga modagan sa ilawom sa parehas nga ID sa aplikasyon (ug parehas nga mga server sa bootstrap), hapit tanan nga nahimo awtomatiko. Gitino usab namo nga ang matag tinubdan nga hilisgutan maglangkob sa daghang mga partisyon, aron ang matag pananglitan mahimong ma-assign sa usa ka subset sa maong mga partisyon.

Isulti usab nako nga kasagarang praktis ang paghimo og backup nga kopya sa tindahan sa estado aron, pananglitan, sa kaso sa pagkaayo pagkahuman sa pagkapakyas, ibalhin kini nga kopya sa lain nga higayon. Alang sa matag tindahan sa estado sa Kafka Streams, usa ka gisubli nga hilisgutan ang gihimo nga adunay usa ka log sa pagbag-o (nga nagsubay sa mga lokal nga update). Sa ingon, kanunay nga gisuportahan ni Kafka ang tindahan sa estado. Busa, kung adunay kapakyasan sa usa o lain nga pananglitan sa Kafka Streams, ang tindahan sa estado mahimong dali nga mapasig-uli sa lain nga higayon, kung diin moadto ang katugbang nga mga partisyon. Gipakita sa among mga pagsulay nga kini nahimo sa pila ka segundo, bisan kung adunay milyon-milyon nga mga rekord sa tindahan.

Ang pagbalhin gikan sa usa ka microservice nga adunay gipaambit nga estado ngadto sa usa ka pundok sa mga microservice, mahimong dili kaayo hinungdanon ang pagpatuman sa Get State API. Sa bag-ong sitwasyon, ang state store sa matag microservice naglangkob lamang sa bahin sa kinatibuk-ang hulagway (kadtong mga butang kansang mga yawe gimapa sa usa ka piho nga partisyon). Kinahanglan namon nga mahibal-an kung unsang pananglitan ang adunay kahimtang sa butang nga among gikinahanglan, ug gibuhat namon kini base sa metadata sa thread, ingon sa gipakita sa ubos:

Dili lamang pagproseso: Giunsa namo paghimo ang usa ka gipang-apod-apod nga database gikan sa Kafka Streams, ug unsa ang gikan niini

Figure 7: Gamit ang stream metadata, atong matino kung asa nga instance magpangutana sa kahimtang sa gusto nga butang; usa ka susama nga pamaagi ang gigamit sa GET ALL API

Pangunang mga kaplag

Ang mga tindahan sa estado sa Kafka Streams mahimong magsilbing de facto nga gipang-apod-apod nga database,

  • kanunay nga gisundog sa Kafka
  • Ang usa ka CRUD API dali nga matukod sa ibabaw sa ingon nga sistema
  • Ang pagdumala sa daghang mga partisyon mas komplikado
  • Posible usab nga idugang ang usa o daghang mga tindahan sa estado sa streaming topology aron matipigan ang auxiliary data. Kini nga opsyon mahimong gamiton alang sa:
  • Ang dugay nga pagtipig sa datos nga gikinahanglan alang sa mga kalkulasyon sa panahon sa pagproseso sa sapa
  • Dugay-dugay nga pagtipig sa mga datos nga mahimong mapuslanon sa sunod higayon nga mahatag ang streaming nga pananglitan
  • daghan pa...

Kini ug uban pang mga bentaha naghimo sa Kafka Streams nga haum kaayo alang sa pagmintinar sa global nga estado sa usa ka distributed nga sistema sama sa atoa. Ang Kafka Streams napamatud-an nga kasaligan kaayo sa produksiyon (halos wala kami nawala nga mensahe sukad sa pag-deploy niini), ug kami masaligon nga ang mga kapabilidad niini dili mohunong didto!

Source: www.habr.com

Idugang sa usa ka comment